在线文档教程
Docker 17
撰写 | Compose

版本2 | Version 2 (Compose)

Compose 文件版本2参考

参考和指导

这些主题描述 Compose 文件格式的第2版。

Compose 和 Docker 兼容性矩阵

有几种版本的 Compose 文件格式 - 1,2,2.x 和3.x 下面的表格是一个快速的样子。有关每个版本包含的内容以及如何升级的完整详细信息,请参阅关于版本和升级

此表显示哪些 Compose 文件版本支持特定的 Docker 版本。

Compose file formatDocker Engine release
3.317.06.0+
3.217.04.0+
3.11.13.1+
3.01.13.0+
2.317.06.0+
2.21.13.0+
2.11.12.0+
2.01.10.0+
1.01.9.1.+

除了表格中显示的 Compose 文件格式版本外,Compose 本身也处于发布日程安排中,如 Compose 发行版中所示,但文件格式版本不一定随每个发行版而增加。例如,Compose 文件格式3.0首先在 Compose 版本1.10.0中引入,并在随后的版本中逐步版本化。

服务配置参考

Compose 文件是一个定义服务,网络和卷的 YAML 文件。Compose 文件的默认路径是./docker-compose.yml

提示:您可以对此文件使用.yml.yaml扩展名。他们都工作。

容器定义包含到每个容器启动用于该服务,很像传递命令行参数来将被应用的配置docker run。同样,网络和卷的定义类似于docker network createdocker volume create

正如docker run在 Dockerfile 指定选项(例如,CMDEXPOSEVOLUMEENV)是默认的-你不需要再次指定它们docker-compose.yml

您可以使用类 Bash ${VARIABLE}语法在配置值中使用环境变量- 有关完整详细信息,请参阅变量替换。

本节包含版本2中服务定义所支持的所有配置选项的列表。

blkio_config

用于为此服务设置块 IO 限制的一组配置选项。

version: '2.2' services: foo: image: busybox blkio_config: weight: 300 weight_device: - path: /dev/sda weight: 400 device_read_bps: - path: /dev/sdb rate: '12mb' device_read_iops: - path: /dev/sdb rate: 120 device_write_bps: - path: /dev/sdb rate: '1024k' device_write_iops: - path: /dev/sdb rate: 30

device_read_bps, device_write_bps

为给定设备上的读/写操作设置每秒字节数限制。列表中的每个项目必须有两个键:

  • path,为受影响的设备定义符号路径

device_read_iops, device_write_iops

为给定设备上的读/写操作设置每秒操作的限制。列表中的每个项目必须有两个键:

  • path,为受影响的设备定义符号路径

weight

修改分配给该服务的带宽相对于其他服务的比例。采用10到1000之间的整数值,其中500是默认值。

weight_device

微调设备的带宽分配。列表中的每个项目必须有两个键:

  • path,为受影响的设备定义符号路径

build

在构建时应用的配置选项。

build 可以指定为包含构建上下文的路径的字符串,也可以指定具有在上下文中指定的路径的对象,也可以指定 dockerfile 和 args。

build: ./dir build: context: ./dir dockerfile: Dockerfile-alternate args: buildno: 1

如果指定image以及build,然后撰写的名称与内置的图像webapp和可选的tag规定image

build: ./dir image: webapp:tag

这将产生一个名为webapp和标记的图像,由此tag构建而成./dir

context

版本2文件格式和在版本1中,只需使用 build。

可以是包含 Dockerfile 的目录的路径,也可以是到 git 存储库的 URL。

当提供的值是相对路径时,它被解释为相对于撰写文件的位置。这个目录也是发送到 Docker 守护进程的构建上下文。

撰写将使用生成的名称进行构建和标记,然后使用该图像。

build: context: ./dir

dockerfile

备用 Dockerfile。

撰写将使用替代文件来构建。还必须指定构建路径。

build: context: . dockerfile: Dockerfile-alternate

args

版本2文件格式。

