服务顶级元素

服务是应用程序中计算资源的抽象定义,可以扩展或替换 独立于其他组件。服务由一组容器提供支持,这些容器由平台运行 根据复制要求和放置约束。由于服务由容器提供支持,因此它们被定义 通过 Docker 镜像和一组运行时参数。服务中的所有容器都是使用这些容器创建的 参数。

Compose 文件必须声明servicestop-level 元素作为 Map,其键是服务名称的字符串表示形式, 其值为 Service Definitions。服务定义包含应用于每个 服务容器。

每项服务还可能包括build部分,该部分定义如何为服务创建 Docker 镜像。 Compose 支持使用此服务定义构建 Docker 镜像。如果未使用,则build部分将被忽略,并且 Compose 文件仍被视为有效。构建支持是 Compose 规范的一个可选方面,并且是 Compose Build 规范文档中详细介绍了。

每个服务都定义了运行其容器的运行时约束和要求。这deploy分区组 这些约束,并允许平台调整部署策略,以最好地满足容器的需求 可用资源。部署支持是 Compose 规范的一个可选方面,并且是 在 Compose Deploy 规范文档中进行了详细介绍。 如果未实现deploy部分将被忽略,并且 Compose 文件仍被视为有效。

例子

简单示例

以下示例演示了如何使用 Docker Compose 定义两个简单服务、设置其镜像、映射端口和配置基本环境变量。

services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"

  db:
    image: postgres:13
    environment:
      POSTGRES_USER: example
      POSTGRES_DB: exampledb

高级示例

在以下示例中,proxyservice 使用 Nginx 镜像,将本地 Nginx 配置文件挂载到容器中,暴露 port80并依赖于backend服务。

backendservice 从位于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定义容器的注释。annotations可以使用 array 或 map。

annotations:
  com.example.foo: bar
annotations:
  - com.example.foo=bar

附加

在 Docker Compose 版本 2.20.0 中引入

什么时候attach定义并设置为falseCompose 不收集服务日志, ,直到您明确请求它。

默认服务配置为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表示无限制。

设置后,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

在 Docker Compose 版本 2.15.0 中引入

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 镜像。 服务只有在configs属性。支持两种不同的语法变体。

如果出现config在平台上不存在,或者未在configs顶级元素在 Compose 文件中。

为 config 定义了两种语法:short 语法和 long 语法。

您可以向服务授予对多个配置的访问权限,并且可以混合使用长语法和短语法。

短语法

短语法变体仅指定配置名称。这将授予 容器访问配置,并将其作为文件挂载到服务的容器的文件系统中。容器中挂载点的位置默认为/<config_name>在 Linux 容器中,以及C:\<config-name>在 Windows 容器中。

以下示例使用 short 语法向redis服务 访问my_configmy_other_configconfigs 的 Configs。的值my_config设置为文件的内容./my_config.txtmy_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>如果未指定。
  • uidgid:拥有挂载的配置文件的数字 UID 或 GID 在服务的任务容器中。未指定时的默认值为 USER running container。
  • mode:挂载在服务的 任务容器,采用八进制表示法。默认值为世界可读 (0444). 必须忽略可写位。可执行位可以设置。

以下示例将my_configredis_config在 container,将 mode 设置为0440(组可读)并设置用户和组 自103.这redis服务无权访问my_other_configconfig。

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 容器的服务,则可以使用file:registry:的协议credential_spec.Compose 还支持其他 协议。

credential_spec必须采用file://<filename>registry://<value-name>.

credential_spec:
  file: my-credential-spec.json

使用registry:,则凭证规范是从 Windows 注册表中读取的 守护程序的主机。具有给定名称的注册表值必须位于:

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 按依赖项顺序创建服务。在以下 例dbredis创建时间web.

  • Compose 会按依赖关系顺序删除服务。在以下 例web之前已删除dbredis.

简单示例:

services:
  web:
    build: .
    depends_on:
      - db
      - redis
  redis:
    image: redis
  db:
    image: postgres

Compose 保证依赖项服务之前已启动 启动依赖服务。 Compose 会等待依赖项服务“准备就绪”,然后再 启动依赖服务。

长语法

