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。 注意:有多个版本的Compose文件格式 - 版本1(旧版格式,不支持卷或网络)和版本2以及2.1(最新的)。 有关更多信息,请参阅版[Versioning]部分。 此部分包含服务定义支持的所有配置选项的列表。 1.1 build 在构建时应用的配置选项。 build可以指定为包含构建上下文路径,也可以根据上下文选择 dockerfile 和 args 指定的路径对象。 build: ./dir build: context: ./dir dockerfile: Dockerfile-alternate args: buildno: 1 如果指定image字段来build,则Compose使用image中指定的webapp和tag(可选)命名构建的image: 这里从./dir构建了一个镜像名为webapp,并打上标记为tag的镜像。 注意:在版本1文件格式中,build有两种不同的方法: (1)context 版本2及以上使用,版本1只使用build。 它的值可以是Dockerfile的路径,或者是指向git仓库的url。 当提供的值是相对路径时,它被解释Compose文件位置的相对路径。 目录里的信息会被当做构建内容 发送到Docker守护进程。 Compose将使用生成的名字build和tag它,然后使用该image。 build: context: ./dir (2)dockerfile 备用Dockerfile。 撰写将使用一个备用文件来构建。 还必须指定构建路径。 build: context: . dockerfile: Dockerfile-alternate 注意:在版本1文件格式中,dockerfile有两种不同的方法: (3)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的环境中的值。 注意:YAML布尔值(true,false,yes,no,on,off)必须用引号引起来,以便解析器将其解释为字符串。 1.2 cap_add, cap_drop 添加或删除容器功能。 有关完整列表,请参阅man 7功能。 cap_add: - ALL cap_drop: - NET_ADMIN - SYS_ADMIN 1.3 command 覆盖默认命令 该命令也可以是一个list,在方式类似于dockerfile: command: [bundle, exec, thin, -p, 3000] 1.4 cgroup_parent 为容器指定可选的父cgroup。 1.5 container_name 指定自定义容器名称,而不是生成的默认名称。 由于Docker容器名称必须是唯一的,因此如果您指定了自定义名称,则无法将服务扩展到1个容器之外。 尝试这样做会导致错误。 1.6 devices 设备映射列表。 使用与--device docker client create选项相同的格式。 1.7 depends_on Express之间的依赖关系,有两个效果: 列子: 注意:在启动web之前,depends_on不会等待db和redis“就绪”,直到它们被启动。 如果您需要等待服务准备就绪,请参阅控制启动顺序了解有关此问题的更多信息以及解决问题的策略。 1.8 dns 自定义DNS服务器。可以是单个值或列表。 dns: 8.8.8.8 dns: - 8.8.8.8 - 9.9.9.9 1.9 dns_search 自定义DNS搜索域。可以是单个值或列表。 1.10 tmpfs 在容器中安装临时文件系统。可以是单个值或列表。 tmpfs: /run tmpfs: - /run - /tmp 1.11 entrypoint 覆盖默认的entrypoint。 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 1.12 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格式。 以#开头的行(即注释)将被忽略,空行也是如此。 注意:如果您的service指定了build选项,则在build过程中将不会自动显示环境文件中定义的变量。 使用build的args子选项来定义构建时环境变量。 1.13 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子选项来定义构建时环境变量。 1.14 expose 公开端口,而不将其发布到主机 - 它们只能访问链接服务。只能指定内部端口。 1.15 extends 在当前文件或另一个文件中扩展另一个服务,可选地覆盖配置。 您可以将extends与其他配置字段一起使用。 extends值必须是使用必需的server和可选file字段定义的字典。 extends: file: common.yml service: webapp server正在扩展的服务的名称,例如web或数据库。 该文件是定义该服务的Compose配置文件的位置。 如果省略file Compose在当前文件中查找服务配置。 file值可以是绝对路径或相对路径。 如果指定相对路径,则Compose将其视为相对于当前文件的位置。 您可以扩展本身扩展其他服务。 您可以无限期地延长。 Compose不支持循环引用,如果遇到一个,docker-compose会返回一个错误。 有关扩展的更多信息,请参阅扩展文档。 1.16 external_links 链接到在docker-compose.yml外部启动的容器,甚至在Compose之外,特别是对于提供共享或公共服务的容器。 external_links在指定容器名称和链接别名(CONTAINER:ALIAS)时遵循类似于links的语义。 external_links: - redis_1 - project_db_1:mysql - project_db_1:postgresql 注意:如果您使用的是版本2文件格式,则外部创建的容器必须连接到至少一个与链接到它们的服务相同的网络。 1.17 extra_hosts 添加主机名映射。使用与docker client --add-host参数相同的值。 extra_hosts: - "somehost:162.242.195.82" - "otherhost:50.31.209.229" 具有ip地址和主机名的条目将在此服务的容器中的/etc/hosts中创建,例如: 1.18 group_add 指定容器中的用户将成为其成员的其他组(按名称或号码)。 组必须存在于要添加的容器和主机系统中。 这是有用的一个例子是当多个容器(作为不同的用户运行)需要在主机系统上读取或写入相同的文件。 该文件可以由所有容器共享的组拥有,并在group_add中指定。 有关更多详细信息,请参阅Docker文档。 version: '2' services: image: alpine group_add: - mail 在创建的容器中运行id将显示用户属于mail组,如果未使用group_add,则不会是这种情况。 1.19 image 指定要从中启动容器的映像。可以是存储库/标记或部分图像ID。 如果image不存在,Compose会尝试拉取它,除非你也指定了build,在这种情况下,它使用指定的选项构建它,并用指定的标签标记它。 注意:在版本1文件格式中,不允许与image一起使用build。 尝试这样做会导致错误。 1.20 isolation Added in version 2.1 file format. 指定容器的隔离技术。在Linux上,唯一支持的值为default。 在Windows上,可接受的值为default,process和hyperv。 有关详细信息,请参阅Docker Engine文档。 1.21 labels 使用Docker labels向容器添加元数据。 您可以使用list或mapping。 建议您使用reverse-DNS符号来防止您的标签与其他软件使用的标签冲突。 1.22 links 链接到另一个服务中的容器。请指定服务名称和链接别名(SERVICE:ALIAS),或仅指定服务名称。 web: links: - db - db:database - redis 如果未指定别名,则可以在与别名相同的主机名或服务名称处访问链接服务的容器。 链接也以与depends_on相同的方式表示服务之间的依赖关系,因此它们确定服务启动的顺序。 注意:如果您定义链接和networks,则具有它们之间的链接的服务必须共享至少一个公共网络以便进行 1.23 logging Version 2 file format and up. In version 1, use log_driver and log_opt. 记录服务的配置。 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选项的示例: 1.24 log_driver Version 1 file format only. In version 2, use logging. 指定日志驱动程序。默认值为json-file。 log_driver: syslog 1.25 log_opt Version 1 file format only. In version 2, use logging. 将记录选项指定为key-value对。 syslog选项的示例: 1.26 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]" 1.27 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]" 1.28 networks Version 2 file format and up. In version 1, use net. 要加入的网络, 引用top-level networks key 下的条目。 (1)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是可达的。 (2)ipv4_address, ipv6_address 在加入网络时为此服务的容器指定静态IP地址。 顶级网络部分中的相应网络配置必须具有包含每个静态地址的子网和网关配置的ipam块。 如果需要IPv6寻址,则com.docker.network.enable_ipv6驱动程序选项必须设置为true。 (3)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 1.29 pid 将PID模式设置为主机PID模式。 这将打开容器和主机操作系统之间的PID地址空间的共享。 使用此标志启动的容器将能够访问和操作裸机机器命名空间中的其他容器,反之亦然。 1.30 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" 1.31 security_opt 覆盖每个容器的默认标签方案。 security_opt: - label:user:USER - label:role:ROLE 1.32 top_signal 设置停止容器的备用信号。 默认情况下停止使用SIGTERM。 使用stop_signal设置备用信号将导致停止发送该信号。 stop_signal: SIGUSR1 1.33 ulimits 覆盖容器的默认ulimits。 您可以将单个限制指定为整数或soft/hard限制作为映射。 1.34 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。 请注意,对于版本2文件,此驱动程序将不适用于named volumes(在使用declaring the volume时,应使用driver选项)。 对于版本1,named volumes和container volumes都将使用指定的驱动程序。 注意:如果您还指定了volume_driver,则不会执行路径扩展。 有关更多信息,请参阅docs.docker.com/engine/user…和Volume Plugins 1.35 volumes_from 从另一个服务或容器装入所有卷,可选择指定只读访问(ro)或读写(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运行对应。 注意:以下选项仅适用于版本2及更高版本:* oom_score_adj 虽然可以作为服务声明的一部分来即时声明卷,但是此部分允许您创建可以跨多个服务重用的命名卷(不依赖volumes_from),并且可以使用docker命令行轻松检索和检查 或API。 有关更多信息,请参阅docker volume子命令文档。 2.1 driver 指定应为此卷使用哪个卷驱动程序。 默认为local。 如果驱动程序不可用,Docker Engine将返回错误。 driver: foobar 2.2 driver_opts 将选项列表指定为要传递给此卷的驱动程序的key-value pairs。 这些选项是驱动程序相关的 - 请参阅驱动程序文档以获取更多信息。 可选的。 2.3 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文件中引用它的名称: 2.4 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" 顶层网络键允许您指定要创建的网络。 有关Compose使用Docker网络功能的完整说明,请参阅Networking guide。 3.1 driver 指定应为此网络使用哪个驱动程序。 默认驱动程序取决于您使用的Docker引擎是如何配置的,但在大多数情况下,它将是单个主机上的bridge和Swarm上的overlay。 如果驱动程序不可用,Docker Engine将返回错误。 driver: overlay 3.2 driver_opts 指定选项列表作为要传递给此网络驱动程序的键值对。 这些选项是driver-dependent - consult的驱动程序文档的更多信息。 可选的。 3.3 enable_ipv6 Added in version 2.1 file format. 在此网络上启用IPv6网络。 3.4 ipam 指定自定义IPAM配置。 这是一个具有多个属性的对象,每个属性都是可选的: 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" 3.5 internal Version 2 file format and up. 默认情况下,Docker还将桥接网络连接到它以提供外部连接。 如果要创建外部隔离的覆盖网络,您可以将此选项设置为true。 3.6 labels Added in version 2.1 file format. 使用Docker标签向容器添加元数据。 您可以使用数组或字典。 建议您使用反向DNS符号来防止您的标签与其他软件使用的标签冲突。 3.7 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文件中引用它的名称: 目前有三个版本的Compose文件格式: 要将项目从版本1移动到2,请参阅升级部分。 注意:如果您使用多个Compose文件或扩展服务,每个文件必须是相同的版本 - 您不能在单个项目中混合版本1和2。 根据您使用的版本,有几点不同: 4.1 Version 1 未声明版本的组合文件被视为“版本1”。 在这些文件中,所有服务都在文档的根目录处声明。 版本1由Compose到1.6.x支持。 它将在未来的Compose版本中被弃用。 版本1文件无法声明命名卷,网络或构建参数。 例: web: build: . ports: - "5000:5000" volumes: - .:/code links: - redis redis: image: redis 4.2 Version 2 使用版本2语法的撰写文件必须指示文档根目录下的版本号。 所有服务必须在服务键下声明。 Compose 1.6.0+支持版本2文件,并需要版本1.10.0+的Docker引擎。 可以在volumes键下声明命名卷,并且可以在networks关键字下声明网络。 简单示例: 一个更广泛的例子,定义卷和网络: 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 4.3 Version 2.1 升级版本2,引入仅适用于Docker Engine版本1.12.0+的新参数 引入以下附加参数: * link_local_ips * isolation * labels for volumes and networks 4.4 Upgrading 在大多数情况下,从版本1移动到2是一个非常简单的过程: 如果您使用特定的配置功能,则更复杂: * dockerfile: This now lives under the build key: net: "container:web" -> network_mode: "service:web" version: '2' services: db: image: postgres volumes: - data:/var/lib/postgresql/data volumes: data: {} 您的配置选项可以包含环境变量。 Compose使用运行docker-compose的shell环境中的变量值。 例如,假设shell包含EXTERNAL_PORT = 8000,并且您提供此配置: 当使用此配置运行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处理的环境变量。 如果您忘记并使用单个美元符号($),Compose将该值解释为环境变量并将警告您: 未设置VAR_NOT_INTERPOLATED_BY_COMPOSE。 替换空字符串。01 Service 配置参考
build: ./dir
image: webapp:tag
build: .
dockerfile: Dockerfile-alternate
args:
- buildno
- password
command: bundle exec thin -p 3000
cgroup_parent: m-executor-abcd
container_name: my-web-container
devices:
- "/dev/ttyUSB0:/dev/ttyUSB0"
version: '2'
services:
web:
build: .
depends_on:
- db
- redis
redis:
image: redis
db:
image: postgres
dns_search: example.com
dns_search:
- dc1.example.com
- dc2.example.com
entrypoint: /code/entrypoint.sh
# Set Rails/Rack environment
RACK_ENV=development
expose:
- "3000"
- "8000"
162.242.195.82 somehost
50.31.209.229 otherhost
image: redis
image: ubuntu:14.04
image: tutum/influxdb
image: example-registry.com:4000/postgresql
image: a4bc65fd
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"
logging:
driver: syslog
options:
syslog-address: "tcp://192.168.0.42:123"
driver: "syslog"
options:
syslog-address: "tcp://192.168.0.42:123"
log_opt:
syslog-address: "tcp://192.168.0.42:123"
services:
some-service:
networks:
- some-network
- other-network
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:
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
pid: "host"
ulimits:
nproc: 65535
nofile:
soft: 20000
hard: 40000
volume_driver: mydriver
volumes_from:
- service_name
- service_name:ro
- container:container_name
- container:container_name:rw
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
02 Volume configuration reference
driver_opts:
foo: "bar"
baz: 1
volumes:
data:
external:
name: actual-name-of-volume
03 Network configuration reference
driver_opts:
foo: "bar"
baz: 1
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"
networks:
outside:
external:
name: actual-name-of-network
04 Versioning
version: '2'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
redis:
image: redis
build:
context: .
dockerfile: Dockerfile-alternate
net: host -> network_mode: host
net: bridge -> network_mode: bridge
net: none -> network_mode: none
net: "container:cont-name" -> network_mode: "container:cont-name"
net: "container:abc12345" -> network_mode: "container:abc12345"
volumes:
data:
external: true
05 Variable substitution
web:
build: .
ports:
- "${EXTERNAL_PORT}:5000"
web:
build: .
command: "$VAR_NOT_INTERPOLATED_BY_COMPOSE"
原文链接:https://juejin.im/post/5d9bff8ae51d4577f3534e98