繁体   English   中英

docker-compose.yml 无效

[英]docker-compose.yml invalidate

您好,我有一个用于常规操作的默认配置。 现在我想用第二个 yml 覆盖第一个 yml 中的东西。 准确地说,是卷的位置。

docker-compose.yml:

...
volumes:
  database:
    driver_opts:
      type: none
      device: /opt/data/database/
      o: bind

但我想在开发时使用默认位置(/var/libs/docker/volumes/project_database/_data)。

根据调用顺序是否有选项的优先级? -f a.yml -f b.yml b.yml 将覆盖 a.yml 或类似的东西?

注释掉 docker-compose.yml 中的行不是我想要 go 的方式。

在 Docker 文档中的Compose 中扩展服务指出:

要使用多个覆盖文件或具有不同名称的覆盖文件,您可以使用-f选项指定文件列表。 Compose 按照在命令行中指定的顺序合并文件。

因此,在您的示例( docker -f a.yml -f b.yml... )中,后面文件中的定义将增加前面文件中的定义。 默认情况下,Compose 知道docker-compose.override.yml文件,它将以这种方式扩充默认的docker-compose.yml文件,而无需显式的-f选项。

同一页面有一个添加和覆盖配置的规则列表。 如果某物是一个逻辑列表(如expose ),则附加后面文件中的值; 如果是逻辑 map (如environment ),则后面文件中的值替换早期文件中的值; 如果是逻辑标量值(如image ),则使用后面文件中的值。

顶级volumes:没有具体讨论,但我希望它们按照您在本文档中希望它们的方式运行。 如果两个文件都为命名卷提供了定义,则后面文件中的定义优先,但仅在一个或另一个中声明一个卷是有效的。

(这在 Compose Python 代码中得到证实compose.config.load()采用包含文件名列表的配置并返回合并的字典格式配置。对于除services:它遵循一个通用的load_mapping() ; 除了一些特定的 object 键之外,这只是执行一个浅合并,其中后面文件中的完整定义替换早期文件中的定义。注意这意味着您必须在覆盖中提供所有每个卷的选项文件。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM