繁体   English   中英

使用容器内的外壳文件设置系统ENV

[英]Set system ENV with the shell file inside the container

尝试在运行容器时使用shell脚本设置System ENV,问题是当我看到日志时,“ printenv ”向我显示“ MYENV = 123 ”,但是当我在容器内回显它为空时。

Dockerfile:

FROM ubuntu

ADD first.sh /opt/first.sh
RUN chmod +x /opt/first.sh

ADD second.sh /opt/second.sh
RUN chmod +x /opt/second.sh

ENTRYPOINT [ "/opt/first.sh" ]

第一.sh

#!/bin/bash

source /opt/second.sh
printenv

tail -f /dev/null

second.sh

#!/bin/bash

BLA=`echo blabla 123 | sed 's/blabla //g'`
echo "${BLA}"

export MYENV=${BLA}

我不希望使用在运行或码头工人,码头工人撰写ENV,因为这个流程会帮我改当我跑步时容器中的ENV

您所描述的技术可以正常工作。 我写的有点不同:

#!/bin/sh
. /opt/second.sh
exec "$@"

这将为容器中的主进程设置环境变量(并且不要忽略CMD或在命令行上设置的任何内容)。 它不会影响您碰巧通过docker exec启动的任何其他shell:它们不会作为容器主进程的子进程运行,也不会“看到”这些环境变量设置。

这项技术不会使更改容器中的环境变量特别容易或更难。 因为一个进程的环境影响另一进程的唯一方法是在启动时提供初始环境,所以即使您在活动容器中编辑second.sh (通常也不是最佳实践),它也不会影响主进程的环境(在您的情况下, tail命令)。 这是许多至少需要重新启动容器以使更改生效的常见情况之一。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM