参考文档: Compose file versions and upgrading
Networks 配置参考
顶级 networks 键可以让你指定要创建的网络:
- 有关 Compose 使用 Docker 网络功能和所有网络驱动程序选项的完整说明,请参阅 网络指南
- 有关网络的 Docker Labs 教程,请从 设计可扩展的便携式 Docker 容器网络开始.
driver
指定该网络应使用哪个驱动程序。默认驱动程序取决于你所使用的的 Docker 引擎的配置方式,但是在大多数情况下,单个主机上使用 bridge 网络,在 Swarm 上使用 overlay。
如果驱动程序不可用,Docker 引擎将返回错误。
1 | driver: overlay |
bridge
Docker 默认在单个主机上使用 bridge (桥接)网络。有关如何使用网桥网络的示例,请参阅有关网桥网络的 Docker Labs 教程 Bridge
overlay
overlay 驱动程序在一个集群中的多个节点之间创建一个命名网络
host 或 none
使用 host 的网络集群,或者不使用网络。相当于 docker run --net=host
或 docker run --net=none
。仅在使用 docker stack
命令时使用,如果使用 docker-compose
命令,请改用 network_mode
。
使用内置网络(例如 host 或 none)的语法略有不同。定义一个名称为 host 或 none (Docker已经自动创建爱你)的外部网络,以及 Compose 可以使用的别名(在以下示例中为 hostnet 或 nonet),然后使用该别名向该网络授予服务访问权限。
1 | version: "3.9" |
1 | services: |
如果要在 build 命令中使用特定网络,示例如下
1 | services: |
driver_opts
将选项列表指定为键值对,以传递给该网络的驱动程序。这些选项取决于驱动程序,请参阅驱动程序的文档以获取更多信息。(可选)
1 | driver_opts: |
attachable
仅在驱动程序设置为 overlay 时使用,如果设置为 true,则除了服务之外,独立容器还可以连接到此网络。如果独立容器连接到 overlay 网络,则它可以与也从其他 Docker 守护程序附加到 overlay 网络的服务和独立容器进行通信。
1 | networks: |
enable_ipv6
在此网络上启用 IPv6 网络。该选项不支持 3 版本格式,要求使用版本 2 的 Compose文件,因此 swarm 模式不止此指令。
ipam
指定自定义 IPAM 配置。这是一个具有多个属性的对象,每个属性都是可选的。
- driver: 自定义 IPAM 驱动程序,而不是默认驱动程序
- config: 具有零个或多个配置块的列表,每个配置块包含以下任何键
- subnet: 代表网段的 CIDR 格式的子网
一个完整的示例
1 | ipam: |
目前,其他 IPAM 配置(例如网关)仅适用于版本 2
internal
默认情况下,Docker 还将桥接网络连接到它以提供外部连接。如果要创建爱你外部隔离的 overlay 网络,可以将此选项设置为 true
labels
使用 Docker 标签将元数据添加到容器。你可以使用数组或字典。建议使用 反向 DNS 表示法,以防止标签与其他软件使用的标签冲突。
1 | labels: |
1 | labels: |
external
如果设置为 true,则指定此网络是在 Compose 之外创建的。docker-compose up 不会尝试创建它,如果不存在,则会引发错误。
对于 3.3 版本格式或更低版本,外部不能与其他网络配置 key(driver,driver_opts, ipam, internal)一起使用,对于 3.4 及更高版本,此限制不存在。
在下面的示例中,proxy 是通往外界的网关。Compose 不会尝试创建爱你一个名为 [projectanme]_outside 的网络,而是会寻找一个简单的称为 outside 的现有网络,并将代理服务的内容连接到该网络。
1 | version: "3.9" |
3.5 版本格式弃用了 external.name,而是使用 name,
name
为此网络设置一个自定义名称。名称字段可用于引用包含特殊字符的网络。
1 | version: "3.9" |
它也可以与外部属性结合使用
1 | version: "3.9" |
configs 配置参考
顶层 configs 声明定义或引用可以授予此堆栈中的服务的配置。配置的来源是文件或 external。
- file: 使用指定路径中的文件内容创建配置;
- external: 如果设置为 true,则指定此配置已创建。Docker 不会尝试创建它,如果它不存在,则会发生未找到配置错误;
- name: Docker 中的配置对象的名称。此字段可用于引用包含特殊字符的配置。
- driver 和 driver_opts: 定制 secret 驱动程序的名称,以作为键值对传递给特定于驱动程序的选项;
- template_driver: 要使用的模板驱动程序名称,它控制是否以及如何将 secret 有效加载为模板;如果未设置驱动程序,则不使用任何模板。当前支持的唯一驱动程序就是 golang,它使用 golang。
在下面的示例中,部署堆栈时创建了 my_first_config ,并且 Docker 中已经存在 my_second_config.
1 | configs: |
外部配置的另一个变体是 Docker 中的配置名称与服务中存在的名称不同时。以下示例修改了前一个示例,以使用名为 redis_config的外部配置
1 | configs: |
secrets 配置参考
顶级的 secrets 声明定义或引用可以授予此堆栈中的服务的 secrets。secret 的来源可以是文件,也可以是 external。
- file: 使用指定路径中的文件内容创建 secret
- external: 如果设置为 true,则指定此 secret 已创建。Docker 不会尝试创建它,如果不存在,则会发生 secret 未找到错误。
- name: Docker 中 secret 对象的名称。
- template_driver: y要使用的模板驱动程序的名称,它控制是否以及如何将 secret 有效加载为模板;
在下面的示例中,部署堆栈时,my_first_secret
创建为 <stack_name>_my_first_secret
,并且 Docker 中已经存在 my_second_secret
.
1 | secrets: |