加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 03:52:58 所属栏目:安全 来源:网络整理
导读:我目前运行docker容器的设置如下: 我有一个main.env文件: # Mainexport PRIVATE_IP=`echo localhost`export MONGODB_HOST="$PRIVATE_IP"export MONGODB_URL="mongodb://$MONGODB_HOST:27017/development" 在我的服务文件(upstart)中,我获取此文件. /path

我目前运行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从主机批量安装到容器中并进行采购.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读