提问人:IMTheNachoMan 提问时间:12/31/2020 最后编辑:ZeitounatorIMTheNachoMan 更新时间:1/1/2021 访问量:1314
是否可以在 docker compose 文件中为服务设置全局设置?
Is it possible to set global settings for services in a docker compose file?
问:
是否可以在 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/file
docker-compose
答:
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
谢谢!这也很好用。我会玩弄两者,看看哪个更适合我的需求。
评论
By default, the docker-compose command will look for a file named .env in the directory you run the command.
env_file