长格式语法支持配置不能 以简短的形式表示。

  • restart:设置为trueCompose 会在更新依赖项服务后重新启动此服务。 这适用于由 Compose作控制的显式重启,但不包括容器运行时的自动重启 容器死机后。在 Docker Compose 版本 2.17.0 中引入。

  • condition:设置被视为满足依赖项的条件

    • service_started:相当于上述短语法
    • service_healthy:指定依赖项应为“正常” (如 healthcheck 所示)在启动依赖项之前 服务。
    • service_completed_successfully:指定依赖项应运行 成功完成,然后再启动依赖服务。
  • required:设置为falseCompose 仅在 Dependency Service 未启动或不可用时发出警告。如果未定义 默认值requiredtrue.在 Docker Compose 版本 2.20.0 中引入。

服务依赖关系会导致以下行为:

  • Compose 按依赖项顺序创建服务。在以下 例dbredis创建时间web.

  • Compose 等待 healthchecks 传递依赖项 标有service_healthy.在以下示例中,db预计 之前是“健康”web已创建。

  • Compose 会按依赖关系顺序删除服务。在以下 例web之前已删除dbredis.

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在 “healthy” 之前。

部署

deploy指定服务的部署和生命周期的配置,如 Compose Deploy 规范中所定义。

发展

在 Docker Compose 版本 2.22.0 中引入

develop指定用于保持容器与 source 同步的开发配置,如 Development 部分所定义。

device_cgroup_rules

device_cgroup_rules定义此容器的设备 cgroup 规则列表。 该格式与 Linux 内核在 Control Groups 中指定的格式相同 设备白名单控制器

device_cgroup_rules:
  - 'c 1:3 mr'
  - 'a 7:* rmw'

设备

devicesHOST_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 解析器的自定义 DNS 选项(/etc/resolv.conf文件)。

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

dns_search定义要在容器网络接口配置上设置的自定义 DNS 搜索域。它可以是单个值或列表。

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

域名

domainname声明要用于服务容器的自定义域名。它必须是有效的 RFC 1123 主机名。

driver_opts

在 Docker Compose 版本 2.27.1 中引入

driver_opts将选项列表指定为要传递给驱动程序的键值对。这些选项包括 取决于驱动程序。

services:
  app:
    networks:
      app_net:
        driver_opts:
          com.docker.network.bridge.host_binding_ipv4: "127.0.0.1"

有关更多信息,请参阅网络驱动程序文档

入口点

entrypoint声明服务容器的默认入口点。 这会覆盖ENTRYPOINT指令。

如果entrypoint为非 null,则 Compose 会忽略镜像中的任何默认命令,例如CMD指令。

另请参阅command设置或覆盖 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

如果值为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,然后允许您设置额外的 属性。

必填

在 Docker Compose 版本 2.24.0 中引入

required属性默认为true.什么时候required设置为false.env文件缺失,则 Compose 会静默忽略该条目。

env_file:
  - path: ./default.env
    required: true # default
  - path: ./override.env
    required: false

格式

在 Docker Compose 版本 2.30.0 中引入

format属性允许您使用env_file.未设置时,env_file根据 Env_file 格式概述的 Compose 规则进行解析。

rawformat 允许您使用env_file替换为 key=value 项,但 Compose 不会尝试解析值以进行插值。 这样,您就可以按原样传递值,包括引号和符号。$

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 为空字符串。=VAL可以省略,在这种情况下,变量为 unset。

# Set Rails/Rack environment
RACK_ENV=development
VAR="quoted"

环境

environmentattribute 定义容器中设置的环境变量。environment可以使用数组或 地图。任何布尔值;true、false、yes、no 应括在引号中以确保 YAML 解析器不会将它们转换为 True 或 False。

环境变量可以由单个键声明(没有值到等号)。在本例中,使用 Compose 依赖于您解析该值。如果该值未解析,则变量 未设置,并从 Service Container 环境中删除。

Map 语法:

environment:
  RACK_ENV: development
  SHOW: "true"
  USER_INPUT:

数组语法:

environment:
  - RACK_ENV=development
  - SHOW=true
  - USER_INPUT

当两者env_fileenvironment为服务设置,值由environment具有优先权。

暴露

expose定义 Compose 从容器公开的(传入)端口或端口范围。这些端口必须是 可供链接服务访问,并且不应将其发布到主机。仅内部容器 可以指定端口。

语法为<portnum>/[<proto>]<startport-endport>/[<proto>]对于端口范围。 如果未显式设置,则tcpprotocol 的

expose:
  - "3000"
  - "8000"
  - "8080-8085/tcp"

注意