添加构建参数,这些参数是仅在构建过程中可访问的环境变量。

首先,在 Dockerfile 中指定参数:

ARG buildno ARG password RUN echo "Build number: $buildno" RUN script-requiring-password.sh "$password"

然后指定build键下的参数。您可以传递映射或列表:

build: context: . args: buildno: 1 password: secret build: context: . args: - buildno=1 - password=secret

指定构建参数时可以省略该值,在这种情况下,构建时的值是 Compose 运行环境中的值。

args: - buildno - password

:YAML 布尔值(truefalseyesnoonoff)必须用引号括起来,这样分析器会将它们解释为字符串。

labels

添加了2.1版文件格式

使用 Docker 标签将元数据添加到生成的图像。您可以使用数组或字典。

建议您使用反向 DNS 标记来防止您的标签与其他软件使用的标签冲突。

build: context: . labels: com.example.description: "Accounting webapp" com.example.department: "Finance" com.example.label-with-empty-value: "" build: context: . labels: - "com.example.description=Accounting webapp" - "com.example.department=Finance" - "com.example.label-with-empty-value"

network

在2.2版文件格式中添加

设置网络容器将RUN在构建期间连接到指令。

build: context: . network: host build: context: . network: custom_network_1

target

在2.3版本文件格式中添加

根据定义的内部构建指定的舞台Dockerfile。有关详细信息,请参阅多阶段构建文档。

build: context: . target: prod

cap_add, cap_drop

添加或删除容器功能。请参阅man 7 capabilities完整列表。

cap_add: - ALL cap_drop: - NET_ADMIN - SYS_ADMIN

command

覆盖默认命令。

command: bundle exec thin -p 3000

该命令也可以是一个列表,方式类似于 dockerfile:

command: ["bundle", "exec", "thin", "-p", "3000"]

cgroup_parent

为容器指定一个可选的父 cgroup。

cgroup_parent: m-executor-abcd

container_name

指定一个自定义容器名称,而不是生成的默认名称。

container_name: my-web-container

由于 Docker 容器名称必须是唯一的,因此如果您指定了自定义名称,则无法将服务扩展到1个容器之外。试图这样做会导致错误。

devices

设备映射列表。使用与--device Docker 客户端创建选项相同的格式。

devices: - "/dev/ttyUSB0:/dev/ttyUSB0"

depends_on

版本2文件格式。

服务之间的快速依赖关系,这有两个影响:

  • docker-compose up将以依赖性顺序启动服务。在下面的例子中,db并且redis会在之前启动web

简单的例子:

version: '2' services: web: build: . depends_on: - db - redis redis: image: redis db: image: postgres

注意:在开始之前,depends_on不会等待dbredis“准备好” web- 直到它们开始。如果您需要等待服务准备就绪,请参阅控制启动顺序以了解有关此问题的更多信息以及解决此问题的策略。添加了2.1版文件格式。

运行状况检查表明,您希望依赖性在启动之前等待另一个容器“健康”(即其健康检查广告成功状态)。

例:

version: '2.1' services: web: build: . depends_on: db: condition: service_healthy redis: condition: service_started redis: image: redis db: image: redis healthcheck: test: "exit 0"

在上面的例子中,Compose 将redis在开始之前等待服务启动(传统行为)和db服务健康web

有关补充信息,请参阅 healthcheck 部分。

dns

自定义 DNS 服务器。可以是单个值或列表。

dns: 8.8.8.8 dns: - 8.8.8.8 - 9.9.9.9

dns_opt

要添加到容器的 resolv.conf 文件的自定义DNS选项列表。

dns_opt: - use-vc - no-tld-query

dns_search

自定义DNS搜索域。可以是单个值或列表。

dns_search: example.com dns_search: - dc1.example.com - dc2.example.com

tmpfs

在容器内安装临时文件系统。可以是单个值或列表。

tmpfs: /run tmpfs: - /run - /tmp

entrypoint

