故意删除替代docker-compose文件中的卷

时间:2017-03-25 18:29:59

标签: docker docker-compose

对于生产部署,我不想要共享卷。所以,我有一个覆盖文件,但这不会删除卷。

有没有办法删除覆盖文件中的共享卷?我想避免仅仅为了开发而使用覆盖,因为这看起来很笨拙。

这是我的docker-compose.yml

version: '2'
# other services defined here
services:
  web:
    build:
      context: .
    # other configuration
    volumes:
      - .:${APP_DIR}

我的docker-compose.prod.yml

version: '2'
services:
  web:
    volumes: []
    restart: always

2 个答案:

答案 0 :(得分:5)

合并docker-compose中的列表条目时,会添加新地图,但不会删除现有的卷映射。

你可以通过让dev拥有覆盖文件,或者使用版​​本2.1来实现这一点,你可以extend a common docker file而不是应用覆盖,这可以让devs指向一个文件。

这可能是你的docker-compose.yml:

version: '2'
# other services defined here
services:
  web:
    extends:
      file: docker-compose.prod.yml
      service: web
    build:
      context: .
    restart: no
    volumes:
      - .:${APP_DIR}

你的docker-compose.prod.yml将包含所有常见配置和prod设置:

version: '2'
services:
  web:
    # other configuration
    restart: always

答案 1 :(得分:2)

我假设您想使用docker-compose up来启动开发版本,并拥有第二个配置文件来将其扩展以用于生产。

如果要确保完全覆盖卷,请使用第三个配置文件docker-compose.override.yml。将所有用于开发的卷定义放在此处。

docker-compose up默认使用此文件 扩展基本配置。但是,当您执行类似docker-compose -f docker-compose.yml -f production.yml的操作时,docker-compose.override.yml文件将不会加载,并且您只会从生产文件中获取卷。