如果镜像的 Dockerfile 已经公开了端口,则即使expose未在 Compose 文件中设置。

延伸

extends允许您在不同的文件之间共享通用配置,甚至完全共享不同的项目。跟extends您可以在一个位置定义一组通用的服务选项,并从任何位置引用它。您可以引用另一个 Compose 文件,并选择您也想在自己的应用程序中使用的服务,并能够根据自己的需要覆盖某些属性。

您可以使用extends与其他 Configuration Key 一起在任何服务上。这extendsvalue 必须是 Map 使用必需的service和可选的file钥匙。

extends:
  file: common.yml
  service: webapp
  • service:定义作为基础引用的服务的名称,例如webdatabase.
  • file:定义该服务的 Compose 配置文件的位置。

当服务使用extends,它还可以指定对其他资源的依赖关系,显式volumes声明。但是,请务必注意extends不会自动将目标卷定义合并到扩展的 Compose 文件中。相反,您负责确保为正在扩展的服务提供等效资源以保持一致性。Docker Compose 会验证 Compose 模型中是否存在具有引用 ID 的资源。

extends目标可以是:

  • 显式引用volumes,networks,configs,secrets,links,volumes_fromdepends_on
  • 使用service:{name}命名空间声明中的语法 (ipc,pid,network_mode)

循环引用extends不受支持,则 Compose 会在检测到错误时返回错误。

查找引用服务

file值可以是:

  • 不存在。 这表示正在引用同一 Compose 文件中的另一个服务。
  • 文件路径,可以是:
    • 相对路径。此路径被视为相对于主 Compose 的位置 文件。
    • 绝对路径。

service必须存在于已识别的引用 Compose 文件中。 如果出现以下情况,Compose 会返回错误:

  • service未找到。
  • file未找到。

合并服务定义

两个服务定义,当前 Compose 文件中的主定义和引用的服务定义 指定者extends的 ID 将按以下方式合并:

  • 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.

一个例外情况适用于healthcheck是主映射无法指定disable: true除非引用的映射还指定了disable: true.在这种情况下,Compose 会返回错误。

例如,下面的输入:

services:
  common:
    image: busybox
    environment:
      TZ: utc
      PORT: 80
  cli:
    extends:
      service: common
    environment:
      PORT: 8080

cli服务。相同的输出是 如果使用数组语法,则生成。

environment:
  PORT: 8080
  TZ: utc
image: busybox

下 项blkio_config.device_read_bps,blkio_config.device_read_iops,blkio_config.device_write_bps,blkio_config.device_write_iops,devicesvolumes也被视为映射,其中 key 是 容器。

例如,下面的输入:

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

如果引用的服务定义包含extendsmapping 的 只需复制到新的合并定义中。然后启动合并过程 再次关闭直到没有extends键剩余。

例如,下面的输入:

services:
  base:
    image: busybox
    user: root
  common:
    image: busybox
    extends:
      service: base
  cli:
    extends:
      service: common

cli服务。这里cli服务业 得到user密钥来自commonservice,而 service 又从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

如果使用 case list 语法,则以下键也应被视为序列:dns,dns_search,env_file,tmpfs.与上面提到的序列字段不同, 不会删除合并产生的重复项。

标量

服务定义中允许的任何其他键都应被视为标量。

external_links将服务容器链接到在 Compose 应用程序外部托管的服务。external_links定义要使用 Platform Lookup 机制检索的现有服务的名称。 形式的别名SERVICE:ALIAS可以指定。

external_links:
  - redis
  - database:mysql
  - database:postgresql

extra_hosts

extra_hosts将主机名映射添加到容器网络接口配置 (/etc/hosts适用于 Linux)。

短语法

短语法在列表中使用纯字符串。值必须以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"

长语法

或者extra_hosts可以设置为主机名和 IP 之间的映射

extra_hosts:
  somehost: "162.242.195.82"
  otherhost: "50.31.209.229"
  myhostv6: "::1"

Compose 会在容器的网络中创建一个具有 IP 地址和主机名的匹配条目 configuration,这意味着对于 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在创建的容器内必须显示用户属于mailgroup 中,则不会有 如果group_add没有宣布。

健康检查

healthcheck属性声明一项检查,该检查用于确定服务容器是否“运行状况良好”。它的工作方式与 HEALTHCHECK Dockerfile 指令相同,并且具有相同的默认值 由服务的 Docker 镜像设置。您的 Compose 文件可以覆盖 Dockerfile 中设置的值。

