【发布时间】:2021-04-30 02:42:31
【问题描述】:
docker中的env设置在ENTRYPOINT中无法生效,但是进入容器后可以正常使用
下面可以看到MYSQL_DB的环境变量设置
备注: 因为想通过脚本动态设置ENV,所以在写Dockerfile的时候不知道有哪些环境变量,所以没办法在dockerfile中使用ENV来设置环境变量。我只能用RUN命令动态引入环境变量。
Dockerfile:
FROM alpine:3.8
ENV ENV="/etc/profile"
RUN echo "export MYSQL_DB=127.0.0.1" >> "$ENV"
RUN echo "env && echo '************' && tail -f /etc/profile">/tmp/test.sh
ENTRYPOINT ["sh","tmp/test.sh"]
运行 Dockerfile
docker build -f Dockerfile -t test . && docker run --name test -p 3333:3000 -itd test && docker logs -f test
码头工人日志
HOSTNAME=dcb1372343c0
SHLVL=1
HOME=/root
ENV=/etc/profile
TERM=xterm
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/
************
export PAGER=less
export PS1='\h:\w\$ '
umask 022
for script in /etc/profile.d/*.sh ; do
if [ -r $script ] ; then
. $script
fi
done
export MYSQL_DB=127.0.0.1
执行 docker 打印环境
➜ nodejs_dist git:(master) ✗ docker exec -it test /bin/sh
dcb1372343c0:/# env
HOSTNAME=dcb1372343c0
SHLVL=1
HOME=/root
PAGER=less
PS1=\h:\w\$
ENV=/etc/profile
TERM=xterm
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/
CHARSET=UTF-8
MYSQL_DB=127.0.0.1
【问题讨论】:
-
您能多谈谈您的大型应用程序吗?您控制进入 Dockerfile 的所有内容,因此您应该知道(或可能)设置了哪些环境变量。您可能应该优化主容器进程的设置(因此在
ENTRYPOINT包装脚本中进行设置是一个不错的选择),而不必担心docker exec调试 shell。
标签: linux docker kubernetes dockerfile alpine