我目前运行docker容器的设置如下:
main.env档案:# Main export PRIVATE_IP=\`echo localhost\` export MONGODB_HOST="$PRIVATE_IP" export MONGODB_URL="mongodb://$MONGODB_HOST:27017/development"
在我的服务文件(upstart)中,我获取此文件 . /path/to/main.env
然后我docker run使用multiple -e来调用容器内部的每个环境变量.在这种情况下,我会称之为:docker run -e MONGODB_URL=$MONGODB_URL ubuntu bash
然后我会期望MONGODB_URL容器内部相等mongodb://localhost:27017/development.请注意,实际上echo localhost由curl亚马逊的api 替换为实际的PRIVATE_IP.
当您开始拥有需要为容器提供的越来越多的环境变量时,这会变得有点笨拙.这里有一个很好的观点,即环境变量需要在运行时解析,例如调用curl或引用其他env变量.
我希望使用的解决方案是:
docker run使用如下--env-file参数调用:# Main PRIVATE_IP=\`echo localhost\` MONGODB_HOST="$PRIVATE_IP" MONGODB_URL="mongodb://$MONGODB_HOST:27017/development"
docker run命令将被大大缩短docker run --env-file=/path/to/main.env ubuntu bash(请记住,我通常有大约12-15个环境变量.这就是我遇到问题的地方,即容器内没有任何变量按预期解析.相反,我最终得到:
我可以通过执行以下操作来规避这一点:
main.env文件.docker run使用此文件作为参数调用--env-file.这可行,但意味着我需要维护两个文件而不是一个,并且实际上不会对当前情况有所改善.我更喜欢的是让变量按预期解析.
我能找到的最接近我的问题是: 使用Docker进行12factor配置
小智 8
所以我也遇到了这个问题,为我解决的是我在容器映像名称之前指定了 --env-file 或 -e KEY=VAL 。例如
破碎的:
docker run my-image --env-file .env
Run Code Online (Sandbox Code Playgroud)
固定的:
docker run --env-file .env my-image
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)example: test=123 val=Guru
docker run -it --env-file=.env bash
echo $test (应该打印 123)
和设置变量均按原样设置--env,--env-file并且不会替换嵌套变量。
Solomon Hykes讨论了在运行时配置容器以及各种方法。应该对您有用的方法是将 main.env 从主机批量安装到容器中并获取它。
| 归档时间: |
|
| 查看次数: |
18073 次 |
| 最近记录: |