使用docker exec进入容器,无法读取环境变量问题


比如说,我在镜像中的/etc/profile文件里添加了export PATH=/opt/php-5.6:$PATH
但我通过命令docker exec -ti ID /bin/bash进入容器时,执行php -v返回的却是默认的php版本,5.4版本的,截图如下:
QQ截图20160407170526.png


有大侠遇过类似的问题不?我希望exec进入容器后,能自动读取/etc/profile中定义的变量,而不用每次都执行source /etc/profile。这样该怎么处理比较好?
已邀请:

yingz - 80后it男。。。

赞同来自: agns 徐磊 zhaoying818


/etc/profile中的变量不是自动就export的,完整的os在启动过程会有启动程序依次读取系统和用户的配置文件,但在容器里就没有这一步了,所以要自己导出才可以。
最直接的办法是用 runcreate-e参数通过命令行在容器外指定环境变量;当然也可以写一个entrypoint脚本,在其中export 那些基本不发生变化的环境变量。
对于你说的这种情况,建议直接在镜像里rm 旧版本的 php ;-P

请参考 env-environment-variables doc

方圆小生

赞同来自:


我遇到过这个问题,我采用的是把变量写入/root/.bashrc这个文件,就会自动读取你的变量了。

不过我看了楼上的回答,感觉写一个entrypoint的方式更好,使用Dockerfile文件构建镜像的时候会更方便,如果你有兴趣,不放学习一下Dockerfile的命令ENTRYPOINT和CMD的区别。

akin520

赞同来自:


启动时加一个-e或dockerfile里面加入变量环境比较好点

agns

赞同来自:


感谢各位的解答。已通过在Dockerfile中添加ENV的方式解决该问题。

要回复问题请先登录注册