覆盖默认入口点。

entrypoint: /code/entrypoint.sh

入口点也可以是一个列表,类似于dockerfile:

entrypoint: - php - -d - zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20100525/xdebug.so - -d - memory_limit=-1 - vendor/bin/phpunit

注意:设置入口点将覆盖使用ENTRYPOINT Dockerfile指令在服务图像上设置的任何默认入口点,并清除图像上的任何默认命令 - 这意味着如果Dockerfile中有CMD指令,它将被忽略。

env_file

Add environment variables from a file. Can be a single value or a list.

如果已使用 docker-compose -f FILE 指定了 Compose 文件,则 env_file 中的路径相对于该文件所在的目录

在环境部分中声明的环境变量会覆盖这些值 - 即使这些值为空或未定义,这也适用。

env_file: .env env_file: - ./common.env - ./apps/web.env - /opt/secrets.env

Compose 期望 env 文件中的每一行都是 VAR = VAL 格式。以#开头的行(即注释)将被忽略,空行也将被忽略。

# Set Rails/Rack environment RACK_ENV=development

注意:如果您的服务指定了构建选项,则在构建期间,环境文件中定义的变量将不会自动显示。使用 build 的 args 子选项来定义构建时环境变量。

VAL 的值按原样使用,不进行修改。例如,如果值由引号括起(通常是 shell 变量的情况),则引号将包含在传递给 Compose 的值中。

请记住,列表中文件的顺序对于确定分配给多次显示的变量的值非常重要。列表中的文件从上到下进行处理。对于文件 a.env 中指定的相同变量,并在文件 b.env 中指定了不同的值,如果 b.env 列在下面(后面),则 b.env 中的值表示。例如,在 docker_compose.yml 中给出以下声明:

services: some-service: env_file: - a.env - b.env

以下文件:

# a.env VAR=1

# b.env VAR=hello

$VAR will be hello.

环境

添加环境变量。您可以使用数组或字典。任何布尔值; true,false,yes no,都需要用引号括起来,以确保YML 解析器不会将它们转换为 True 或 False 。

仅具有键的环境变量将解析为计算机正在运行的计算机上的值,这对于特定于机密或特定于主机的值很有用。

environment: RACK_ENV: development SHOW: 'true' SESSION_SECRET: environment: - RACK_ENV=development - SHOW=true - SESSION_SECRET

注意:如果您的服务指定了构建选项,则在构建期间,环境中定义的变量将不会自动显示。使用 build 的args 子选项来定义构建时环境变量。

显示

显示端口而不将它们发布到主机 - 它们只能被链接服务访问。只能指定内部端口。

expose: - "3000" - "8000"

扩展

在当前文件或其他文件中扩展另一个服务,可选地覆盖配置。

您可以将任何服务上的扩展与其他配置键一起使用。 extends 值必须是使用所需服务和可选文件键定义的字典。

extends: file: common.yml service: webapp

service 是要扩展的服务的名称,例如Web或数据库。该文件是定义该服务的Compose配置文件的位置

如果你省略 file Compose 在当前文件中查找服务配置。file 值可以是绝对路径或相对路径。如果指定相对路径,Compose 会将其视为相对于当前文件的位置。

可以扩展自己扩展另一个服务。你可以无限期地延长。 Compose不支持循环引用,如果遇到,则docker-compose会返回错误。

更多关于 extends,详见扩展的文件。

外部链接

链接到此 docker-compose.yml 之外或甚至在 Compose 之外的容器,尤其是对于提供共享或公共服务的容器。在指定容器名称和链接别名(CONTAINER:ALIAS)时,external_links 遵循类似于链接的语义。

external_links: - redis_1 - project_db_1:mysql - project_db_1:postgresql

注意:对于版本2文件格式,外部创建的容器必须至少连接到与链接到它们的服务相同的网络之一。

额外主机

添加主机名映射。使用与 docker client --add-host 参数相同的值。

