Docker Compose中如何正确配置主机Bind Mount?
正确配置Docker Compose的Bind Mount
你之前的配置错误核心在于两点:
- Bind Mount的配置位置错误:应该放在services下对应服务的volumes字段内,而非顶层的
volumes块(顶层volumes块用于定义命名卷,不是Bind Mount) - YAML格式不符合语法要求:不管是短格式还是长格式,都要严格遵循YAML的映射/列表语法
以下是两种正确的配置方式:
方式1:短格式(推荐,简洁直观)
直接使用主机绝对路径:容器内路径的格式,在服务的volumes字段下添加挂载规则:
version: "3.8" services: srv1: build: context: /opt/P01_SH/Dockerfiles/ dockerfile: /opt/P01_SH/Dockerfiles/Dockerfile volumes: # 短格式:主机路径:容器路径 - /opt/Test_Data/:/test-data
方式2:长格式(适合需要额外参数的场景)
如果需要设置只读挂载等额外参数,可使用长格式的映射写法,注意YAML的缩进规范:
version: "3.8" services: srv1: build: context: /opt/P01_SH/Dockerfiles/ dockerfile: /opt/P01_SH/Dockerfiles/Dockerfile volumes: # 长格式:明确指定挂载类型、主机源路径、容器目标路径 - type: bind source: /opt/Test_Data/ target: /test-data # 可选配置:设置为只读挂载 # read_only: true
额外说明
- 主机路径必须使用绝对路径,否则Docker会将其识别为命名卷而非Bind Mount
- 你Dockerfile中的
VOLUME /test-data仅用于声明容器内的挂载点,不会影响Bind Mount的配置,Bind Mount会直接覆盖该挂载点的内容 - 原docker-compose文件中的两个顶层
volumes块可完全删除,Bind Mount不需要在顶层定义
内容的提问来源于stack exchange,提问作者RTC222
相关产品推荐
相关产品推荐

