我正在尝试使用docker compose文件创建一个swarm堆栈。 是否可以指定我的服务是全局的,并且应该在每个节点上运行一个实例? 我当前的Docker撰写文件: ...
提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
我有这样的文件:
service1:
//some stuff
environment:
- "PROP=some_common_value"
service2:
//some stuff
environment:
- "PROP=some_common_value"
service2:
//some stuff
environment:
- "PROP=some_common_value"
我想设置具有相同值的属性。
我现在可以复制那个值。 看起来很糟糕。
在docker中有没有办法创建交叉服务常量?
有几种选择。 如果使用.env
docker-compose
而不是.env
docker stack deploy
,则可以使用.env
文件来设置变量。 或者使用docker-compose或swarm模式,您可以在shell中设置环境变量(通常是用于部署应用程序的shell脚本)。 在yaml内部,您将使用环境变量,如:
service1:
environment:
- PROP
service2:
environment:
- PROP
service2:
environment:
- PROP
或明确使用变量,如:
service1:
environment:
- PROP=${PROP}
service2:
environment:
- PROP=${PROP}
service3:
environment:
- PROP=${PROP}
如果您有.env
文件并且想要执行.env
docker stack deploy
,则可以使用以下任一方法编写处理:
# option 1, leaves vars set in shell
set -a && . .env && set +a && docker stack deploy -c compose.yml stack_name
# option 2, only sets vars for single command
env $(cat .env | xargs) docker stack deploy -c compose.yml stack_name
在上面的每一个中, .env
只是你可以在shell中设置的变量:
PROP=some_common_value
下一个选项是使用锚点和别名的Yaml语法。 这从Yaml文件的一个部分复制到另一个部分(为了支持在service3中合并,我切换到键/值而不是数组语法):
service1:
environment: &common_env
PROP: "some_common_value"
service2:
environment: *common_env
service3:
environment:
<<: *common_env
PROP3: "unique value"
为了允许每个服务具有唯一值,Docker在最新版本的compose语法中添加了扩展字段 。 这使您可以定义与任何服务定义分开的锚点,并将其合并到每个服务中,每个服务都有自己的唯一值,例如:
version: '3.4'
x-common-env: &common_env
PROP: "some_common_value"
services:
service1:
environment:
<<: *common_env
PROP1: "unique value 1"
service2:
environment:
<<: *common_env
PROP2: "unique value 2"
service3:
environment:
<<: *common_env
PROP3: "unique value 3"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.