extra_hosts: - "somehost:162.242.195.82" - "otherhost:50.31.209.229"

将在此服务的容器内的 / etc / hosts 中创建具有 ip 地址和主机名的条目,例如:

162.242.195.82 somehost 50.31.209.229 otherhost

组添加

指定容器内的用户将成为其成员的其他组(按名称或编号)。组必须存在于要添加的容器和主机系统中。一个有用的例子是当多个容器(作为不同用户运行)需要在主机系统上读取或写入相同文件时。该文件可由所有容器共享的组拥有,并在 group_add 中指定。有关更多详细信息,请参阅 Docker 文档。

完整的例子:

version: '2' services: myservice: image: alpine group_add: - mail

在创建的容器中运行 id 将显示用户属于邮件组,如果未使用 group_add,则不会出现这种情况。

“健康”检查

Version 2.1 file format and up.

配置运行的检查以确定此服务的容器是否“健康”。有关 healthchecks 如何工作的详细信息,请参阅HEALTHCHECK Dockerfile 指令的文档。

healthcheck: test: ["CMD", "curl", "-f", "http://localhost"] interval: 1m30s timeout: 10s retries: 3 start_period: 40s

interval, timeoutstart_period 指定为持续时间,

test 必须是字符串或列表。如果是列表,则第一项必须是 NONE,CMD 或 CMD-SHELL 。如果它是一个字符串,它相当于指定 CMD-SHELL 后跟该字符串。

# Hit the local web app test: ["CMD", "curl", "-f", "http://localhost"] # As above, but wrapped in /bin/sh. Both forms below are equivalent. test: ["CMD-SHELL", "curl -f http://localhost && echo 'cool, it works'"] test: curl -f https://localhost && echo 'cool, it works'

要禁用图像设置的任何默认运行状况检查,可以使用 disable:true。这相当于指定 test:[“NONE”]。

healthcheck: disable: true

注意:start_period 选项是更新的功能,仅适用于2.3文件格式。

图像

指定图像以从中启动容器。可以是存储库/标记或部分图像 ID 。

image: redis image: ubuntu:14.04 image: tutum/influxdb image: example-registry.com:4000/postgresql image: a4bc65fd

如果图像不存在,Compose 尝试拉取它,除非您还指定了构建,在这种情况下,它使用指定的选项构建它并使用指定的标记对其进行标记。

init

在2.2版文件格式中添加。

在容器内运行 init,转发信号并重新获取进程。设置布尔值以使用默认 init,或指定自定义路径的路径。

version: '2.2' services: web: image: alpine:latest init: true version: '2.2' services: web: image: alpine:latest init: /usr/libexec/docker-init

独立

在2.1版本格式中添加

指定容器的隔离技术。在 Linux 上,唯一受支持的值是 default 。在 Windows 上,可接受的值是default,process 和 hyperv。有关详细信息,请参阅 Docker Engine 文档。

标签

使用 Docker 标签向容器添加元数据。您可以使用数组或字典。

建议您使用反向 DNS 表示法来防止标签与其他软件使用的标签冲突。

labels: com.example.description: "Accounting webapp" com.example.department: "Finance" com.example.label-with-empty-value: "" labels: - "com.example.description=Accounting webapp" - "com.example.department=Finance" - "com.example.label-with-empty-value"

链接

链接到另一个服务中的容器。指定服务名称和链接别名(“SERVICE:ALIAS”),或仅指定服务名称。

web: links: - "db" - "db:database" - "redis"

链接服务的容器可以在与别名相同的主机名上访问,如果未指定别名,则可以访问服务名称。

链接还以与 depends_on 相同的方式表示服务之间的依赖关系,因此它们确定服务启动的顺序。

注意:如果同时定义链接和网络,则它们之间具有链接的服务必须共享至少一个共同的网络才能进行通信。我们建议使用网络。

记录

记录服务的配置。

logging: driver: syslog options: syslog-address: "tcp://192.168.0.42:123"

