我正在整理一个docker-compose文件。我想重复使用重复的部分。例如,每个容器重新使用相同的deploy
配置。我试着为它制作一个模板:
...
redis:
image: redis
ports:
- 6379:6379
deploy: deploy_template
volumes:
- /srv/redis/data:/data
deploy_template:
restart_policy:
condition: on-failure
delay: 5s
max_attempts: 10
window: 120s
然而这不起作用。有没有办法做到这一点?
答案 0 :(得分:1)
您可以有效地使用YAML锚点和别名设施:
version: '2'
dummy: &deploy_template
restart_policy:
condition: on-failure
delay: 5s
max_attempts: 10
window: 120s
services:
redis:
image: redis
ports:
- 6379:6379
deploy: *deploy_template
volumes:
- /srv/redis/data:/data
将被解析为您已指定:
version: '2'
dummy:
restart_policy:
condition: on-failure
delay: 5s
max_attempts: 10
window: 120s
services:
redis:
image: redis
ports:
- 6379:6379
deploy:
restart_policy:
condition: on-failure
delay: 5s
max_attempts: 10
window: 120s
volumes:
- /srv/redis/data:/data
您可以为单个*deploy_template
锚点设置多个&deploy_template
值。
然而问题是dummy
密钥及其值将跳转docker-compose
,至少在版本2中没有放置此信息的地方。
因此,我使用ruamel.dcw
(我是该软件包的作者)预处理我的docker-compose
文件,该文件允许user-data
顶级密钥不会出现在输出中你可以在哪里放置这样的锚信息。从:
version: '2'
user-data:
author: dthree <calvin@hobbes.org>
description: redis container
env-defaults:
NAME: redis # default values if not specified in the environment
PORT: 6379
dummy:
- &deploy_template
restart_policy:
condition: on-failure
delay: 5s
max_attempts: 10
window: 120s
- &some_other_template:
x: null
services:
redis:
image: ${NAME}
ports:
- "${PORT}:${PORT}"
deploy: *deploy_template
volumes:
- /srv/${NAME}/data:/data
这将扩展为:
version: '2'
services:
redis:
image: ${NAME}
ports:
- ${PORT}:${PORT}
deploy:
restart_policy:
condition: on-failure
delay: 5s
max_attempts: 10
window: 120s
volumes:
- /srv/${NAME}/data:/data
在交给docker-compose
之前(使用-f
选项)。 env-defaults
“部分中尚未在执行预处理器的环境中设置的任何变量将被赋予其默认值,从而可以轻松覆盖它们。
顺便说一句:你应该小心:
- 6379:6379
因为如果端口号低于60,则docker-compose使用的旧YAML解析器将该标量解释为sexagesimal。我倾向于总是引用这些值,特别是在使用env时。变量