docker - docker-compose 使用列表、映射或数组值替换/插值
问题描述
如何对docker-compose.yml
文件中的列表、映射或数组值使用变量替换。
例如:
graylog:
image: graylog2/server2
extra_hosts: ${EXTRA_HOSTS}
和
export EXTRA_HOSTS="['host1:10.10.10.1','host2:10.10.10.2']"
给出以下错误: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} ]
然后,定义不带括号或花括号的环境变量。
例如:
export EXTRA_HOSTS="'host1:10.10.10.1','host2:10.10.10.2'"
然后利用envsubst
envsubst '${EXTRA_HOSTS}' < docker-compose.yml > docker-compose.subst.yml && docker stack deploy -c docker-compose.subst.yaml foobar
请注意,您传递'${EXTRA_HOSTS}'
到envsubst
. 这告诉它只替换这个环境变量。这确保它不会意外替换使用 Docker 撰写文件的变量替换语法的其他变量。
推荐阅读
- excel - 是否有将逗号分隔列表分隔为值列的 Power Query 函数?
- python - awk的python替代品?
- javascript - 我的 sendtowhatsapp.js 不执行我的表单
- arrays - 使用一个数组值访问另一个数组元素 Matlab
- c++ - 强制转换为 bool 是检查是否存在与键匹配的 unordered_map 值的有效方法吗?C++
- python - 给定一个多嵌套的 Python 函数,如何在一些任意嵌套的函数中一直访问闭包变量?
- leaflet - Leaflet - geoJSON multipolygon - bindPopup 与 bindTooltip
- processor - 现代四核笔记本电脑是 i7-7700 英特尔处理器、SISD 类型还是 SIMD 类型或 MIMD 类型?
- javascript - 肝线summernote没有触发文本区域的变化
- linux - 在不同的终端选项卡中运行由一个 bash startscript 启动的不同 bash 脚本