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

Is it possible to set global settings for services in a docker compose file?

提问人:IMTheNachoMan 提问时间:12/31/2020 最后编辑:ZeitounatorIMTheNachoMan 更新时间:1/1/2021 访问量:1314

问:

是否可以在 Docker 复合文件中为服务指定全局设置?

例如,以以下 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

我不想对每项服务都有,并希望将其应用于所有服务。我知道我可以在命令行中传递它,但我希望从 Docker 复合文件中执行此操作。env_file: /path/to/env/filedocker-compose

docker-compose

评论

0赞 Eulodos 12/31/2020
如果您将 docker-compose 文件保存在同一目录中,我相信您可以利用文档中所述的事实 另请查看有关此主题的 github 问题By default, the docker-compose command will look for a file named .env in the directory you run the command.
0赞 IMTheNachoMan 12/31/2020
是的;意识到这一点。我的例子是一个样本。我想用任何/其他设置来做到这一点。env_file

答:

4赞 timsmelik 12/31/2020 #1

尝试使用扩展作为片段

通过对扩展字段的支持,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
9赞 Zeitounator 12/31/2020 #2

尽管 @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

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

评论

0赞 IMTheNachoMan 1/2/2021
谢谢!这也很好用。我会玩弄两者,看看哪个更适合我的需求。