driver 程序名称指定服务容器的日志记录驱动程序,与 docker run 的--log-driver 选项一样(此处记录)。

默认值为json-file。

driver: "json-file" driver: "syslog" driver: "none"

注意:只有json文件和日志驱动程序驱动程序才能直接从 docker-compose up 和 docker-compose日志中获取日志。使用任何其他驱动程序将不会打印任何日志。

使用 options 键为日志记录驱动程序指定日志记录选项,与docker run 的--log-opt 选项一样。

记录选项是键值对。 syslog 选项的一个示例:

driver: "syslog" options: syslog-address: "tcp://192.168.0.42:123"

网络模型

版本2文件格式及以上。替换版本1网络选项。

网络模式。使用与 docker client --net 参数相同的值,以及特殊表单服务:[service name]。

network_mode: "bridge" network_mode: "host" network_mode: "none" network_mode: "service:[service name]" network_mode: "container:[container name/id]"

网络

版本2文件格式及以上。替换版本1网络选项。

要加入的网络,引用顶级网络密钥下的条目。

services: some-service: networks: - some-network - other-network

别名

网络上此服务的别名(备用主机名)。同一网络上的其他容器可以使用服务名称或此别名连接到其中一个服务的容器

由于 aliases 是网络范围的,因此相同的服务可以在不同的网络上具有不同的别名。

注意:网络范围的别名可以由多个容器共享,甚至可以由多个服务共享。如果是,则无法保证名称将解析为哪个容器。

services: some-service: networks: some-network: aliases: - alias1 - alias3 other-network: aliases: - alias2

在下面的示例中,提供了三个服务(web,worker 和 db),以及两个网络(new 和 legacy)。可以在新网络上的主机名 db 或 database 以及旧网络上的 db 或 mysql 中访问 db 服务。

version: '2' services: web: build: ./web networks: - new worker: build: ./worker networks: - legacy db: image: mysql networks: new: aliases: - database legacy: aliases: - mysql networks: new: legacy:

ipv4_address, ipv6_address

在加入网络时为此服务指定容器的静态IP地址。

顶级网络部分中的相应网络配置必须具有包含子网和网关配置的 ipam 块,覆盖每个静态地址。如果需要IPv6 寻址,则必须设置 enable_ipv6 选项。

实例:

version: '2.1' services: app: image: busybox command: ifconfig networks: app_net: ipv4_address: 172.16.238.10 ipv6_address: 2001:3984:3989::10 networks: app_net: driver: bridge enable_ipv6: true ipam: driver: default config: - subnet: 172.16.238.0/24 gateway: 172.16.238.1 - subnet: 2001:3984:3989::/64 gateway: 2001:3984:3989::1

link_local_ips

指定链接本地IP列表。链路本地 IP 是属于众所周知的子网的特殊 IP,由运营商完全管理,通常取决于部署它们的架构。因此它们不受 docker(IPAM驱动程序)管理。

示例网页:

version: '2.1' services: app: image: busybox command: top networks: app_net: link_local_ips: - 57.123.22.11 - 57.123.22.13 networks: app_net: driver: bridge

pid

pid: "host" pid: "container:custom_container_1" pid: "service:foobar"

如果设置为以下形式之一:container:<container_name>,service:<service_name>,则服务将共享指定容器或服务的 PID 地址空间。

如果设置为 “host”,则服务的 PID 模式将是主机 PID 模式。这打开了容器和主机操作系统之间的 PID 地址空间共享。使用此标志启动的容器将能够访问和操作裸机计算机命名空间中的其他容器,反之亦然。

pids_limit

在2.1版本格式中添加

调整容器的 PID 限制。设置为 -1 表示无限制的 PID。

pids_limit: 10

ports

暴露端口。指定两个端口(HOST:CONTAINER),或仅指定容器端口(将选择随机主机端口)。

