You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Docker Compose将含YAML配置的文件夹添加至容器?

解决Docker Compose中services.volumes must be a mapping报错并挂载configs文件夹

你遇到的报错是因为把volumes配置放错位置了——Docker Compose的语法里,volumes不能直接写在顶级的services节点下面,它要么是作为顶级节点定义命名卷,要么是放在某个具体服务(比如你的app或者postgres)的配置块里,用来给这个服务挂载目录/卷。

你的需求是让应用能访问configs/config.yaml,所以正确的做法是把挂载配置放到app服务的配置里,具体修改如下:

修正后的完整docker-compose.yml

version: '3.8'

services:
    postgres:
        image: postgres:12
        restart: always
        ports:
            - '5432:5432'    
        volumes:
            - ./db_data:/var/lib/postgresql/data
            - ./server/scripts/init.sql:/docker-entrypoint-initdb.d/create_tables.sql
        env_file:
            - local.env    
        healthcheck:
            test: [ "CMD", "pg_isready", "-q", "-d", "devdb", "-U","postgres" ]
            timeout: 45s
            interval: 10s
            retries: 10
    app:
        build: 
          context: ./server/app
          dockerfile: Dockerfile
        env_file:
            - local.env
        environment:
            - POSTGRES_USER=postgres
            - POSTGRES_PASSWORD=postgres
            - POSTGRES_DB=devdb
        # 把挂载配置移到这里!使用相对路径绑定本地configs文件夹到容器内
        volumes:
            - ./configs:/configs

# 顶级volumes节点用来定义命名卷,如果你不需要命名卷可以删掉,这里你用的是绑定挂载,所以这个可留可删
volumes:
  configs:

关键说明:

  1. 位置修正:原来的volumes: - /configs:/configs被移动到了app服务的配置块内,这样Docker才知道要给哪个服务挂载目录。
  2. 路径优化:我把路径改成了./configs:/configs,这是相对路径(相对于docker-compose.yml所在的目录),能准确挂载你项目根目录下的configs文件夹,而/configs:/configs会挂载宿主机根目录下的configs,大概率不是你想要的。
  3. 命名卷的作用:你在顶级节点定义的volumes: configs是命名卷,如果你只是用绑定挂载(本地文件夹映射到容器),这个命名卷其实可以删除,不会影响挂载效果。

这样修改后,启动容器时就不会再报错,你的应用也能在容器内的/configs路径下访问到config.yaml文件了。

内容的提问来源于stack exchange,提问作者Omegon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 18:02:27