是否可以在 docker compose 文件中设置服务的全局设置?

IMT*_*Man 5 docker docker-compose

是否可以在 Docker compose 文件中指定服务的全局设置?

例如,采用以下 Docker Compose 文件:

version: "3.9"

services:
  test1:
    env_file: /path/to/env/file
    image: test
    container_name: test1
    ports:
      - "1234:22"
    networks:
      - dmz
    restart: always
  test2:
    env_file: /path/to/env/file
    image: test
    container_name: test2
    ports:
      - "2345:22"
    networks:
      - trust
    restart: always

networks:
  dmz:
    driver: bridge
  trust:
    driver: bridge
Run Code Online (Sandbox Code Playgroud)

我不想对env_file: /path/to/env/file每项服务都适用,而是希望使其适用于所有服务。我知道我可以在命令行中传递它docker-compose,但我希望从 Docker 撰写文件中执行此操作。

Zei*_*tor 9

尽管 @timsmelik 的答案指出了正确的方向,并展示了如何使用带有标量值的 yaml 锚点和别名,但您可能可以利用合并键 yaml 功能来为您的服务设置可覆盖的默认值。

这是一个例子来说明

version: "3.9"

x-service_defaults: &service_defaults
  env_file: /path/to/env/file
  image: test
  restart: always

services:
  test1:
    << : *service_defaults
    container_name: test1
    ports:
      - "1234:22"
    networks:
      - dmz
  test2:
    << : *service_defaults
    container_name: test2
    ports:
      - "2345:22"
    networks:
      - trust
  test3:
    << : *service_defaults
    env_file: /some/override/env/file
    container_name: test3
    volumes:
      - /some/bind/dir:/whatever/target

networks:
  dmz:
    driver: bridge
  trust:
    driver: bridge
Run Code Online (Sandbox Code Playgroud)

您可以在以下博客文章中找到适用于 docker-compose 文件的所有可能的 yaml 锚点/别名用法的非常全面的解释


小智 4

尝试使用扩展作为片段

通过扩展字段的支持,Compose 文件可以编写如下,以提高重用片段的可读性:

这是 README.md 中的示例:


x-logging: &default-logging
  options:
    max-size: "12m"
    max-file: "5"
  driver: json-file

services:
  frontend:
    image: awesome/webapp
    logging: *default-logging
  backend:
    image: awesome/database
    logging: *default-logging
Run Code Online (Sandbox Code Playgroud)