Nat*_*lor 3 docker docker-compose
使用 Docker Compose 3.4 的扩展字段功能,是否可以将数组形式(或任何数组)的一组通用环境变量与特定于服务的声明组合起来?该文档不清楚是否支持这一点。
调用docker-compose up以下 YAML 会导致restart、entrypoint和volumes被设置my-service,但它似乎将environment来自扩展字段的声明替换为 中存在的声明my-service。我希望他们合并。
version: '3.4'
x-service-config: &service-config
restart: "on-failure"
entrypoint: ""
volumes:
- "~/.aws:/home/serviceuser/.aws"
environment:
- "CommonVar1=foo"
- "CommonVar2=bar"
services:
my-service:
<<: *service-config
image: my-service:latest
environment:
- "ServiceVar1=baz"
Run Code Online (Sandbox Code Playgroud)
合并仅发生在顶层。如果要合并较低级别的密钥,请使用单独的模板。
我使用以下撰写文件重新创建了该问题。它使用公共映像并运行env命令,因此人们可以轻松地执行操作,而无需任何外部依赖项。
这是一个docker-compose.yml独立工作的,显示了正在合并的“环境”:
version: '3.4'
x-service-config: &ref
restart: 'on-failure'
environment: &env
'foo': 'bar'
'bing': 'baz'
services:
bop:
image: 'alpine'
command: 'env'
<<: *ref
Run Code Online (Sandbox Code Playgroud)
这是输出,显示来自锚点的“环境”键正在被复制:
$ docker-compose up
Creating network "merge_default" with the default driver
Creating merge_bop_1 ... done
Attaching to merge_bop_1
bop_1 | PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
bop_1 | HOSTNAME=d4122a655e1d
bop_1 | foo=bar
bop_1 | bing=baz
bop_1 | HOME=/root
merge_bop_1 exited with code 0
Run Code Online (Sandbox Code Playgroud)
这是相同的撰写文件,但在“bop”服务定义中覆盖了“environment”:
version: '3.4'
x-service-config: &ref
restart: 'on-failure'
environment: &env
'foo': 'bar'
'bing': 'baz'
services:
bop:
image: 'alpine'
command: 'env'
environment:
'bat': 'far'
<<: *ref
Run Code Online (Sandbox Code Playgroud)
以及相应的输出,仅 bat=far显示而不显示其他变量:
$ docker-compose up
Creating network "merge_default" with the default driver
Creating merge_bop_1 ... done
Attaching to merge_bop_1
bop_1 | PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
bop_1 | HOSTNAME=efe76cb7e09d
bop_1 | bat=far
bop_1 | HOME=/root
merge_bop_1 exited with code 0
Run Code Online (Sandbox Code Playgroud)
解决方法是将其分成两个模板/锚点,如下所示:
version: '3.4'
x-service-config: &ref
restart: 'on-failure'
x-environment-config: &env
'foo': 'bar'
'bing': 'baz'
services:
bop:
image: 'alpine'
command: 'env'
environment:
<<: *env
'true': 'false'
<<: *ref
Run Code Online (Sandbox Code Playgroud)
这是显示合并值的输出:
$ docker-compose up
Creating network "merge_default" with the default driver
Creating merge_bop_1 ... done
Attaching to merge_bop_1
bop_1 | PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
bop_1 | HOSTNAME=617f90a94a7d
bop_1 | foo=bar
bop_1 | bing=baz
bop_1 | true=false
bop_1 | HOME=/root
merge_bop_1 exited with code 0
Run Code Online (Sandbox Code Playgroud)
这是可行的,因为您正在对要合并的两个键进行合并。
| 归档时间: |
|
| 查看次数: |
3344 次 |
| 最近记录: |