解决方法到docker运行“–env-file”提供的文件未按预期进行评估

前端之家收集整理的这篇文章主要介绍了解决方法到docker运行“–env-file”提供的文件未按预期进行评估前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我目前运行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
>然后,我为容器内部的每个环境变量调用多个-e的docker run.在这种情况下,我会称之为:docker run -e MONGODB_URL = $MONGODB_URL ubuntu bash
>然后我希望容器内的MONGODB_URL等于mongodb:// localhost:27017 / development.请注意,实际上,echo localhost被一个curl替换为amazon的api,用于实际的PRIVATE_IP.

当您开始拥有需要为容器提供的越来越多的环境变量时,这会变得有点笨拙.这里有一个很好的观点,即环境变量需要在运行时解析,例如调用curl或引用其他env变量.

我希望使用的解决方案是:

>使用–env-file参数调用docker run,例如:

# 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个环境变量.

这是我遇到问题的地方,即容器内没有任何变量按预期解析.相反,我最终得到:

> PRIVATE_IP =`echo localhost`
> MONGODB_HOST =“$PRIVATE_IP”
> MONGODB_URL =“mongodb:// $MONGODB_HOST:27017 / development”

我可以通过以下方式来规避这个问题:

>采购main.env文件.
>创建一个只包含我想要的变量名称文件(意味着docker会在环境中搜索它们).
>然后调用docker运行此文件作为–env-file的参数.这可行,但意味着我需要维护两个文件而不是一个,并且真的不会对当前情况有很大改善.

我更喜欢的是让变量按预期解析.

我能找到的最接近我的问题是:
12factor config approach with Docker

–env和–env-file都设置变量,而不是替换嵌套变量.

Solomon Hykes讨论了在运行时配置容器以及各种方法.适合您的方法是将main.env从主机批量安装到容器中并进行采购.

原文链接:https://www.f2er.com/docker/436698.html

猜你在找的Docker相关文章