注意:在使用 HOST:CONTAINER 格式映射端口时,使用低于 60 的容器端口时可能会遇到错误的结果,因为 YAML 将以 xx:yy 格式解析数字为 sexagesimal(基数为60)。因此,我们建议始终将端口映射明确指定为字符串。

ports: - "3000" - "3000-3005" - "8000:8000" - "9090-9091:8080-8081" - "49100:22" - "127.0.0.1:8001:8001" - "127.0.0.1:5000-5010:5000-5010" - "6060:6060/udp"

security_opt

覆盖每个容器的默认标签方案。

security_opt: - label:user:USER - label:role:ROLE

stop_grace_period

指定在发送 SIGKILL 之前,如果它未处理 SIGTERM(或使用 stop_signal 指定了任何停止信号),则尝试停止容器时要等待多长时间。指定为持续时间。

stop_grace_period: 1s stop_grace_period: 1m30s

默认情况下,在发送 SIGKILL 之前,stop 会等待10秒钟以使容器退出。

停止信号

stop_signal: SIGUSR1

storage_opt

在2.1版文件格式中添加

为此服务设置存储驱动程序选项。

storage_opt: size: '1G'

sysctls

在版本2.1格式中添加

要在容器中设置的内核参数。您可以使用数组或字典。

sysctls: net.core.somaxconn: 1024 net.ipv4.tcp_syncookies: 0 sysctls: - net.core.somaxconn=1024 - net.ipv4.tcp_syncookies=0

ulimits

覆盖容器的默认 ulimits 。您可以将单个限制指定为整数,也可以将软/硬限制指定为映射。

ulimits: nproc: 65535 nofile: soft: 20000 hard: 40000

userns_mode

在版本2.1的格式中添加

userns_mode: "host"

如果 Docker 守护程序配置了用户名称空间,则禁用此服务的用户名称空间。有关更多信息,请参阅dockerd 。

volumes, volume_driver

装载路径或命名卷,可选择指定主机上的路径(HOST:CONTAINER)或访问模式(HOST:CONTAINER:ro)。对于版本2文件,需要使用顶级卷键指定命名卷。

您可以在主机上安装相对路径,该路径将相对于正在使用的Compose配置文件的目录进行扩展。相对路径应始终以. 或者 ... 开始。

volumes: # Just specify a path and let the Engine create a volume - /var/lib/mysql # Specify an absolute path mapping - /opt/data:/var/lib/mysql # Path on the host, relative to the Compose file - ./cache:/tmp/cache # User-relative path - ~/configs:/etc/configs/:ro # Named volume - datavolume:/var/lib/mysql

如果不使用主机路径,则可以指定 volume_driver 。

volume_driver: mydriver

有几点需要注意,具体取决于您使用的 Compose 文件版本:

您可以在版本2文件中使用 volume_driver,但它仅适用于匿名卷(在映像中指定的卷,或在没有显式命名卷或主机路径的volumes下指定)。要为命名卷配置驱动程序,请使用顶级 volumes 选项中条目下的驱动程序密钥。

有关更多信息,请参阅 Docker 卷和卷插件

volumes_from

从另一个服务或容器挂载所有卷,可选择指定只读访问(ro)或读写(rw)。如果未指定访问级别,则将使用读写。

volumes_from: - service_name - service_name:ro - container:container_name - container:container_name:rw

Notes

  • The container:...格式仅支持版本2文件格式。 在版本1中,您可以使用容器名称而不将其标记为:

- `service_name` - `service_name:ro` - `container_name` - `container_name:rw`

重启

no 是默认的重启策略,在任何情况下都不会重启容器。指定 always 时,容器始终重新启动。如果退出代码指示出现故障错误,则 on-failure 策略将重新启动容器。

- restart: no - restart: always - restart: on-failure

cpu_count,

每个都是单个值,类似于 docker run 对应物。

注意:2.2版中添加了以下选项: cpu_count, cpu_percent, cpus.

