docker run的变通方法--环境文件;提供的文件未按预期进行评估
我当前运行docker容器的设置如下:docker run的变通方法--环境文件;提供的文件未按预期进行评估,docker,Docker,我当前运行docker容器的设置如下: 我有一个main.env文件: 然后我的docker-run命令将显著缩短为docker-run--env-file=/path/to/main.env-ubuntu-bash(请记住,通常我有12-15个环境变量 这就是我遇到的问题所在,即在容器中没有一个变量按预期解决。相反,我最终得到: PRIVATE_IP=`echo localhost` MONGODB_主机=“$PRIVATE_IP” MONGODB_URL=“MONGODB://$MONGO
main.env
文件:docker-run
命令将显著缩短为docker-run--env-file=/path/to/main.env-ubuntu-bash
(请记住,通常我有12-15个环境变量- PRIVATE_IP=`echo localhost`
- MONGODB_主机=“$PRIVATE_IP”
- MONGODB_URL=“MONGODB://$MONGODB_主机:27017/development”
export PRIVATE_IP=\`echo localhost\`
export MONGODB_HOST="$PRIVATE_IP"
export MONGODB_URL="mongodb://$MONGODB_HOST:27017/development"
command
main.env
文件docker run
,将此文件作为--env file
的参数。这会起作用,但意味着我需要维护两个文件,而不是一个文件,并且对当前情况的改善不会太大讨论了在运行时配置容器以及各种方法。对您来说,最有效的方法是将main.env从主机批量装载到容器中,并将其寻源。创建一个只不过是键/值对的env文件可以在普通shell命令中处理并附加到环境中。查看bash-a pragma.您可以做的是创建一个启动脚本,该脚本可以在容器启动时运行
From ...
...
CMD command
换成
From ...
...
ADD start.sh start.sh
CMD ["start.sh"]
在start.sh脚本中,执行以下操作:
export PRIVATE_IP=\`echo localhost\`
export MONGODB_HOST="$PRIVATE_IP"
export MONGODB_URL="mongodb://$MONGODB_HOST:27017/development"
command
- 创建一个.env文件
- 执行命令
- 在bash内部,使用
我遇到了一个与此非常类似的问题。如果我将env文件的内容作为单独的-e指令传递给docker,那么一切都会正常运行。但是,如果我使用--env file传递文件,则容器无法正常运行
原来文件中有一些虚假的行尾(我从windows复制并在Ubuntu中运行docker)。当我删除它们时,容器与--env或--env文件运行相同。在单独的运行脚本
run.sh
文件中使用docker run
时,我遇到了这个问题,因为我希望凭据ADMIN\u USER
和ADMIN\u PASSWORD
可以在容器中访问,但不会显示在命令中
按照其他答案并使用--env
或--env file
传递一个单独的环境文件对我的图像不起作用(尽管它适用于)。有效的方法是创建一个单独的环境文件
# env.list
ADMIN_USER='username'
ADMIN_PASSWORD='password'
…并在启动容器时在运行脚本中对其进行寻源:
# run.sh
source env.list
docker run -d \
-e ADMIN_USER=$INFLUXDB_ADMIN_USER \
-e ADMIN_PASSWORD=$INFLUXDB_ADMIN_PASSWORD \
image_repo/name:tag
我注意到您的
main.env
正在将VAR设置为文字字符串。您是否尝试删除“
&”
?您可以在此处阅读有关Docker如何处理文字的更多信息:根据env文件语法,应该是简单的key=value项。不确定在您的情况下如何处理“导出”。“源代码”“这意味着您需要bash或其他shell,这意味着容器中有大量的垃圾,而在我的情况下,我只需要可执行文件
# env.list
ADMIN_USER='username'
ADMIN_PASSWORD='password'
# run.sh
source env.list
docker run -d \
-e ADMIN_USER=$INFLUXDB_ADMIN_USER \
-e ADMIN_PASSWORD=$INFLUXDB_ADMIN_PASSWORD \
image_repo/name:tag