Compose 文件是一个YAML文件,用于定义services
、netword
和volumes
。 Compose 文件的默认路径为./docker-compose.yml
(后缀为.yml和.yaml都可以)。
一个service
配置将会应用到容器的启动中,很像将命令行参数传递给docker run
。 同样,network和volume定义类似于docker network create
和docker volume create
。
与Docker运行一样,默认情况下尊重Dockerfile中指定的选项(例如CMD
,EXPOSE
,VOLUME
,ENV
) - 您不需要在docker-compose.yml
中再次指定它们。
您可以在配置中使用具有类似Bash的${VARIABLE}
语法使用环境变量 - 有关详细信息,请参阅Variable substitution。
Service 配置参考
注意
:有多个版本的Compose文件格式 - 版本1(旧版格式,不支持卷或网络)和版本2以及2.1(最新的)。 有关更多信息,请参阅版[Versioning]部分。
此部分包含服务定义支持的所有配置选项的列表。
build
在构建时应用的配置选项。
build
可以指定为包含构建上下文路径,也可以根据上下文选择 dockerfile 和 args 指定的路径对象。
build: ./dir
build:
context: ./dir
dockerfile: Dockerfile-alternate
args:
buildno: 1
如果指定image
字段来build
,则Compose
使用image
中指定的webapp
和tag
(可选)命名构建的image
:
build: ./dir
image: webapp:tag
这里从./dir
构建了一个镜像名为webapp
,并打上标记为tag
的镜像。
注意
:在版本1文件格式中,build有两种不同的方法:
- 只允许字符串形式(build:.) - 而不是对象形式。
- 不允许与
image
一起build
。 尝试这样做会导致错误。
context
版本2及以上使用,版本1只使用build。
它的值可以是Dockerfile
的路径,或者是指向git
仓库的url。
当提供的值是相对路径时,它被解释Compose文件位置的相对路径。 目录里的信息会被当做构建内容 发送到Docker守护进程。
Compose将使用生成的名字build
和tag
它,然后使用该image
。
build:
context: ./dir
dockerfile
备用Dockerfile。
撰写将使用一个备用文件来构建。 还必须指定构建路径。
build:
context: .
dockerfile: Dockerfile-alternate
注意
:在版本1文件格式中,dockerfile有两种不同的方法:
- 它与build同级出现,而不是子选项:
build: . dockerfile: Dockerfile-alternate
- 不允许与image一起使用dockerfile。 尝试这样做会导致错误。
args
支持版本2及以上
添加构建参数,它们是只有在构建过程中才可访问的环境变量。
首先,在Dockerfile中指定参数:
ARG buildno
ARG password
RUN echo "Build number: $buildno"
RUN script-requiring-password.sh "$password"
然后,指定build
字段下的参数args
。您可以mapping或list:
build:
context: .
args:
buildno: 1
password: secret
build:
context: .
args:
- buildno=1
- password=secret
指定build参数时,可以忽略该值,在这种情况下,构建时其值为运行Compose的环境中的值。
args:
- buildno
- password
注意
:YAML布尔值(true,false,yes,no,on,off)必须用引号引起来,以便解析器将其解释为字符串。
cap_add, cap_drop
添加或删除容器功能。 有关完整列表,请参阅man 7功能。
cap_add:
- ALL
cap_drop:
- NET_ADMIN
- SYS_ADMIN
command
覆盖默认命令
command: bundle exec thin -p 3000
该命令也可以是一个list,在方式类似于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 client create选项相同的格式。
devices:
- "/dev/ttyUSB0:/dev/ttyUSB0"
depends_on
Express之间的依赖关系,有两个效果:
docker-compose up
将按照依赖顺序启动服务。 在下面的示例中,db和redis将在web之前启动。docker-compose up SERVICE
将自动包含SERVICE的依赖关系。 在以下示例中,docker-compose up web也将创建并启动db和redis。
列子:
version: '2'
services:
web:
build: .
depends_on:
- db
- redis
redis:
image: redis
db:
image: postgres
注意
:在启动web之前,depends_on不会等待db和redis“就绪”,直到它们被启动。 如果您需要等待服务准备就绪,请参阅控制启动顺序了解有关此问题的更多信息以及解决问题的策略。
dns
自定义DNS服务器。可以是单个值或列表。
dns: 8.8.8.8
dns:
- 8.8.8.8
- 9.9.9.9
dns_search
自定义DNS搜索域。可以是单个值或列表。
dns_search: example.com
dns_search:
- dc1.example.com
- dc2.example.com
tmpfs
在容器中安装临时文件系统。可以是单个值或列表。
tmpfs: /run
tmpfs:
- /run
- /tmp
entrypoint
覆盖默认的entrypoint
。
entrypoint: /code/entrypoint.sh
entrypoint也可以是一个列表,存在方式类似于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
env_file
从文件添加环境变量。可以是单个值或列表。
如果已使用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
注意
:如果您的service指定了build选项,则在build过程中将不会自动显示环境文件中定义的变量。 使用build的args子选项来定义构建时环境变量。
environment
添加环境变量。您可以使用数组或字典。 任意布尔值:true,false,yes no,需要用引号括起来,以确保它们不会被YML解析器转换为True或False。
只有一个键的环境变量被解析为它在Compose正在运行的机器上的值,这对于secret或host-specific values是有帮助的。
environment:
RACK_ENV: development
SHOW: 'true'
SESSION_SECRET:
environment:
- RACK_ENV=development
- SHOW=true
- SESSION_SECRET
注意
:如果您的服务指定了build选项,则在build期间将不会自动显示在环境中定义的变量。 使用build的args子选项来定义构建时环境变量。
expose
公开端口,而不将其发布到主机 - 它们只能访问链接服务。只能指定内部端口。
expose:
- "3000"
- "8000"
extends
在当前文件或另一个文件中扩展另一个服务,可选地覆盖配置。
您可以将extends
与其他配置字段一起使用。 extends
值必须是使用必需的server
和可选file
字段定义的字典。
extends:
file: common.yml
service: webapp
server
正在扩展的服务的名称,例如web
或数据库。 该文件是定义该服务的Compose配置文件的位置。
如果省略file
Compose在当前文件中查找服务配置。 file
值可以是绝对路径或相对路径。 如果指定相对路径,则Compose将其视为相对于当前文件的位置。
您可以扩展本身扩展其他服务。 您可以无限期地延长。 Compose不支持循环引用,如果遇到一个,docker-compose会返回一个错误。
有关扩展的更多信息,请参阅扩展文档。
external_links
链接到在docker-compose.yml
外部启动的容器,甚至在Compose之外,特别是对于提供共享或公共服务的容器。 external_links
在指定容器名称和链接别名(CONTAINER:ALIAS
)时遵循类似于links
的语义。
external_links:
- redis_1
- project_db_1:mysql
- project_db_1:postgresql
注意
:如果您使用的是版本2文件格式,则外部创建的容器必须连接到至少一个与链接到它们的服务相同的网络。
extra_hosts
添加主机名映射。使用与docker client --add-host
参数相同的值。
extra_hosts:
- "somehost:162.242.195.82"
- "otherhost:50.31.209.229"
具有ip地址和主机名的条目将在此服务的容器中的/etc/hosts
中创建,例如:
162.242.195.82 somehost
50.31.209.229 otherhost
group_add
指定容器中的用户将成为其成员的其他组(按名称或号码)。 组必须存在于要添加的容器和主机系统中。 这是有用的一个例子是当多个容器(作为不同的用户运行)需要在主机系统上读取或写入相同的文件。 该文件可以由所有容器共享的组拥有,并在group_add
中指定。 有关更多详细信息,请参阅Docker文档。
version: '2'
services:
image: alpine
group_add:
- mail
在创建的容器中运行id
将显示用户属于mail
组,如果未使用group_add
,则不会是这种情况。
image
指定要从中启动容器的映像。可以是存储库/标记或部分图像ID。
image: redis
image: ubuntu:14.04
image: tutum/influxdb
image: example-registry.com:4000/postgresql
image: a4bc65fd
如果image不存在,Compose会尝试拉取它,除非你也指定了build,在这种情况下,它使用指定的选项构建它,并用指定的标签标记它。
注意
:在版本1文件格式中,不允许与image一起使用build。 尝试这样做会导致错误。
isolation
Added in version 2.1 file format. 指定容器的隔离技术。在Linux上,唯一支持的值为
default
。 在Windows上,可接受的值为default
,process
和hyperv
。 有关详细信息,请参阅Docker Engine文档。
labels
使用Docker labels向容器添加元数据。 您可以使用list或mapping。
建议您使用reverse-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"
links
链接到另一个服务中的容器。请指定服务名称和链接别名(SERVICE:ALIAS
),或仅指定服务名称。
web:
links:
- db
- db:database
- redis
如果未指定别名,则可以在与别名相同的主机名或服务名称处访问链接服务的容器。
链接也以与depends_on相同的方式表示服务之间的依赖关系,因此它们确定服务启动的顺序。
注意
:如果您定义链接和networks,则具有它们之间的链接的服务必须共享至少一个公共网络以便进行
logging
Version 2 file format and up. In version 1, use log_driver and log_opt.
记录服务的配置。
logging:
driver: syslog
options:
syslog-address: "tcp://192.168.0.42:123"
driver
名称指定了服务容器的日志驱动程序,,如docker运行的--log-driver
选项(documented here)。
默认值为json-file。
driver: "json-file"
driver: "syslog"
driver: "none"
注意
:只有json-file
和journald
驱动程序使日志可以直接从docker-compose up
和docker-compose logs
获取。 使用任何其他驱动程序将不会打印任何日志。
使用options
键为记录驱动程序指定日志记录选项,例如docker run
的--log-opt
选项。
日志记录选项是key-value
对。 syslog
选项的示例:
driver: "syslog"
options:
syslog-address: "tcp://192.168.0.42:123"
log_driver
Version 1 file format only. In version 2, use logging.
指定日志驱动程序。默认值为json-file
。
log_driver: syslog
log_opt
Version 1 file format only. In version 2, use logging.
将记录选项指定为key-value
对。 syslog
选项的示例:
log_opt:
syslog-address: "tcp://192.168.0.42:123"
net
Version 1 file format only. In version 2, use network_mode.
网络模式。 使用与docker client --net
参数相同的值。 container:...
形式可以接受服务名称,而不是容器名称或ID。
net: "bridge"
net: "host"
net: "none"
net: "container:[service name or container name/id]"
network_mode
Version 2 file format and up. In version 1, use net.
网络模式。 使用与docker client --net
参数相同的值,以及特殊表单 service:[service name]
。
network_mode: "bridge"
network_mode: "host"
network_mode: "none"
network_mode: "service:[service name]"
network_mode: "container:[container name/id]"
networks
Version 2 file format and up. In version 1, use net.
要加入的网络, 引用top-level networks key 下的条目。
services:
some-service:
networks:
- some-network
- other-network
aliases
网络上此服务的别名(备用主机名)。同一网络上的其他容器可以使用服务名称或此别名连接到服务的容器之一。
由于aliases
是网络范围的,所以相同的服务可以在不同的网络上具有不同的别名。
注意:网络范围的别名可以由多个容器共享,甚至可以由多个服务共享。 如果是,那么该名称将解析为哪个容器不能保证。
一般格式如下所示。
services:
some-service:
networks:
some-network:
aliases:
- alias1
- alias3
other-network:
aliases:
- alias2
在下面的示例中,提供了三个服务(web
,worker
和db
),以及两个网络(new
和legacy
)。 db
服务在new
网络上的主机名db
或database
,legacy
网络中的db
或mysql
是可达的。
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寻址,则com.docker.network.enable_ipv6驱动程序选项必须设置为true。
version: '2'
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
driver_opts:
com.docker.network.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
Added in version 2.1 file format.
指定link-local IPs。 link-local IPs是属于众所周知的子网并且完全由运营商管理的特殊IP,通常取决于它们被部署的架构。 因此,它们不由docker(IPAM driver)管理。
用法示例:
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模式设置为主机PID模式。 这将打开容器和主机操作系统之间的PID地址空间的共享。 使用此标志启动的容器将能够访问和操作裸机机器命名空间中的其他容器,反之亦然。
ports
公开端口。 指定两个端口(HOST:CONTAINER
),或只指定容器端口(将选择随机主机端口)。
注意
:当映射HOST:CONTAINER
格式的端口时,当使用低于60的容器端口时,您可能会遇到错误的结果,因为YAML将解析格式为xx:yy
的数字为六进制(基数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"
security_opt
覆盖每个容器的默认标签方案。
security_opt:
- label:user:USER
- label:role:ROLE
stop_signal
设置停止容器的备用信号。 默认情况下停止使用SIGTERM
。 使用stop_signal
设置备用信号将导致停止发送该信号。
stop_signal: SIGUSR1
ulimits
覆盖容器的默认ulimits。 您可以将单个限制指定为整数或soft/hard限制作为映射。
ulimits:
nproc: 65535
nofile:
soft: 20000
hard: 40000
volumes, volume_driver
装载路径或命名卷(可选)指定主机上的路径(HOST:CONTAINER
)或访问模式(HOST:CONTAINER:ro
)。 对于版本2文件,命名卷需要使用top-level volumes key`指定。 当使用版本1时,Docker Engine将自动创建命名卷(如果不存在)。
您可以在主机上安装相对路径,相对于正在使用的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
请注意,对于版本2文件,此驱动程序将不适用于named volumes(在使用declaring the volume时,应使用driver
选项)。 对于版本1,named volumes和container volumes都将使用指定的驱动程序。
注意
:如果您还指定了volume_driver
,则不会执行路径扩展。
有关更多信息,请参阅https://docs.docker.com/engine/userguide/dockervolumes/和Volume Plugins
volumes_from
从另一个服务或容器装入所有卷,可选择指定只读访问(ro
)或读写(rw
)。 如果未指定访问级别,则将使用读写。
volumes_from:
- service_name
- service_name:ro
- container:container_name
- container:container_name:rw
注意
:container:...
格式仅支持版本2文件格式。 在版本1中,您可以使用容器名称,而不将其标记为:- service_name - service_name:ro - container_name - container_name:rw
cpu_shares, cpu_quota, cpuset, domainname, hostname, ipc, mac_address, mem_limit, memswap_limit, oom_score_adj, privileged, read_only, restart, shm_size, stdin_open, tty, user, working_dir
每个都是一个单一的值,类似于它的docker运行对应。
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
privileged: true
oom_score_adj: 500
restart: always
read_only: true
shm_size: 64M
stdin_open: true
tty: true
注意
:以下选项仅适用于版本2及更高版本:* oom_score_adj
Volume configuration reference
虽然可以作为服务声明的一部分来即时声明卷,但是此部分允许您创建可以跨多个服务重用的命名卷(不依赖volumes_from
),并且可以使用docker命令行轻松检索和检查 或API。 有关更多信息,请参阅docker volume子命令文档。
driver
指定应为此卷使用哪个卷驱动程序。 默认为local
。 如果驱动程序不可用,Docker Engine将返回错误。
driver: foobar
driver_opts
将选项列表指定为要传递给此卷的驱动程序的key-value pairs。 这些选项是驱动程序相关的 - 请参阅驱动程序文档以获取更多信息。 可选的。
driver_opts:
foo: "bar"
baz: 1
external
如果设置为true
,则指定该卷已在Compose外部创建。 docker-compose up
不会尝试创建它,并且如果它不存在将会引发一个错误。
external
不能与其他卷配置键(driver
,driver_opts
)一起使用。
在下面的示例中,不是尝试创建名为[projectname] _data
的卷,Compose将查找现有的卷,简单地称为数据,并将其挂载到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
labels
Added in version 2.1 file format.
使用Docker labels向容器添加元数据。 您可以使用数组或字典。
建议您使用反向DNS符号来防止您的标签与其他软件使用的标签冲突。
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"
Network configuration reference
顶层网络键允许您指定要创建的网络。 有关Compose使用Docker网络功能的完整说明,请参阅Networking guide。
driver
指定应为此网络使用哪个驱动程序。
默认驱动程序取决于您使用的Docker引擎是如何配置的,但在大多数情况下,它将是单个主机上的bridge
和Swarm上的overlay
。
如果驱动程序不可用,Docker Engine将返回错误。
driver: overlay
driver_opts
指定选项列表作为要传递给此网络驱动程序的键值对。 这些选项是driver-dependent - consult的驱动程序文档的更多信息。 可选的。
driver_opts:
foo: "bar"
baz: 1
enable_ipv6
Added in version 2.1 file format.
在此网络上启用IPv6网络。
ipam
指定自定义IPAM配置。 这是一个具有多个属性的对象,每个属性都是可选的:
- driver:自定义IPAM驱动程序,而不是默认值。
- config:具有零个或多个配置块的列表,每个配置块包含以下任意键:
subnet
: 表示网段的CIDR格式的子网ip_range
: 从中分配容器IPs的IP范围gateway
: 主子网的IPv4或IPv6网关aux_addresses
:网络驱动程序使用的辅助IPv4或IPv6地址,作为从主机名到IP地址的映射
options
: 作为键值映射的驱动特定选项。
A full example:
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"
internal
Version 2 file format and up.
默认情况下,Docker还将桥接网络连接到它以提供外部连接。 如果要创建外部隔离的覆盖网络,您可以将此选项设置为true。
labels
Added in version 2.1 file format.
使用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"
external
如果设置为true,则指定此网络已在Compose之外创建。 docker-compose up
不会尝试创建它,并且如果它不存在将会引发一个错误。
外部不能与其他网络配置键(driver
,driver_opts
,group_add
,ipam
,internal
)一起使用。
在下面的示例中,proxy
是到外部世界的网关。 而不是尝试创建一个名为[projectname] _outside
的网络,Compose将查找一个现有的网络,简单地调用外outside
并连接outside
服务的容器。
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
Versioning
目前有三个版本的Compose文件格式:
- 版本1,传统格式。 这是通过省略YAML根目录下的版本键来指定的。
- 版本2,推荐格式。 这是使用版本:’2’条目在YAML的根目录指定。
- 版本2.1,升级超过版本2,利用了Docker Engine的最新特性。 使用版本:“2.1”条目指定YAML根目录。
要将项目从版本1移动到2,请参阅升级部分。
注意:如果您使用多个Compose文件或扩展服务,每个文件必须是相同的版本 - 您不能在单个项目中混合版本1和2。
根据您使用的版本,有几点不同:
- 结构和允许的配置键
- 必须运行的最低Docker Engine版本
- 撰写关于网络的行为 这些差异如下所述。
Version 1
未声明版本的组合文件被视为“版本1”。 在这些文件中,所有服务都在文档的根目录处声明。
版本1由Compose到1.6.x支持。 它将在未来的Compose版本中被弃用。
版本1文件无法声明命名卷,网络或构建参数。
例:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
links:
- redis
redis:
image: redis
Version 2
使用版本2语法的撰写文件必须指示文档根目录下的版本号。 所有服务必须在服务键下声明。
Compose 1.6.0+支持版本2文件,并需要版本1.10.0+的Docker引擎。
可以在volumes键下声明命名卷,并且可以在networks关键字下声明网络。
简单示例:
version: '2'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
redis:
image: redis
一个更广泛的例子,定义卷和网络:
version: '2'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
networks:
- front-tier
- back-tier
redis:
image: redis
volumes:
- redis-data:/var/lib/redis
networks:
- back-tier
volumes:
redis-data:
driver: local
networks:
front-tier:
driver: bridge
back-tier:
driver: bridge
Version 2.1
升级版本2,引入仅适用于Docker Engine版本1.12.0+的新参数
引入以下附加参数:
* link_local_ips
* isolation
* labels
for volumes and networks
Upgrading
在大多数情况下,从版本1移动到2是一个非常简单的过程:
- 将整个文件缩进一级,并在顶部放置一个
services:
键。 - 添加一个
version: '2'
行在文件的顶部。
如果您使用特定的配置功能,则更复杂:
* dockerfile
: This now lives under the build key:
build:
context: .
dockerfile: Dockerfile-alternate
log_driver
,log_opt
: These now live under thelogging
key:logging: driver: syslog options: syslog-address: "tcp://192.168.0.42:123"
- 与环境变量的链接:如环境变量引用中所述,由链接创建的环境变量已经过时了一段时间。 在新的Docker网络系统中,它们已被删除。 您应该直接连接到相应的主机名,或者自己设置相关的环境变量,使用link hostname:
```
web:
links:
- db environment:
- DB_PORT=tcp://db:5432 ```
external_links
:Compose在运行版本2项目时使用Docker网络,因此链接的行为略有不同。 特别地,两个容器必须共同连接到至少一个网络,以便进行通信,即使明确地链接在一起。 将外部容器连接到应用程序的默认网络,或者将外部容器和服务的容器都连接到外部网络。net
: 这现在由network_mode替换:net: host -> network_mode: host net: bridge -> network_mode: bridge net: none -> network_mode: none
如果你使用
net: "container:[service name]"
, 用network_mode: "service:[service name]"
替换。net: "container:web" -> network_mode: "service:web"
如果你使用
net: "container:[container name/id]"
, 值可以不变。net: "container:cont-name" -> network_mode: "container:cont-name" net: "container:abc12345" -> network_mode: "container:abc12345"
具有命名卷的卷:这些必须现在必须在Compose文件的顶级卷部分中显式声明。 如果服务装载称为数据的命名卷,则必须在顶层卷部分中声明数据卷。 整个文件可能如下所示:
version: '2' services: db: image: postgres volumes: - data:/var/lib/postgresql/data volumes: data: {}
默认情况下,Compose会创建一个以项目名称为前缀的卷。 如果你想要它只是被称为数据,声明它为外部
volumes: data: external: true
Variable substitution
您的配置选项可以包含环境变量。 Compose使用运行docker-compose的shell环境中的变量值。 例如,假设shell包含EXTERNAL_PORT = 8000
,并且您提供此配置:
web:
build: .
ports:
- "${EXTERNAL_PORT}:5000"
当使用此配置运行docker-compose up
时,Compose会在shell中查找EXTERNAL_PORT
环境变量并将其值代入。在本示例中,Compose在创建Web容器之前将端口映射解析为“8000:5000”
。
如果未设置环境变量,则Compose将替换为空字符串。 在上面的示例中,如果未设置EXTERNAL_PORT
,则端口映射的值为:5000
(这当然是无效的端口映射,并且将在尝试创建容器时导致错误)。
支持$VARIABLE
和${VARIABLE}
语法。 此外,当使用2.1文件格式时,可以使用典型的shell语法提供内联默认值:
* 如果VARIABLE在
环境中未设置或为空,${VARIABLE:-default}
将评估为默认值。
* 只有在环境中未设置VARIABLE
的情况下,${VARIABLE-default}
才会评估为默认值。
不支持其他扩展的shell样式功能,例如${VARIABLE/foo/bar}
。
当您的配置需要一个字母美元符号时,您可以使用$$
(双美元符号)。 这也防止了Compose内插值,所以$$
允许你引用你不想由Compose处理的环境变量。
web:
build: .
command: "$$VAR_NOT_INTERPOLATED_BY_COMPOSE"
如果您忘记并使用单个美元符号($
),Compose将该值解释为环境变量并将警告您:
未设置VAR_NOT_INTERPOLATED_BY_COMPOSE。 替换空字符串。
参考地址: [1]https://docs.docker.com/compose/compose-file
本文链接:https://deepzz.com/post/docker-compose-file.html,参与评论 »
--EOF--
发表于 2016-12-06 09:51:00,并被添加「docker、docker-compose-file」标签。
本站使用「署名 4.0 国际」创作共享协议,转载请注明作者及原网址。更多说明 »
提醒:本文最后更新于 2900 天前,文中所描述的信息可能已发生改变,请谨慎使用。
专题「Docker 相关技术」的其它文章 »
- docker volume 容器卷的那些事(二) (Jan 07, 2018)
- docker volume 容器卷的那些事(一) (Dec 03, 2017)
- 如何写好Dockerfile,Dockerfile最佳实践 (Jun 10, 2017)
- 如何执行docker run,docker run 命令参考文档 (Jan 05, 2017)
- 如何写Dockerfile,Dockerfile 参考文档 (Dec 15, 2016)
- 远程连接docker daemon,Docker Remote API (Nov 25, 2016)
- 搭建安全的docker private registry v2指南(Let's Encrypt) (Oct 05, 2016)
Comments