【问题标题】:Intentionally removing volumes in override docker-compose files有意删除覆盖 docker-compose 文件中的卷
【发布时间】:2017-03-25 18:29:59
【问题描述】:

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

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

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 这太好了,谢谢。花了一段时间试图弄清楚如何使覆盖工作。 IMO 这比将 prod 设置为默认值更好,因为它不会强制您在运行 dev 命令时指定多个文件。
    【解决方案2】:

    合并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 将包含所有常见的配置和产品设置:

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

    【讨论】:

    • 我不确定这如何解决问题。当两个撰写文件合并时,卷是否仍然定义?另外,你可以通过让 dev 拥有覆盖文件来实现这一点是什么意思?
    • @Johnny 我建议将撰写文件反转,而不是从 dev 定义中扩展 prod,而是从 prod 定义中扩展 dev。
    • 毕竟我就是这样做的。仍然觉得有些脏,但这是我能找到的最好的。
    猜你喜欢
    • 2019-02-05
    • 2019-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-12
    • 1970-01-01
    • 2018-06-08
    相关资源
    最近更新 更多