尝试在运行容器时使用shell脚本设置系统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" ]
first.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}
我不想在运行中或与docker-compose一起使用docker env,因为此工作流将帮助我在运行容器时更改 env 。
答案 0 :(得分:0)
您所描述的技术可以正常工作。我会写得稍有不同:
#!/bin/sh
. /opt/second.sh
exec "$@"
这将为容器中的主进程设置环境变量(并且不要忽略CMD
或在命令行上设置的任何内容)。它不会影响您碰巧用docker exec
启动的任何其他shell:它们不会作为容器主进程的子进程运行,也不会“看到”这些环境变量设置。
此技术不会使更改容器中的环境变量特别容易或更难。由于一个进程的环境影响另一进程的唯一方法是在启动时提供初始环境,因此即使您在实时容器中编辑second.sh
(通常不是最佳实践),也不会影响主进程的环境。环境(在您的情况下为tail
命令)。这是许多常见情况之一,您至少需要重新启动容器才能使更改生效。