有关更多信息HEALTHCHECK,请参阅 Dockerfile 参考

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

interval,timeout,start_periodstart_interval指定为 durations。在 Docker Compose 版本 2.20.2 中引入

test定义 Compose 运行以检查容器运行状况的命令。可以是 字符串或列表。如果它是一个列表,则第一项必须是NONE,CMDCMD-SHELL. 如果它是一个字符串,则等效于指定CMD-SHELL后跟该字符串。

# Hit the local web app
test: ["CMD", "curl", "-f", "http://localhost"]

CMD-SHELL使用容器的默认 shell 运行配置为字符串的命令 (/bin/sh适用于 Linux)。以下两种形式是等效的:

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指定要从中启动容器的镜像。image必须遵循 Open Container Specification 可寻址镜像格式, 如[<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 会尝试根据pull_policy. 如果您还使用 Compose Build Specification,则还有其他选项可用于控制 pull over 从 source 构建镜像,但 pull the image 是默认行为。

image可以从 Compose 文件中省略,只要build部分。如果您未使用 Compose 构建规范,则 Compose 在以下情况下将无法正常工作imageCompose 文件中缺少。

初始化

init在容器内运行一个 init 进程 (PID 1),该进程转发 signals 并 reaps 进程。 将此选项设置为true为服务启用此功能。

services:
  web:
    image: alpine:latest
    init: true

使用的 init Binaries是特定于平台的。

工控机

ipc配置 Service Container 设置的 IPC 隔离模式。

  • shareable:为容器提供自己的私有 IPC 命名空间,其中包含 可以与其他容器共享。
  • service:{name}:使容器加入另一个容器的 (shareable) IPC 命名空间。
    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.projectset 设置为 Compose 创建的所有资源的用户项目名称
  • com.docker.compose.service在 Compose 文件中定义的服务名称的服务容器上设置

com.docker.composelabel prefix 被保留。在 Compose 文件中指定带有此前缀的标签 导致运行时错误。

links定义指向其他服务中的容器的网络链接。请同时指定服务名称和 链接别名 (SERVICE:ALIAS),或者只使用服务名称。

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

链接服务的容器可通过与别名或服务名称相同的主机名访问 如果未指定别名。

不需要链接即可使服务进行通信。如果未设置特定的网络配置, 任何服务都能够访问default网络。如果服务 声明它们所附加到的网络,links不会覆盖网络配置和服务 连接到共享网络时无法通信。Compose 不会在配置不匹配时发出警告。

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

伐木

logging定义服务的日志记录配置。

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

drivername 指定服务容器的日志记录驱动程序。默认值和可用值 特定于平台。驱动程序特定的选项可以使用options作为键值对。

mac_address

适用于 Docker Compose 版本 2.24.0 及更高版本。

mac_address设置服务容器的 MAC 地址。

注意

容器运行时可能会拒绝此值(即。Docker 引擎 >= v25.0)。在这种情况下,您应该改用 networks.mac_address

mem_limit

mem_limit配置容器可以分配的内存量的限制,设置为表示字节值的字符串。

设置后,mem_limit必须与limits.memory属性

mem_reservation

mem_reservation配置容器可以分配的内存量的预留,设置为表示字节值的字符串。

设置后,mem_reservation必须与reservations.memory属性

mem_swappiness

mem_swappiness定义为一个百分比,一个介于 0 和 100 之间的值,供主机内核换出 容器使用的匿名内存页。

  • 0:关闭匿名页面交换。
  • 100:将所有匿名页面设置为可交换页面。

默认值是特定于平台的。

memswap_limit

memswap_limit定义允许容器交换到磁盘的内存量。这是一个修饰符 属性,该属性仅在memory。使用 swap 可以让容器写入多余的 内存要求。 经常将内存交换到磁盘的应用程序会降低性能。

  • 如果memswap_limit设置为正整数,则memorymemswap_limit必须设置。memswap_limit表示可以使用的内存和 swap 的总量,并且memory控制非交换内存使用的数量。因此,如果memory=“300m” 和memswap_limit=“1g”,容器可以使用 300m 的内存和 700m (1g - 300m) 的交换空间。
  • 如果memswap_limit设置为 0,则忽略该设置,并将该值视为未设置。
  • 如果memswap_limit设置为与memorymemory设置为正整数,则容器无权访问 swap。
  • 如果memswap_limit未设置,并且memory设置后,容器可以使用与memory设置,如果主机容器配置了交换内存。例如,如果memory=“300m” 和memswap_limit未设置,则容器总共可以使用 600m 的内存和 swap。
  • 如果memswap_limit显式设置为 -1,则允许容器使用无限交换,最高可达主机系统上的可用数量。

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 文件。

网络

networks属性定义服务容器所附加到的网络,引用networkstop-level 元素。这networks属性有助于管理容器的网络方面,从而控制服务在 Docker 环境中的分段和交互方式。这用于指定该服务的容器应连接到哪些网络。这对于定义容器如何相互通信以及如何进行外部通信非常重要。

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

有关networks顶级元素,请参阅 网络

别名

aliases声明网络上服务的备用主机名。同一台上的其他容器 network 可以使用服务名称或别名连接到服务的容器之一。

因为aliases是网络范围的,则同一服务可以在不同的网络上具有不同的别名。

注意

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

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

在以下示例中,servicefrontend能够到达backendservice 在 主机名backenddatabaseback-tier网络。服务monitoring能够达到相同的backendservice 在backendmysqladmin网络。

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指定链路本地 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

在 Docker Compose 版本 2.23.2 中引入

mac_address设置服务容器在连接到此特定网络时使用的 MAC 地址。

优先权

priority指示 Compose 将服务的容器连接到其 网络。如果未指定,则默认值为 0。

在以下示例中,应用服务连接到app_net_1首先,因为它具有最高优先级。然后它连接到app_net_3然后app_net_2,它使用默认优先级值 0。

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

如果oom_kill_disable时,Compose 会配置平台,使其不会在 的记忆匮乏。

oom_score_adj

oom_score_adj调整在内存不足时由 Platform 终止的容器的首选项。值必须 在 -1000,1000 范围内。

PID

pid设置 Compose 创建的容器的 PID 模式。 支持的值特定于平台。

pids_limit

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

pids_limit: 10

设置后,pids_limit必须与pids属性

平台

platform定义运行服务的容器的目标平台。它使用os[/arch[/variant]]语法。

的值os,archvariant必须符合 OCI 镜像规范使用的约定。

Compose 使用此属性来确定提取哪个版本的镜像 和/或执行服务构建的平台。

platform: darwin
platform: windows/amd64
platform: linux/arm64/v8

港口

ports用于定义主机和容器之间的端口映射。这对于允许外部访问容器内运行的服务至关重要。可以使用简单端口映射的短语法或长语法(包括协议类型和网络模式等其他选项)来定义它。

注意

端口映射不得与network_mode: host否则会发生运行时错误。

短语法

短语法是一个以冒号分隔的字符串,用于设置主机 IP、主机端口和容器端口 在表单中:

[HOST:]CONTAINER[/PROTOCOL]哪里:

  • HOST[IP:](port | range)
  • CONTAINERport | range
  • PROTOCOL将端口限制为指定的协议。tcpudp值由规范定义, Compose 支持特定于平台的协议名称。

如果未设置主机 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:公开暴露的端口。它定义为字符串,可以使用语法设置为范围start-end.这意味着在设置的范围内为实际端口分配了剩余的可用端口。
  • host_ip:主机 IP 映射,未指定表示所有网络接口 (0.0.0.0).
  • protocol:端口协议 (tcpudp).默认为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

在 Docker Compose 版本 2.30.0 中引入

post_start定义在容器启动后运行的生命周期钩子序列。无法保证命令运行的确切时间。

  • command:指定容器启动后要运行的命令。此属性是必需的,您可以选择使用 shell 表单或 exec 表单。
  • user:运行命令的用户。如果未设置,则使用与主服务命令相同的用户运行该命令。
  • privileged:让post_start命令运行。
  • working_dir:运行命令的工作目录。如果未设置,它将在与 main service 命令相同的工作目录中运行。
  • environment:专门为post_start命令。虽然该命令继承了为服务的 main 命令定义的环境变量,但此部分允许您添加新变量或覆盖现有变量。
services:
  test:
    post_start:
      - command: ./do_something_on_startup.sh
        user: root
        privileged: true
        environment:
          - FOO=BAR

有关更多信息,请参阅使用生命周期挂钩

pre_stop

在 Docker Compose 版本 2.30.0 中引入

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指定要用于服务容器的运行时。

例如runtime可以是 OCI 运行时规范的实施名称,例如“runc”。

web:
  image: busybox:latest
  command: true
  runtime: runc

默认值为runc.要使用其他运行时,请参阅替代运行时

规模

scale指定要为此服务部署的默认容器数。 当两者都设置好时,scale必须与replicas属性

秘密

secretsattribute 按服务授予对 secrets 顶级元素定义的敏感数据的访问权限。可以向服务授予对多个密钥的访问权限。

支持两种不同的语法变体;短语法和长语法。密钥的 long 和 short 语法可以在同一 Compose 文件中使用。

如果密钥在平台上不存在或未在secrets顶级部分的 Compose 文件。

在顶级中定义密钥secrets不得暗示授予对它的任何服务访问权限。 此类授权必须在服务规范中作为 secrets 服务元素显式指定。

短语法

短语法变体仅指定密钥名称。这将授予 容器访问密钥并将其作为只读挂载到/run/secrets/<secret_name>在容器内。源名称和目标挂载点均已设置 添加到密钥名称。

以下示例使用 short 语法向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如果未指定。
  • uidgid:拥有其中文件的数字 UID 或 GID/run/secrets/在服务的任务容器中。默认值为 USER running container。
  • mode:要挂载的文件的权限/run/secrets/在服务的任务容器中,采用八进制表示法。 默认值为全局可读权限(模式0444). 如果设置了 writable bit,则必须忽略该 writable bit 。可以设置可执行位。

以下示例将server-certificatesecret 文件设置为server.cert在容器中,将 mode 设置为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配置共享内存的大小 (/dev/shm分区)。 它被指定为字节值

stdin_open

stdin_open将服务的容器配置为使用分配的 stdin 运行。这与使用-i旗。有关详细信息,请参阅 使 STDIN 保持打开状态。

支持的值包括truefalse.

stop_grace_period

stop_grace_period指定 Compose 在尝试停止容器时必须等待多长时间(如果未停止容器) handle SIGTERM (或已指定的任何停止信号stop_signal),然后再发送 SIGKILL。它被指定 作为持续时间

    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定义要在容器中设置的内核参数。sysctls可以使用 array 或 map。

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 运行。这与使用-t--tty旗。有关详细信息,请参阅分配伪 TTY

支持的值包括truefalse.

ulimits

ulimits覆盖容器的默认 uLimit。它被指定为单个限制的整数 或作为软/硬限制的映射。

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

用户

user覆盖用于运行容器进程的用户。默认值由镜像(即 DockerfileUSER).如果未设置,则root.

userns_mode

userns_mode设置服务的用户命名空间。支持的值特定于平台,可能取决于 在平台配置上。

userns_mode: "host"

UTS

在 Docker Compose 版本 2.15.1 中引入

uts配置服务容器的 UTS 命名空间模式集。未指定时 如果支持,则由运行时决定分配 UTS 命名空间。可用值为:

  • 'host':导致容器使用与主机相同的 UTS 命名空间。
    uts: "host"

volumes属性定义服务容器可访问的挂载主机路径或命名卷。您可以使用volumes定义多种类型的挂载;volume,bind,tmpfsnpipe.

如果挂载是主机路径,并且仅由单个服务使用,则可以将其声明为服务的一部分 定义。要跨多个服务重用卷,请创建一个名为 volume 必须在volumestop-level 元素。

以下示例显示了一个命名卷 (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,npipecluster
  • source:挂载的源、绑定挂载在主机上的路径或 在顶级volumes钥匙.不适用于 tmpfs 挂载。
  • target:容器中挂载卷的路径。
  • read_only:标记以将卷设置为只读。
  • bind:用于配置其他绑定选项:
    • propagation:用于绑定的传播模式。
    • create_host_path:如果不存在任何内容,则在 host 上的源路径处创建一个目录。 如果路径中存在任何内容,则 Compose 不会执行任何作。这由简短的语法自动暗示 为了向后兼容docker-compose遗产。
    • selinux:SELinux 重新标记选项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 featuresManage Synchronized file shares with Compose

volumes_from

volumes_from挂载来自其他服务或容器的所有卷。您可以选择指定 只读访问ro或读写rw.如果未指定访问级别,则使用读写访问权限。

您还可以使用container:前缀。

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

working_dir

working_dir覆盖由镜像指定的容器工作目录,例如 Dockerfile 的WORKDIR.