dus*_*ltz 4 docker docker-compose
如何对docker-compose.yml文件中的列表、映射或数组值使用变量替换。
例如:
graylog:
image: graylog2/server2
extra_hosts: ${EXTRA_HOSTS}
Run Code Online (Sandbox Code Playgroud)
和
export EXTRA_HOSTS="['host1:10.10.10.1','host2:10.10.10.2']"
Run Code Online (Sandbox Code Playgroud)
给出以下错误:graylog.extra_hosts must be a mapping
我尝试过上述的不同变体,但没有成功。
我确实看到这里有一个关于此的未决问题:https ://github.com/docker/compose/issues/4249
难道这就是不可能吗?有谁知道解决方法?
至少截至目前(2018年6月),Docker仍然不支持这一点。我能够利用 解决这个问题envsubst。
envsubst是 的一部分gettext,并且它只能用于替换您告诉它的环境变量。
调整该docker-compose.yml值,使其看起来像数组或映射(方括号或大括号),但将该值设置为环境变量。
例如
graylog:
image: graylog2/server2
extra_hosts: [ ${EXTRA_HOSTS} ]
Run Code Online (Sandbox Code Playgroud)
然后,定义不带方括号或大括号的环境变量。
例如:
export EXTRA_HOSTS="'host1:10.10.10.1','host2:10.10.10.2'"
Run Code Online (Sandbox Code Playgroud)
然后利用envsubst
envsubst '${EXTRA_HOSTS}' < docker-compose.yml > docker-compose.subst.yml && docker stack deploy -c docker-compose.subst.yaml foobar
Run Code Online (Sandbox Code Playgroud)
请注意,您传递'${EXTRA_HOSTS}'到envsubst. 这告诉它只替换这个环境变量。这可确保它不会意外替换使用 Docker 撰写文件的变量替换语法的其他变量。
| 归档时间: |
|
| 查看次数: |
7072 次 |
| 最近记录: |