服务顶级元素
服务是应用程序中计算资源的抽象定义,可以扩展或替换 独立于其他组件。服务由一组容器提供支持,这些容器由平台运行 根据复制要求和放置约束。由于服务由容器提供支持,因此它们被定义 通过 Docker 镜像和一组运行时参数。服务中的所有容器都是使用这些容器创建的 参数。
Compose 文件必须将顶级元素声明为 map,其键是服务名称的字符串表示形式,
其值为 Service Definitions。服务定义包含应用于每个
服务容器。services
每个服务还可能包含一个部分,用于定义如何为服务创建 Docker 镜像。
Compose 支持使用此服务定义构建 Docker 镜像。如果未使用,则忽略该部分,并且 Compose 文件仍被视为有效。构建支持是 Compose 规范的一个可选方面,并且是
Compose Build 规范文档中详细介绍了。build
build
每个服务都定义了运行其容器的运行时约束和要求。部分组
这些约束,并允许平台调整部署策略,以最好地满足容器的需求
可用资源。部署支持是 Compose 规范的一个可选方面,并且是
在 Compose Deploy 规范文档中进行了详细介绍。
如果未实现,则忽略该部分,并且 Compose 文件仍被视为有效。deploy
deploy
例子
简单示例
以下示例演示了如何使用 Docker Compose 定义两个简单服务、设置其镜像、映射端口和配置基本环境变量。
services:
web:
image: nginx:latest
ports:
- "8080:80"
db:
image: postgres:13
environment:
POSTGRES_USER: example
POSTGRES_DB: exampledb
高级示例
在以下示例中,该服务使用 Nginx 镜像,将本地 Nginx 配置文件挂载到容器中,暴露端口并依赖于服务。proxy
80
backend
该服务从位于 build at stage 的目录中的 Dockerfile 构建镜像。backend
backend
builder
services:
proxy:
image: nginx
volumes:
- type: bind
source: ./proxy/nginx.conf
target: /etc/nginx/conf.d/default.conf
read_only: true
ports:
- 80:80
depends_on:
- backend
backend:
build:
context: backend
target: builder
如需更多示例 Compose 文件,请浏览 Awesome Compose 示例。
属性
附注
annotations
定义容器的注释。 可以使用 array 或 map。annotations
annotations:
com.example.foo: bar
annotations:
- com.example.foo=bar
附加
当 定义并设置为 Compose 时,不会收集服务日志,
,直到您明确请求它。attach
false
默认服务配置为 。attach: true
建
build
指定用于从源创建容器镜像的构建配置,如 Compose 构建规范中所定义。
blkio_config
blkio_config
定义一组配置选项,用于设置服务的块 IO 限制。
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
:定义受影响设备的符号路径。rate
:作为表示字节数的整数值或表示字节值的字符串。
device_read_iops、device_write_iops
为给定设备上的读/写操作设置每秒操作数限制。 列表中的每个项目都必须有两个键:
path
:定义受影响设备的符号路径。rate
:作为整数值,表示每秒允许的操作数。
重量
修改分配给服务的带宽相对于其他服务的比例。 采用 10 到 1000 之间的整数值,其中 500 是默认值。
weight_device
按设备微调带宽分配。列表中的每个项目都必须有两个键:
path
:定义受影响设备的符号路径。weight
:介于 10 和 1000 之间的整数值。
cpu_count
cpu_count
定义服务容器的可用 CPU 数量。
cpu_percent
cpu_percent
定义可用 CPU 的可用百分比。
cpu_shares
cpu_shares
以整数值定义服务容器相对于其他容器的相对 CPU 权重。
cpu_period
cpu_period
配置平台所基于的 CPU CFS(完全公平调度程序)周期
在 Linux 内核上。
cpu_quota
cpu_quota
在平台基于时配置 CPU CFS (Completely Fair Scheduler) 配额
在 Linux 内核上。
cpu_rt_runtime
cpu_rt_runtime
为支持 Realtime Scheduler 的平台配置 CPU 分配参数。它可以是
使用微秒作为单位或持续时间的整数值。
cpu_rt_runtime: '400ms'
cpu_rt_runtime: 95000`
cpu_rt_period
cpu_rt_period
为支持 Realtime Scheduler 的平台配置 CPU 分配参数。它可以是
使用微秒作为单位或持续时间的整数值。
cpu_rt_period: '1400us'
cpu_rt_period: 11000`
CPU
cpus
定义要分配给服务容器的 (可能是虚拟的) CPU 的数量。这是一个小数。 表示无限制。0.000
设置后,必须与 Deploy 规范中的属性一致。cpus
cpus
cpuset
cpuset
定义允许在其中执行的显式 CPU。可以是范围或列表0-3
0,1
cap_add
cap_add
将其他容器功能指定为字符串。
cap_add:
- ALL
cap_drop
cap_drop
指定要删除的容器功能
作为字符串。
cap_drop:
- NET_ADMIN
- SYS_ADMIN
cgroup
cgroup
指定要加入的 cgroup 命名空间。如果未设置,则由容器运行时决定
选择要使用的 cgroup 命名空间(如果支持)。
host
:在容器运行时 cgroup 命名空间中运行容器。private
:在容器自己的私有 cgroup 命名空间中运行容器。
cgroup_parent
cgroup_parent
为容器指定可选的父 cgroup。
cgroup_parent: m-executor-abcd
命令
command
覆盖容器镜像声明的默认命令,例如 Dockerfile 的 .CMD
command: bundle exec thin -p 3000
该值也可以是列表,其方式类似于 Dockerfile:
command: [ "bundle", "exec", "thin", "-p", "3000" ]
如果值为 ,则使用镜像中的默认命令。null
如果值为 (empty list) 或 (empty string),则忽略镜像声明的默认命令,
即 overridden 为空。[]
''
配置
配置允许服务调整其行为,而无需重新构建 Docker 镜像。
服务只有在 attribute 明确授予时才能访问配置。支持两种不同的语法变体。configs
如果平台上不存在该错误,或者 Compose 文件的 configs
顶级元素中未定义该错误,则 Compose 会报告错误。config
为 config 定义了两种语法:short 语法和 long 语法。
您可以向服务授予对多个配置的访问权限,并且可以混合使用长语法和短语法。
短语法
短语法变体仅指定配置名称。这将授予
容器访问配置,并将其作为文件挂载到服务的容器的文件系统中。挂载点在容器中的位置默认为 Linux 容器和 Windows 容器中。/<config_name>
C:\<config-name>
以下示例使用 short 语法授予服务
访问 和 configs。的值设置为 content of the file ,并被定义为外部资源,这意味着它具有
已在平台中定义。如果外部配置不存在,
部署失败。redis
my_config
my_other_config
my_config
./my_config.txt
my_other_config
services:
redis:
image: redis:latest
configs:
- my_config
- my_other_config
configs:
my_config:
file: ./my_config.txt
my_other_config:
external: true
长语法
long 语法为如何在服务的任务容器中创建配置提供了更精细的粒度。
source
:平台中存在的配置名称。target
:要挂载到服务的 任务容器。如果未指定,则默认为。/<source>
uid
和 :拥有挂载的配置文件的数字 UID 或 GID 在服务的任务容器中。未指定时的默认值为 USER running container。gid
mode
:挂载在服务的 任务容器,采用八进制表示法。默认值为 world-readable ()。 必须忽略可写位。可执行位可以设置。0444
以下示例将 的名称设置为
container,将 mode 设置为 (group-readable) 并设置 user 和 group
自。该服务无权访问配置。my_config
redis_config
0440
103
redis
my_other_config
services:
redis:
image: redis:latest
configs:
- source: my_config
target: /redis_config
uid: "103"
gid: "103"
mode: 0440
configs:
my_config:
external: true
my_other_config:
external: true
container_name
container_name
是一个字符串,用于指定自定义容器名称,而不是默认生成的名称。
container_name: my-web-container
如果 Compose 文件指定了 .尝试这样做会导致错误。container_name
container_name
遵循[a-zA-Z0-9][a-zA-Z0-9_.-]+
credential_spec
credential_spec
配置 Managed Service 账户的凭证规范。
如果您有使用 Windows 容器的服务,则可以使用 和 协议。Compose 还支持其他
协议。file:
registry:
credential_spec
必须采用 或 .credential_spec
file://<filename>
registry://<value-name>
credential_spec:
file: my-credential-spec.json
使用 时,将从 Windows 注册表中读取凭据规范
守护程序的主机。具有给定名称的注册表值必须位于:registry:
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization\Containers\CredentialSpecs
以下示例从注册表中命名的值加载凭证规范:my-credential-spec
credential_spec:
registry: my-credential-spec
gMSA 配置示例
为服务配置 gMSA 凭证规范时,您只需要
要使用 指定凭证规范,如以下示例所示:config
services:
myservice:
image: myimage:latest
credential_spec:
config: my_credential_spec
configs:
my_credentials_spec:
file: ./my-credential-spec.json|
depends_on
使用 该属性,您可以控制服务启动和关闭的顺序。如果服务紧密耦合,并且启动顺序会影响应用程序的功能,则此功能非常有用。depends_on
短语法
短语法变体仅指定依赖项的服务名称。 服务依赖关系会导致以下行为:
Compose 按依赖项顺序创建服务。在以下 示例,并在 之前创建。
db
redis
web
Compose 会按依赖关系顺序删除服务。在以下 example 在 和 之前删除。
web
db
redis
简单示例:
services:
web:
build: .
depends_on:
- db
- redis
redis:
image: redis
db:
image: postgres
Compose 保证依赖项服务之前已启动 启动依赖服务。 Compose 会等待依赖项服务“准备就绪”,然后再 启动依赖服务。
长语法
长格式语法支持配置不能 以简短的形式表示。
restart
:当设置为 Compose 时,将在更新依赖项服务后重新启动此服务。 这适用于由 Compose 操作控制的显式重启,但不包括容器运行时的自动重启 容器死机后。在 Docker Compose 版本 2.17.0 中引入。true
condition
:设置被视为满足依赖项的条件service_started
:相当于上述短语法service_healthy
:指定依赖项应为“正常” (如 healthcheck 所示)在启动依赖项之前 服务。service_completed_successfully
:指定依赖项应运行 成功完成,然后再启动依赖服务。
required
:设置为 Compose 时,仅在依赖项服务未启动或不可用时发出警告。如果未定义 的默认值为 。在 Docker Compose 版本 2.20.0 中引入。false
required
true
服务依赖关系会导致以下行为:
Compose 按依赖项顺序创建服务。在以下 示例,并在 之前创建。
db
redis
web
Compose 等待 healthchecks 传递依赖项 标有 。在以下示例中,预期 be “healthy” 之前创建。
service_healthy
db
web
Compose 会按依赖关系顺序删除服务。在以下 example 在 和 之前删除。
web
db
redis
services:
web:
build: .
depends_on:
db:
condition: service_healthy
restart: true
redis:
condition: service_started
redis:
image: redis
db:
image: postgres
Compose 保证依赖项服务在
启动依赖服务。
Compose 保证在启动依赖服务之前,标记为 “正常” 的依赖服务。service_healthy
部署
deploy
指定服务的部署和生命周期的配置,如 Compose Deploy 规范中所定义。
发展
develop
指定用于保持容器与 source 同步的开发配置,如 Development 部分所定义。
device_cgroup_rules
device_cgroup_rules
定义此容器的设备 cgroup 规则列表。
该格式与 Linux 内核在 Control Groups 中指定的格式相同
设备白名单控制器。
device_cgroup_rules:
- 'c 1:3 mr'
- 'a 7:* rmw'
设备
devices
以 的形式定义已创建容器的设备映射列表。HOST_PATH:CONTAINER_PATH[:CGROUP_PERMISSIONS]
devices:
- "/dev/ttyUSB0:/dev/ttyUSB0"
- "/dev/sda:/dev/xvda:rwm"
DNS (DNS)
dns
定义要在容器网络接口配置上设置的自定义 DNS 服务器。它可以是单个值或列表。
dns: 8.8.8.8
dns:
- 8.8.8.8
- 9.9.9.9
dns_opt
dns_opt
列出要传递给容器的 DNS 解析器(Linux 上的 文件)的自定义 DNS 选项。/etc/resolv.conf
dns_opt:
- use-vc
- no-tld-query
dns_search
dns_search
定义要在容器网络接口配置上设置的自定义 DNS 搜索域。它可以是单个值或列表。
dns_search: example.com
dns_search:
- dc1.example.com
- dc2.example.com
域名
domainname
声明要用于服务容器的自定义域名。它必须是有效的 RFC 1123 主机名。
driver_opts
driver_opts
将选项列表指定为要传递给驱动程序的键值对。这些选项包括
取决于驱动程序。
services:
app:
networks:
app_net:
driver_opts:
com.docker.network.bridge.host_binding_ipv4: "127.0.0.1"
有关更多信息,请参阅网络驱动程序文档。
入口点
entrypoint
声明服务容器的默认入口点。
这将覆盖服务的 Dockerfile 中的指令。ENTRYPOINT
如果为非 null,则 Compose 会忽略镜像中的任何默认命令,例如 Dockerfile 中的指令。entrypoint
CMD
另请参阅 command
以设置或覆盖入口点进程要执行的默认命令。
在其简短形式中,该值可以定义为字符串:
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
如果值为 ,则使用镜像中的默认入口点。null
如果值为 (empty list) 或 (empty string),则忽略镜像声明的默认入口点,
即 overridden 为空。[]
''
env_file
该属性用于指定一个或多个文件,这些文件包含要传递给容器的环境变量。env_file
env_file: .env
相对路径是从 Compose 文件的父文件夹解析的。由于绝对路径会阻止 Compose
文件无法移植,则 Compose 会在使用此类路径设置 .env_file
在 environment 部分中声明的环境变量将覆盖这些值。即使这些值为 空或未定义。
env_file
也可以是列表。列表中的文件是自上而下处理的。对于同一变量
在两个 env 文件中指定,则列表中最后一个文件的值保持不变。
env_file:
- ./a.env
- ./b.env
List 元素也可以声明为 Map,然后允许您设置额外的 属性。
必填
该属性默认为 .当设置为 且文件缺失时,Compose 会静默忽略该条目。required
true
required
false
.env
env_file:
- path: ./default.env
required: true # default
- path: ./override.env
required: false
格式
该属性允许您对 .如果未设置,则根据 Env_file 格式中概述的 Compose 规则进行解析。format
env_file
env_file
raw
format 允许您使用 with key=value 项,但 Compose 不会尝试解析值以进行插值。
这样,您就可以按原样传递值,包括引号和符号。env_file
$
env_file:
- path: ./default.env
format: raw
Env_file 格式
文件中的每一行都必须采用格式。以下语法规则适用:.env
VAR[=[VAL]]
- 以 开头的行将作为注释处理并忽略。
#
- 空行将被忽略。
- 未加引号和双引号的 () 值应用了 Interpolation。
"
- 每行表示一个键值对。值可以选择引用。
VAR=VAL
->VAL
VAR="VAL"
->VAL
VAR='VAL'
->VAL
- 未加引号的值的内联注释前面必须有空格。
VAR=VAL # comment
->VAL
VAR=VAL# not a comment
->VAL# not a comment
- 带引号的值的内联注释必须跟在结束引号后面。
VAR="VAL # not a comment"
->VAL # not a comment
VAR="VAL" # comment
->VAL
- 单引号 () 值按字面意思使用。
'
VAR='$OTHER'
->$OTHER
VAR='${OTHER}'
->${OTHER}
- 引号可以用 .
\
VAR='Let\'s go!'
->Let's go!
VAR="{\"hello\": \"json\"}"
->{"hello": "json"}
- 常见的 shell 转义序列包括 、 、 和 在双引号值中受支持。
\n
\r
\t
\\
VAR="some\tvalue"
->some value
VAR='some\tvalue'
->some\tvalue
VAR=some\tvalue
->some\tvalue
VAL
可以省略,在这种情况下,变量 value 为空字符串。 可以省略,在这种情况下,变量为 unset。=VAL
# Set Rails/Rack environment
RACK_ENV=development
VAR="quoted"
环境
该属性定义容器中设置的环境变量。 可以使用数组或
地图。任何布尔值;true、false、yes、no 应括在引号中以确保
YAML 解析器不会将它们转换为 True 或 False。environment
environment
环境变量可以由单个键声明(没有值到等号)。在本例中,使用 Compose 依赖于您解析该值。如果该值未解析,则变量 未设置,并从 Service Container 环境中删除。
Map 语法:
environment:
RACK_ENV: development
SHOW: "true"
USER_INPUT:
数组语法:
environment:
- RACK_ENV=development
- SHOW=true
- USER_INPUT
当为服务同时设置 和 时,由 设置的值具有优先权。env_file
environment
environment
暴露
expose
定义 Compose 从容器公开的(传入)端口或端口范围。这些端口必须是
可供链接服务访问,并且不应将其发布到主机。仅内部容器
可以指定端口。
语法是 or for a port range。
如果未显式设置,则使用 protocol。<portnum>/[<proto>]
<startport-endport>/[<proto>]
tcp
expose:
- "3000"
- "8000"
- "8080-8085/tcp"
注意
如果镜像的 Dockerfile 已经公开了端口,则即使未在 Compose 文件中设置,网络上的其他容器也可以看到该端口。
expose
延伸
extends
允许您在不同的文件之间共享通用配置,甚至完全共享不同的项目。借助,您可以在一个位置定义一组通用的服务选项,并从任何位置引用它。您可以引用另一个 Compose 文件,并选择您也想在自己的应用程序中使用的服务,并能够根据自己的需要覆盖某些属性。extends
您可以在任何服务上与其他 Configuration Key 一起使用。该值必须是映射
使用 required 键和 optional 键定义。extends
extends
service
file
extends:
file: common.yml
service: webapp
service
:定义作为基础引用的服务的名称,例如 或 。web
database
file
:定义该服务的 Compose 配置文件的位置。
当服务使用 时,它还可以指定对其他资源的依赖关系,例如显式声明。但是,请务必注意,这不会自动将目标卷定义合并到扩展 Compose 文件中。相反,您负责确保为正在扩展的服务提供等效资源以保持一致性。Docker Compose 会验证 Compose 模型中是否存在具有引用 ID 的资源。extends
volumes
extends
对目标中其他资源的依赖关系可以是:extends
- 、 或
volumes
networks
configs
secrets
links
volumes_from
depends_on
- 使用命名空间声明 (、 、
service:{name}
ipc
pid
network_mode
)
不支持 的循环引用,Compose 会在检测到循环引用时返回错误。extends
查找引用服务
file
值可以是:
- 不存在。 这表示正在引用同一 Compose 文件中的另一个服务。
- 文件路径,可以是:
- 相对路径。此路径被视为相对于主 Compose 的位置 文件。
- 绝对路径。
标识的引用 Compose 文件中必须存在 表示的服务。
如果出现以下情况,Compose 会返回错误:service
- 找不到 表示的服务。
service
- 找不到 表示的 Compose 文件。
file
合并服务定义
两个服务定义,当前 Compose 文件中的主定义和引用的服务定义
指定 ,将按以下方式合并:extends
- Mappings:主服务定义的 mapping 中的键覆盖 mapping 中的键 引用的服务定义。未覆盖的键将按原样包含。
- 序列:项目组合成一个新序列。元素的顺序是 保留,引用的项目在前,主项目在后。
- 标量:主服务定义中的键优先于 引用了一个。
映射
以下键应被视为映射: 、 、 、annotations
build.args
build.labels
build.extra_hosts
deploy.labels
deploy.update_config
deploy.rollback_config
deploy.restart_policy
deploy.resources.limits
environment
healthcheck
labels
logging.options
sysctls
storage_opt
extra_hosts
ulimits
适用的一个例外情况是,除非引用的映射还指定了 ,否则主映射无法指定。在这种情况下,Compose 会返回错误。healthcheck
disable: true
disable: true
例如,下面的输入:
services:
common:
image: busybox
environment:
TZ: utc
PORT: 80
cli:
extends:
service: common
environment:
PORT: 8080
为服务生成以下配置。相同的输出是
如果使用数组语法,则生成。cli
environment:
PORT: 8080
TZ: utc
image: busybox
、 和 下的项也被视为映射,其中 key 是
容器。blkio_config.device_read_bps
blkio_config.device_read_iops
blkio_config.device_write_bps
blkio_config.device_write_iops
devices
volumes
例如,下面的输入:
services:
common:
image: busybox
volumes:
- common-volume:/var/lib/backup/data:rw
cli:
extends:
service: common
volumes:
- cli-volume:/var/lib/backup/data:ro
为服务生成以下配置。请注意,挂载的路径
现在指向新的卷名称和标志。cli
ro
image: busybox
volumes:
- cli-volume:/var/lib/backup/data:ro
如果引用的服务定义包含映射,则其下的项
只需复制到新的合并定义中。然后启动合并过程
再次关闭,直到没有剩余的键。extends
extends
例如,下面的输入:
services:
base:
image: busybox
user: root
common:
image: busybox
extends:
service: base
cli:
extends:
service: common
为服务生成以下配置。在这里,服务
从 service 获取 key,而 service 又从 service 获取此 key。cli
cli
user
common
base
image: busybox
user: root
序列
以下键应被视为序列: 、 、 、
将删除合并产生的任何重复项,以便仅序列
包含唯一元素。cap_add
cap_drop
configs
deploy.placement.constraints
deploy.placement.preferences
deploy.reservations.generic_resources
device_cgroup_rules
expose
external_links
ports
secrets
security_opt
例如,下面的输入:
services:
common:
image: busybox
security_opt:
- label:role:ROLE
cli:
extends:
service: common
security_opt:
- label:user:USER
为服务生成以下配置。cli
image: busybox
security_opt:
- label:role:ROLE
- label:user:USER
如果使用 list 语法,则还应将以下键视为序列: , , , 。与上面提到的序列字段不同,
不会删除合并产生的重复项。dns
dns_search
env_file
tmpfs
标量
服务定义中允许的任何其他键都应被视为标量。
external_links
external_links
将服务容器链接到在 Compose 应用程序外部托管的服务。 定义要使用 Platform Lookup 机制检索的现有服务的名称。
可以指定表单的别名。external_links
SERVICE:ALIAS
external_links:
- redis
- database:mysql
- database:postgresql
extra_hosts
extra_hosts
将主机名映射添加到容器网络接口配置(适用于 Linux)。/etc/hosts
短语法
短语法在列表中使用纯字符串。值必须以 的形式为其他主机设置 hostname 和 IP address。HOSTNAME=IP
extra_hosts:
- "somehost=162.242.195.82"
- "otherhost=50.31.209.229"
- "myhostv6=::1"
IPv6 地址可以括在方括号中,例如:
extra_hosts:
- "myhostv6=[::1]"
separator 是首选,但也可以使用。在 Docker Compose 版本 2.24.1 中引入。例如:=
:
extra_hosts:
- "somehost:162.242.195.82"
- "myhostv6:::1"
长语法
或者,可以设置为主机名和 IP 之间的映射extra_hosts
extra_hosts:
somehost: "162.242.195.82"
otherhost: "50.31.209.229"
myhostv6: "::1"
Compose 会在容器的网络中创建一个具有 IP 地址和主机名的匹配条目
配置,这意味着对于 Linux,请获取额外的行:/etc/hosts
162.242.195.82 somehost
50.31.209.229 otherhost
::1 myhostv6
group_add
group_add
按名称或编号指定其他组,容器内的用户必须是该组的成员。
例如,当多个容器(以不同用户身份运行)需要全部读取或写入时,这非常有用
共享卷上的同一文件。该文件可以由所有容器共享的组拥有,并在 中指定。group_add
services:
myservice:
image: alpine
group_add:
- mail
在创建的容器内运行必须显示用户属于该组,而该组则不会
如果不申报,情况就是如此。id
mail
group_add
健康检查
该属性声明一项检查,该检查用于确定服务容器是否“正常”。它的工作方式与 HEALTHCHECK Dockerfile 指令相同,并且具有相同的默认值
由服务的 Docker 镜像设置。您的 Compose 文件可以覆盖 Dockerfile 中设置的值。healthcheck
有关 的更多信息,请参阅 Dockerfile 参考。HEALTHCHECK
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost"]
interval: 1m30s
timeout: 10s
retries: 3
start_period: 40s
start_interval: 5s
interval
、 、 和 指定为持续时间。在 Docker Compose 版本 2.20.2 中引入timeout
start_period
start_interval
test
定义 Compose 运行以检查容器运行状况的命令。可以是
字符串或列表。如果是列表,则第一项必须是 , 或 。
如果它是一个字符串,则等效于指定后跟该字符串。NONE
CMD
CMD-SHELL
CMD-SHELL
# Hit the local web app
test: ["CMD", "curl", "-f", "http://localhost"]
Using 使用容器的默认 shell 运行配置为字符串的命令
(适用于 Linux)。以下两种形式是等效的:CMD-SHELL
/bin/sh
test: ["CMD-SHELL", "curl -f http://localhost || exit 1"]
test: curl -f https://localhost || exit 1
NONE
禁用 healthcheck,主要用于禁用服务的 Docker 镜像设置的 Healthcheck Dockerfile 指令。或者
可以通过设置来禁用镜像设置的 HealthCheck :disable: true
healthcheck:
disable: true
主机名
hostname
声明用于服务容器的自定义主机名。它必须是有效的 RFC 1123 主机名。
镜像
image
指定要从中启动容器的镜像。 必须遵循 Open Container Specification 可寻址镜像格式,
如。image
[<registry>/][<project>/]<image>[:<tag>|@<digest>]
image: redis
image: redis:5
image: redis@sha256:0ed5d5928d4737458944eb604cc8509e245c3e19d02ad83935398bc4b991aac7
image: library/redis
image: docker.io/library/redis
image: my_private.registry:5000/redis
如果平台上不存在该镜像,Compose 会尝试根据 .
如果您还使用 Compose Build Specification,则还有其他选项可用于控制
pull over 从 source 构建镜像,但 pull the image 是默认行为。pull_policy
image
只要声明了某个节,就可以从 Compose 文件中省略。如果您未使用 Compose 构建规范,则 Compose 文件中缺少 Compose 规范时将无法运行。build
image
初始化
init
在容器内运行一个 init 进程 (PID 1),该进程转发 signals 并 reaps 进程。
将此选项设置为为服务启用此功能。true
services:
web:
image: alpine:latest
init: true
使用的 init 二进制文件是特定于平台的。
工控机
ipc
配置 Service Container 设置的 IPC 隔离模式。
shareable
:为容器提供自己的私有 IPC 命名空间,其中包含 可以与其他容器共享。service:{name}
:使容器加入另一个容器的 () IPC 命名空间。shareable
ipc: "shareable"
ipc: "service:[service name]"
隔离
isolation
指定容器的隔离技术。支持的值特定于平台。
标签
labels
将元数据添加到容器。您可以使用数组或映射。
建议您使用反向 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"
Compose 会创建具有规范标签的容器:
com.docker.compose.project
set 设置为 Compose 创建的所有资源的用户项目名称com.docker.compose.service
在 Compose 文件中定义的服务名称的服务容器上设置
标签前缀是保留的。在 Compose 文件中指定带有此前缀的标签
导致运行时错误。com.docker.compose
链接
links
定义指向其他服务中的容器的网络链接。请同时指定服务名称和
链接别名 (),或仅服务名称。SERVICE:ALIAS
web:
links:
- db
- db:database
- redis
链接服务的容器可通过与别名或服务名称相同的主机名访问 如果未指定别名。
不需要链接即可使服务进行通信。如果未设置特定的网络配置,
任何服务都能够访问网络上以该服务的名称命名的任何其他服务。如果服务
do declare networks (声明它们所附加到的网络),不会覆盖 network configuration (网络配置)和 services not (不覆盖
连接到共享网络时无法通信。Compose 不会在配置不匹配时发出警告。default
links
链接还以与 depends_on 相同的方式表示服务之间的隐式依赖关系,因此它们确定服务启动的顺序。
伐木
logging
定义服务的日志记录配置。
logging:
driver: syslog
options:
syslog-address: "tcp://192.168.0.42:123"
该名称指定服务容器的日志记录驱动程序。默认值和可用值
特定于平台。驱动程序特定的选项可以设置为 as 键值对。driver
options
mac_address
适用于 Docker Compose 版本 2.24.0 及更高版本。
mac_address
设置服务容器的 MAC 地址。
注意
容器运行时可能会拒绝此值(即。Docker 引擎 >= v25.0)。在这种情况下,您应该改用 networks.mac_address。
mem_limit
mem_limit
配置容器可以分配的内存量的限制,设置为表示字节值的字符串。
设置后,必须与 Deploy 规范中的属性一致。mem_limit
limits.memory
mem_reservation
mem_reservation
配置容器可以分配的内存量的预留,设置为表示字节值的字符串。
设置后,必须与 Deploy 规范中的属性一致。mem_reservation
reservations.memory
mem_swappiness
mem_swappiness
定义为一个百分比,一个介于 0 和 100 之间的值,供主机内核换出
容器使用的匿名内存页。
0
:关闭匿名页面交换。100
:将所有匿名页面设置为可交换页面。
默认值是特定于平台的。
memswap_limit
memswap_limit
定义允许容器交换到磁盘的内存量。这是一个修饰符
仅当还设置了 memory
时才有意义。使用 swap 可以让容器写入多余的
内存要求。
经常将内存交换到磁盘的应用程序会降低性能。
- 如果设置为正整数,则必须设置 both 和 。 表示可以使用的内存和 Swap 的总量,并控制非 Swap 内存使用的数量。因此,如果 =“300m” 和 =“1g”,则容器可以使用 300m 的内存和 700m (1g - 300m) 的交换空间。
memswap_limit
memory
memswap_limit
memswap_limit
memory
memory
memswap_limit
- 如果设置为 0,则忽略该设置,并将该值视为未设置。
memswap_limit
- 如果 设置为与 相同的值,并且设置为正整数,则容器无权访问 swap。
memswap_limit
memory
memory
- 如果未设置并已设置,则容器可以使用与设置一样多的交换(如果主机容器配置了交换内存)。例如,如果 =“300m” 且未设置,则容器总共可以使用 600m 的内存和 swap。
memswap_limit
memory
memory
memory
memswap_limit
- 如果显式设置为 -1,则允许容器使用无限交换,最高可达主机系统上的可用数量。
memswap_limit
network_mode
network_mode
设置 Service Container 的网络模式。
none
:关闭所有容器联网。host
:为容器提供对主机网络接口的原始访问权限。service:{name}
:通过引用容器的服务名称,为容器提供对指定容器的访问权限。container:{name}
:通过引用容器的容器 ID 为容器提供对指定容器的访问权限。
有关容器网络的更多信息,请参阅 Docker Engine 文档。
network_mode: "host"
network_mode: "none"
network_mode: "service:[service name]"
设置后,不允许使用 networks
属性,并且 Compose 会拒绝任何
Compose 文件。
网络
该属性定义服务容器附加到的网络,引用 top-level 元素下的条目。该属性有助于管理容器的网络方面,从而控制服务在 Docker 环境中的分段和交互方式。这用于指定该服务的容器应连接到哪些网络。这对于定义容器如何相互通信以及如何进行外部通信非常重要。networks
networks
networks
services:
some-service:
networks:
- some-network
- other-network
有关 top-level 元素的更多信息,请参阅 网络.networks
别名
aliases
声明网络上服务的备用主机名。同一台上的其他容器
network 可以使用服务名称或别名连接到服务的容器之一。
由于是网络范围的,因此同一服务可以在不同的网络上具有不同的别名。aliases
注意
网络范围的别名可以由多个容器共享,甚至可以由多个服务共享。 如果是,则无法保证名称解析为哪个容器。
services:
some-service:
networks:
some-network:
aliases:
- alias1
- alias3
other-network:
aliases:
- alias2
在以下示例中,服务能够到达
主机名或网络上。该服务能够在网络上或网络上访问相同的服务。frontend
backend
backend
database
back-tier
monitoring
backend
backend
mysql
admin
services:
frontend:
image: example/webapp
networks:
- front-tier
- back-tier
monitoring:
image: example/monitoring
networks:
- admin
backend:
image: example/backend
networks:
back-tier:
aliases:
- database
admin:
aliases:
- mysql
networks:
front-tier:
back-tier:
admin:
ipv4_address、ipv6_address
在加入网络时为服务容器指定静态 IP 地址。
顶级 networks 部分中的相应网络配置必须具有一个属性,其中子网配置涵盖每个静态地址。ipam
services:
frontend:
image: example/webapp
networks:
front-tier:
ipv4_address: 172.16.238.10
ipv6_address: 2001:3984:3989::10
networks:
front-tier:
ipam:
driver: default
config:
- subnet: "172.16.238.0/24"
- subnet: "2001:3984:3989::/64"
link_local_ips
link_local_ips
指定链路本地 IP 的列表。链路本地 IP 是属于井的特殊 IP
已知子网,完全由 Operator 管理,通常取决于它们所在的架构
部署。
例:
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
mac_address
mac_address
设置服务容器在连接到此特定网络时使用的 MAC 地址。
优先权
priority
指示 Compose 将服务的容器连接到其
网络。如果未指定,则默认值为 0。
在以下示例中,应用服务连接到 first,因为它具有最高优先级。然后,它连接到 ,然后 ,它使用默认优先级值 0。app_net_1
app_net_3
app_net_2
services:
app:
image: busybox
command: top
networks:
app_net_1:
priority: 1000
app_net_2:
app_net_3:
priority: 100
networks:
app_net_1:
app_net_2:
app_net_3:
oom_kill_disable
如果已设置,则 Compose 会配置平台,以便在
的记忆匮乏。oom_kill_disable
oom_score_adj
oom_score_adj
调整在内存不足时由 Platform 终止的容器的首选项。值必须
在 -1000,1000 范围内。
PID
pid
设置 Compose 创建的容器的 PID 模式。
支持的值特定于平台。
pids_limit
pids_limit
调整容器的 PID 限制。设置为 -1 表示 PID 不受限制。
pids_limit: 10
设置后,必须与 Deploy 规范中的属性一致。pids_limit
pids
平台
platform
定义运行服务的容器的目标平台。它使用语法。os[/arch[/variant]]
、 和 的值必须符合 OCI 镜像规范使用的约定。os
arch
variant
Compose 使用此属性来确定提取哪个版本的镜像 和/或执行服务构建的平台。
platform: darwin
platform: windows/amd64
platform: linux/arm64/v8
港口
这用于定义主机和容器之间的端口映射。这对于允许外部访问容器内运行的服务至关重要。可以使用简单端口映射的短语法或长语法(包括协议类型和网络模式等其他选项)来定义它。ports
注意
端口映射不能与 一起使用,否则会发生运行时错误。
network_mode: host
短语法
短语法是一个以冒号分隔的字符串,用于设置主机 IP、主机端口和容器端口 在表单中:
[HOST:]CONTAINER[/PROTOCOL]
哪里:
HOST
是[IP:](port | range)
CONTAINER
是port | range
PROTOCOL
将端口限制为指定的协议。 和值由规范定义, Compose 支持特定于平台的协议名称。tcp
udp
如果未设置主机 IP,它将绑定到所有网络接口。端口可以是单个 值或范围。Host 和容器必须使用等效的范围。
指定两个端口 (),或仅指定容器端口。在后一种情况下,
容器运行时会自动分配主机的任何未分配端口。HOST:CONTAINER
HOST:CONTAINER
应始终指定为(带引号的)字符串,以避免冲突
使用 YAML Base-60 浮点数。
例子:
ports:
- "3000"
- "3000-3005"
- "8000:8000"
- "9090-9091:8080-8081"
- "49100:22"
- "8000-9000:80"
- "127.0.0.1:8001:8001"
- "127.0.0.1:5000-5010:5000-5010"
- "6060:6060/udp"
注意
如果容器引擎不支持主机 IP 映射,则 Compose 会拒绝 Compose 文件并忽略指定的主机 IP。
长语法
长格式语法允许配置不能 以简短的形式表示。
target
:集装箱港口published
:公开暴露的端口。它定义为字符串,并且可以使用 syntax 设置为范围 。这意味着在设置的范围内为实际端口分配了剩余的可用端口。start-end
host_ip
:主机 IP 映射,未指定表示所有网络接口 ()。0.0.0.0
protocol
:端口协议( 或 )。默认为 。tcp
udp
tcp
app_protocol
此端口用于的应用程序协议(TCP/IP 级别 4 / OSI 级别 7)。这是可选的,可以用作 Compose 的提示,以便为它理解的协议提供更丰富的行为。在 Docker Compose 版本 2.26.0 中引入。mode
: : 用于在每个节点上发布主机端口,或用于对端口进行负载均衡。默认为 。host
ingress
ingress
name
:端口的可读名称,用于记录它在服务中的使用情况。
ports:
- name: web
target: 80
host_ip: 127.0.0.1
published: "8080"
protocol: tcp
app_protocol: http
mode: host
- name: web-secured
target: 443
host_ip: 127.0.0.1
published: "8083-9000"
protocol: tcp
app_protocol: https
mode: host
post_start
post_start
定义在容器启动后运行的生命周期钩子序列。无法保证命令运行的确切时间。
command
:指定容器启动后要运行的命令。此属性是必需的,您可以选择使用 shell 表单或 exec 表单。user
:运行命令的用户。如果未设置,则使用与主服务命令相同的用户运行该命令。privileged
:允许命令以特权访问方式运行。post_start
working_dir
:运行命令的工作目录。如果未设置,它将在与 main service 命令相同的工作目录中运行。environment
:专门为命令设置环境变量。虽然该命令继承了为服务的 main 命令定义的环境变量,但此部分允许您添加新变量或覆盖现有变量。post_start
services:
test:
post_start:
- command: ./do_something_on_startup.sh
user: root
privileged: true
environment:
- FOO=BAR
有关更多信息,请参阅使用生命周期挂钩。
pre_stop
pre_stop
定义在容器停止之前要运行的生命周期钩子序列。如果容器自行停止或突然终止,这些 hook 将不会运行。
配置等效于“post_start。
特权
privileged
将服务容器配置为使用提升的权限运行。支持和实际影响因平台而异。
配置 文件
profiles
定义要启用的服务的命名配置文件列表。如果未分配,则始终启动服务,但如果已分配,则仅在激活配置文件时启动该服务。
如果存在,请遵循 .profiles
[a-zA-Z0-9][a-zA-Z0-9_.-]+
services:
frontend:
image: frontend
profiles: ["frontend"]
phpmyadmin:
image: phpmyadmin
depends_on:
- db
profiles:
- debug
pull_policy
pull_policy
定义 Compose 在开始拉取镜像时做出的决策。可能的值为:
always
:Compose 始终从注册表中提取镜像。never
:Compose 不会从注册表中提取镜像,而是依赖于平台缓存的镜像。 如果没有缓存的镜像,则报告失败。missing
:仅当镜像在平台缓存中不可用时,Compose 才会提取镜像。 如果您未同时使用 Compose Build Specification,则此选项为默认选项。 被视为此值的别名,以实现向后兼容性。if_not_present
build
:Compose 会构建镜像。如果镜像已存在,则 Compose 会重新构建该镜像。
read_only
read_only
将服务容器配置为使用只读文件系统创建。
重新启动
restart
定义平台在容器终止时应用的策略。
no
:默认重启策略。在任何情况下,它都不会重新启动容器。always
:该策略始终重新启动容器,直到将其删除。on-failure[:max-retries]
:如果退出代码指示错误,该策略将重新启动容器。 (可选)限制 Docker 守护程序尝试的重启重试次数。unless-stopped
:该策略会重新启动容器,而不管退出代码如何,但会停止 在服务停止或删除时重新启动。
restart: "no"
restart: always
restart: on-failure
restart: on-failure:3
restart: unless-stopped
您可以在 Docker 运行参考页面的重启策略 (--restart) 部分找到有关重启策略的更多详细信息。
运行
runtime
指定要用于服务容器的运行时。
例如,可以是 OCI 运行时规范的实施名称,例如“runc”。runtime
web:
image: busybox:latest
command: true
runtime: runc
默认值为 .要使用其他运行时,请参阅替代运行时。runc
规模
scale
指定要为此服务部署的默认容器数。
如果两者都设置,则必须与 Deploy 规范中的属性一致。scale
replicas
秘密
该属性基于每个服务授予对 secrets 顶级元素定义的敏感数据的访问权限。可以向服务授予对多个密钥的访问权限。secrets
支持两种不同的语法变体;短语法和长语法。密钥的 long 和 short 语法可以在同一 Compose 文件中使用。
如果密钥在平台上不存在或未在 Compose 文件的 secrets
顶级部分定义,则 Compose 会报告错误。
在顶级中定义密钥不得意味着授予对它的任何服务访问权限。
此类授权必须在服务规范中作为 secrets 服务元素显式指定。secrets
短语法
短语法变体仅指定密钥名称。这将授予
容器访问密钥,并将其作为只读挂载到容器中。源名称和目标挂载点均已设置
添加到密钥名称。/run/secrets/<secret_name>
以下示例使用 short 语法授予服务
访问 secret。的值已设置
添加到文件的内容中。frontend
server-certificate
server-certificate
./server.cert
services:
frontend:
image: example/webapp
secrets:
- server-certificate
secrets:
server-certificate:
file: ./server.cert
长语法
长语法为如何在 服务的容器。
source
:平台上存在的密钥的名称。target
:要挂载到 服务的任务容器,或者文件的绝对路径(如果需要备用位置)。如果未指定,则默认为。/run/secrets/
source
uid
和 :在服务的任务容器中拥有文件的数字 UID 或 GID。默认值为 USER running container。gid
/run/secrets/
mode
:要挂载到服务的任务容器中的文件的权限,以八进制表示法表示。 默认值为 world-readable permissions (mode )。 如果设置了 writable bit,则必须忽略该 writable bit 。可以设置可执行位。/run/secrets/
0444
以下示例将密钥文件的名称设置为容器内,将模式设置为 (group-readable),并设置用户和组
自。的值已设置
添加到文件的内容中。server-certificate
server.cert
0440
103
server-certificate
./server.cert
services:
frontend:
image: example/webapp
secrets:
- source: server-certificate
target: server.cert
uid: "103"
gid: "103"
mode: "0440"
secrets:
server-certificate:
file: ./server.cert
security_opt
security_opt
覆盖每个容器的默认标记方案。
security_opt:
- label:user:USER
- label:role:ROLE
有关您可以覆盖的更多默认标记方案,请参阅安全配置。
shm_size
shm_size
配置服务容器允许的共享内存(在 Linux 上为 partition )的大小。
它被指定为字节值。/dev/shm
stdin_open
stdin_open
将服务的容器配置为使用分配的 stdin 运行。这与运行带有 flag 的容器相同。有关详细信息,请参阅 使 STDIN 保持打开状态。-i
支持的值为 或 。true
false
stop_grace_period
stop_grace_period
指定 Compose 在尝试停止容器时必须等待多长时间(如果未停止容器)
在发送 SIGKILL 之前处理 SIGTERM (或用 stop_signal
指定的任何停止信号)。它被指定
作为持续时间。
stop_grace_period: 1s
stop_grace_period: 1m30s
默认值为 10 秒,以便容器在发送 SIGKILL 之前退出。
stop_signal
stop_signal
定义 Compose 用于停止服务容器的信号。
如果未设置的容器被 Compose 通过发送 .SIGTERM
stop_signal: SIGUSR1
storage_opt
storage_opt
定义服务的存储驱动程序选项。
storage_opt:
size: '1G'
sysctl 参数
sysctls
定义要在容器中设置的内核参数。 可以使用 array 或 map。sysctls
sysctls:
net.core.somaxconn: 1024
net.ipv4.tcp_syncookies: 0
sysctls:
- net.core.somaxconn=1024
- net.ipv4.tcp_syncookies=0
您只能使用在内核中具有命名空间的 sysctl 参数。Docker 不会 支持更改容器内的 sysctl 参数,这些 sysctl 参数也会修改主机系统。 有关支持的 sysctl 的概述,请参阅配置命名空间内核 参数 (sysctl) 的 S 参数。
TMPFS
tmpfs
在容器内挂载临时文件系统。它可以是单个值或列表。
tmpfs:
- <path>
- <path>:<options>
:容器内将挂载 tmpfs 的路径。 :tmpfs 挂载的选项列表(以逗号分隔)。
可用选项:
mode
:设置文件系统权限。uid
:设置拥有已挂载 tmpfs 的用户 ID。gid
:设置拥有已挂载 tmpfs 的组 ID。
services:
app:
tmpfs:
- /data:mode=755,uid=1009,gid=1009
- /run
tty
tty
将服务的容器配置为使用 TTY 运行。这与使用 or 标志运行容器相同。有关详细信息,请参阅分配伪 TTY。-t
--tty
支持的值为 或 。true
false
ulimits
ulimits
覆盖容器的默认 uLimit。它被指定为单个限制的整数
或作为软/硬限制的映射。
ulimits:
nproc: 65535
nofile:
soft: 20000
hard: 40000
用户
user
覆盖用于运行容器进程的用户。默认值由镜像(即 Dockerfile )设置。如果未设置,则 .USER
root
userns_mode
userns_mode
设置服务的用户命名空间。支持的值特定于平台,可能取决于
在平台配置上。
userns_mode: "host"
UTS
uts
配置服务容器的 UTS 命名空间模式集。未指定时
如果支持,则由运行时决定分配 UTS 命名空间。可用值为:
'host'
:导致容器使用与主机相同的 UTS 命名空间。
uts: "host"
卷
该属性定义服务容器可访问的挂载主机路径或命名卷。可用于定义多种类型的挂载;或。volumes
volumes
volume
bind
tmpfs
npipe
如果挂载是主机路径,并且仅由单个服务使用,则可以将其声明为服务的一部分
定义。要跨多个服务重用卷,请创建一个名为
volume 必须在 top-level 元素中声明。volumes
以下示例显示了服务正在使用的命名卷 ()
以及为单个服务定义的绑定挂载。db-data
backend
services:
backend:
image: example/backend
volumes:
- type: volume
source: db-data
target: /data
volume:
nocopy: true
subpath: sub
- type: bind
source: /var/run/postgres/postgres.sock
target: /var/run/postgres/postgres.sock
volumes:
db-data:
有关顶级元素的更多信息,请参阅卷。volumes
短语法
短语法使用带有冒号分隔值的单个字符串来指定卷挂载
() 或访问模式 ()。VOLUME:CONTAINER_PATH
VOLUME:CONTAINER_PATH:ACCESS_MODE
VOLUME
:可以是托管容器的平台上的主机路径(绑定挂载)或卷名称。CONTAINER_PATH
:容器中挂载卷的路径。ACCESS_MODE
:以逗号分隔的选项列表:,
rw
:读取和写入访问权限。如果未指定任何内容,则为默认值。ro
:只读访问权限。z
: SELinux 选项,指示绑定挂载主机内容在多个容器之间共享。Z
:SELinux 选项,指示绑定挂载主机内容是私有的,并且对于其他容器是非共享的。
注意
在没有 SELinux 的平台上,将忽略 SELinux 重新标记绑定挂载选项。
注意
只有部署到 本地容器运行时。这是因为相对路径是从 Compose 文件的父级解析的 目录,该目录仅适用于本地情况。当 Compose 部署到非本地 platform 拒绝使用相对主机路径的 Compose 文件,但会出现错误。为避免歧义 对于命名卷,相对路径应始终以 或 开头。
.
..
长语法
长格式语法允许配置不能 以简短的形式表示。
type
:挂载类型。、 、 、 或volume
bind
tmpfs
npipe
cluster
source
:挂载的源、绑定挂载在主机上的路径或 在顶级volumes
键中定义的卷的名称。不适用于 tmpfs 挂载。target
:容器中挂载卷的路径。read_only
:标记以将卷设置为只读。bind
:用于配置其他绑定选项:propagation
:用于绑定的传播模式。create_host_path
:如果不存在任何内容,则在 host 上的源路径处创建一个目录。 如果路径中存在任何内容,则 Compose 不会执行任何操作。这由简短的语法自动暗示 以实现与 legacy 的向后兼容性。docker-compose
selinux
:SELinux 重新标记选项 (shared) 或 (private)z
Z
volume
:配置其他卷选项:nocopy
:此标记可在创建卷时禁用从容器复制数据。subpath
:卷中要挂载的路径,而不是卷根目录。
tmpfs
:配置其他 tmpfs 选项:size
:tmpfs 挂载的大小,以字节为单位(数字或字节单位)。mode
:tmpfs 的文件模式作为八进制数的 Unix 权限位挂载。在 Docker Compose 版本 2.14.0 中引入。
consistency
:挂载的一致性要求。可用值特定于平台。
提示
使用大型存储库或 monorepo,或者使用不再随代码库扩展的虚拟文件系统? Compose 现在利用同步文件共享,并自动为绑定挂载创建文件共享。 确保您已使用付费订阅登录到 Docker,并且已在 Docker Desktop 的设置中启用了 Access experimental features 和 Manage Synchronized file shares with Compose。
volumes_from
volumes_from
挂载来自其他服务或容器的所有卷。您可以选择指定
只读访问或读写 。如果未指定访问级别,则使用读写访问权限。ro
rw
您还可以使用前缀从不受 Compose 管理的容器中挂载卷。container:
volumes_from:
- service_name
- service_name:ro
- container:container_name
- container:container_name:rw
working_dir
working_dir
覆盖由镜像指定的容器工作目录,例如 Dockerfile 的 .WORKDIR