docker中 env 设置无法在CMD中生效,但进入容器后可以正常使用

docker中 env 设置无法在CMD中生效,但进入容器后可以正常使用,
可以看下面 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"]

run Dockerfile

docker build -f Dockerfile -t test . && docker run --name test -p 3333:3000 -itd test && docker logs -f test

docker logs

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

进入容器中打印,可以看到env中已经包含了MYSQL_DB

➜  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


问题解决了,因为docker默认执行的是shell是未登陆的,所以不会获取环境变量,ENTRYPOINT时,增加参数 "-l" 登陆即可

ENTRYPOINT ["sh","-l","tmp/test.sh"]

目前还有些疑问是,如果在不登陆的情况下也可以设置环境变量,并正确读取,通过资料查到/etc/profile写入即可,可是我目前就是写入的/etc/profile,并未在未登陆的情况下读取成功。

参考资料:
https://stackoverflow.com/que...
https://stackoverflow.com/que...
https://stackoverflow.com/que...
https://www.cnblogs.com/spark...
https://www.cnblogs.com/spark...

阅读 8.8k
1 个回答
新手上路,请多包涵

问题解决了,因为docker默认执行的是shell是未登陆的,所以不会获取环境变量,ENTRYPOINT时,增加参数 "-l" 登陆即可

ENTRYPOINT ["sh","-l","tmp/test.sh"]

目前还有些疑问是,如果在不登陆的情况下也可以设置环境变量,并正确读取,通过资料查到/etc/profile写入即可,可是我目前就是写入的/etc/profile,并未在未登陆的情况下读取成功。

参考资料:
https://stackoverflow.com/que...
https://stackoverflow.com/que...
https://stackoverflow.com/que...
https://www.cnblogs.com/spark...
https://www.cnblogs.com/spark...

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题