我当前运行 docker 容器的设置如下:
- 我有一个
main.env
file:
# Main
export PRIVATE_IP=\`echo localhost\`
export MONGODB_HOST="$PRIVATE_IP"
export MONGODB_URL="mongodb://$MONGODB_HOST:27017/development"
在我的服务文件(暴发户)中,我获取了这个文件. /path/to/main.env
然后我打电话docker run
与多个-e
对于我想要在容器内的每个环境变量。在这种情况下,我会这样称呼:docker run -e MONGODB_URL=$MONGODB_URL ubuntu bash
然后我会期望MONGODB_URL
容器内部等于mongodb://localhost:27017/development
。请注意,现实中echo localhost
被替换为curl
到亚马逊的 api 获取实际的PRIVATE_IP
.
当您开始需要为容器提供越来越多的环境变量时,这会变得有点笨拙。这里有一个很好看的点就是环境变量需要解析在运行时,例如致电curl
或通过引用其他环境变量。
我希望使用的解决方案是:
- calling
docker run
与--env-file
参数比如这样:
# Main
PRIVATE_IP=\`echo localhost\`
MONGODB_HOST="$PRIVATE_IP"
MONGODB_URL="mongodb://$MONGODB_HOST:27017/development"
- Then my
docker run
命令将大大缩短为docker run --env-file=/path/to/main.env ubuntu bash
(请记住,通常我有大约 12-15 个环境变量。
这就是我遇到问题的地方,即容器内没有任何变量按预期解析。相反,我最终得到:
- PRIVATE_IP=`回显本地主机`
- MONGODB_HOST="$PRIVATE_IP"
- MONGODB_URL="mongodb://$MONGODB_HOST:27017/development"
我可以通过执行以下操作来规避此问题:
- 采购
main.env
file.
- 创建一个仅包含我想要的变量名称的文件(这意味着 docker 将在环境中搜索它们)。
- 然后打电话
docker run
将此文件作为参数--env-file
。这可行,但意味着我需要维护两个文件而不是一个,而且对当前情况来说确实不会有太大的改善。
我更希望让变量按预期解析。
我能找到的最接近我的问题是:Docker 的 12factor 配置方法 https://stackoverflow.com/questions/25177402/12factor-config-approach-with-docker
所以我也遇到了这个问题,为我解决的是我指定了 --env-file 或 -e KEY=VALbefore容器镜像的名称。例如
Broken:
docker run my-image --env-file .env
Fixed:
docker run --env-file .env my-image
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)