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...
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(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...