cpu_count: 2 cpu_percent: 50 cpus: 0.5 cpu_shares: 73 cpu_quota: 50000 cpuset: 0,1 user: postgresql working_dir: /code domainname: foo.com hostname: foo ipc: host mac_address: 02:42:ac:11:65:43 mem_limit: 1000000000 memswap_limit: 2000000000 mem_reservation: 512m privileged: true oom_score_adj: 500 read_only: true shm_size: 64M stdin_open: true tty: true

指定持续时间

某些配置选项(例如healthcheck的intervaltimeout 子选项将持续时间作为字符串接受,其格式如下所示

2.5s 10s 1m30s 2h32m 5h34m56s

支持的单元是e us, ms, s, mh.

指定字节值

某些配置选项(例如 blkio_config 的 device_read_bps 子选项)接受字节值作为字符串,格式如下所示:

2b 1024kb 2048k 300m 1gb

支持的单位是 b,k,m 和 g,以及它们的替代符号 kb,mb 和 gb。请注意,目前不支持十进制值。

虽然可以动态声明卷作为服务声明的一部分,但本部分允许您创建可以跨多个服务重用的命名卷(不依赖于volumes_from),并且可以使用 docker 命令行轻松检索和检查或 API 。有关更多信息,请参阅 docker volume 子命令文档。

以下是双服务设置的示例,其中数据库的数据目录与另一个服务作为卷共享,以便可以定期备份:

version: "2.2" services: db: image: db volumes: - data-volume:/var/lib/db backup: image: backup-service volumes: - data-volume:/var/lib/backup/data volumes: data-volume:

顶级 volumes 键下的条目可以为空,在这种情况下,它将使用引擎配置的默认驱动程序(在大多数情况下,这是 local 驱动程序)。 (可选)您可以使用以下键进行配置:

驱动

指定应为此卷使用哪个卷驱动程序。默认为Docker Engine配置使用的任何驱动程序,在大多数情况下是 local 。如果驱动程序不可用,则当 docker-compose 尝试创建卷时,Engine 将返回错误。

driver: foobar

driver_opts

将选项列表指定为键值对,以传递给此卷的驱动程序。这些选项取决于驱动程序 - 请参阅驱动程序的文档以获取更多信息。可选的。

driver_opts: foo: "bar" baz: 1

外部

如果设置为 true,则指定已在 Compose 之外创建此卷。 docker-compose up 不会尝试创建它,如果它不存在则会引发错误。

external 不能与其他卷配置键(driver,driver_opts)一起使用。

在下面的示例中,Compose 不会尝试创建名为 [projectname] _data 的卷,而是查找仅称为 data 的现有卷,并将其挂载到 db 服务的容器中。

version: '2' services: db: image: postgres volumes: - data:/var/lib/postgresql/data volumes: data: external: true

您还可以在 Compose 文件中与用于引用它的名称分别指定卷的名称:

volumes: data: external: name: actual-name-of-volume

注意:在较新版本的 Compose 中,不推荐使用 external.name 属性,而只是使用 name 属性。

标签

在2.1版文件格式中添加。

使用 Docker 标签向容器添加元数据。您可以使用数组或字典。

labels: com.example.description: "Database volume" com.example.department: "IT/Ops" com.example.label-with-empty-value: "" labels: - "com.example.description=Database volume" - "com.example.department=IT/Ops" - "com.example.label-with-empty-value"

命名

在2.1版本格式中添加,

为此卷设置自定义名称。

version: '2.1' volumes: data: name: my-app-data

它还可以与 external 属性结合使用:

version: '2.1' volumes: data: external: true name: my-app-data

网络配置参考

顶级网络密钥允许您指定要创建的网络。有关 Compose 使用 Docker 网络功能的完整说明,请参阅网络指南。

驱动

指定应该为此网络使用哪个驱动程序。

默认驱动程序取决于您正在使用的 Docker Engine 的配置方式,但在大多数情况下,它将在单个主机上 birdge 并 overlay 在Swarm上。

如果驱动程序不可用,Docker Engine 将返回错误。

driver: overlay

driver_opts

将选项列表指定为键值对,以传递给此网络的驱动程序。这些选项取决于驱动程序 - 请参阅驱动程序的文档以获取更多信息。可选的。

driver_opts: foo: "bar" baz: 1

enable_ipv6

在2.1版文件格式中添加。

在此网络上启用 IPv6 网络。

ipam

指定自定义 IPAM 配置。这是一个具有多个属性的对象,每个属性都是可选的:

driver:自定义 IPAM 驱动程序,而不是默认值。

完整的例子:

ipam: driver: default config: - subnet: 172.28.0.0/16 ip_range: 172.28.5.0/24 gateway: 172.28.5.254 aux_addresses: host1: 172.28.1.5 host2: 172.28.1.6 host3: 172.28.1.7 options: foo: bar baz: "0"

内部

默认情况下,Docker 还将桥接网络连接到它以提供外部连接。如果要创建外部隔离的覆盖网络,可以将此选项设置为 true 。

标签

在版本2.1的格式中添加

使用 Docker 标签向容器添加元数据。您可以使用数组或字典。

建议您使用反向DNS表示法来防止标签与其他软件使用的标签冲突。

labels: com.example.description: "Financial transaction network" com.example.department: "Finance" com.example.label-with-empty-value: "" labels: - "com.example.description=Financial transaction network" - "com.example.department=Finance" - "com.example.label-with-empty-value"

外部

如果设置为 true,则指定已在 Compose 之外创建此网络。 docker-compose up 不会尝试创建它,如果它不存在则会引发错误。

external 不能与其他网络配置键(driver,driver_opts,group_add,ipam,internal)一起使用。

在下面的示例中,proxy 是通往外部世界的网关。而不是尝试创建一个名为 [projectname] _outside 的网络,Compose 将寻找一个简单地在外面调用的现有网络,并将代理服务的容器连接到它。

version: '2' services: proxy: build: ./proxy networks: - outside - default app: build: ./app networks: - default networks: outside: external: true

您还可以在 Compose 文件中与用于引用它的名称分开指定网络名称:

networks: outside: external: name: actual-name-of-network

变量替换

您的配置选项可以包含环境变量。 Compose 使用运行 docker-compose 的 shell 环境中的变量值。例如,假设 shell 包含 POSTGRES_VERSION = 9.3并且您提供此配置:

db: image: "postgres:${POSTGRES_VERSION}"

当您使用此配置运行 docker-compose 时,Compose 会在 shell 中查找 POSTGRES_VERSION 环境变量并将其值替换为。对于此示例,Compose 会在运行配置之前将映像解析为 postgres:9.3。

如果未设置环境变量,请使用空字符串 Compose 替换。在上面的示例中,如果未设置POSTGRES_VERSION,则 image 选项的值为 postgres:。

您可以使用 .env 文件为环境变量设置默认值,Compose 将自动查找该文件。在 shell 环境中设置的值将覆盖 .env 文件中设置的值。

同时支持$VARIABLE${VARIABLE}语法。此外,使用2.1文件格式时,可以使用典型的 shell 语法提供内联默认值:

  • ${VARIABLE:-default} 如果在环境中未设置 VARIABLE 或为空,则将评估为default。

不支持其他扩展 shell 样式功能,例如 $ {VARIABLE / foo / bar} 。

当配置需要文字美元符号时,您可以使用 $$(双美元符号)。这也可以防止 Compose 插值,因此 $$ 允许您引用不希望由 Compose 处理的环境变量。

web: build: . command: "$$VAR_NOT_INTERPOLATED_BY_COMPOSE"

如果您忘记并使用单个美元符号($),Compose 会将该值解释为环境变量,并会警告您:

The VAR_NOT_INTERPOLATED_BY_COMPOSE is not set. Substituting an empty string.

撰写文档

  • User guide

fig, composition, compose version 3, docker