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

发布于 2022-09-12 23:31:32 字数 2414 浏览 28 评论 0

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

献世佛 2022-09-19 23:31:32

问题解决了,因为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...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文