有意删除覆盖 docker 撰写文件中的卷



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

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

这是我的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

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

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

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

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

您可以通过使 dev 具有覆盖文件来实现这一点,或者直到版本 2.1,您可以扩展一个通用的 docker 文件,而不是应用允许开发人员指向单个文件的覆盖。

这可能是你的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将包含所有常见的配置和生产设置:

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

最新更新