百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>服务器> docker中的环境变量运用与常见题目解决方案
分享文章到:

docker中的环境变量运用与常见题目解决方案

发布时间:05/13 来源:未知 浏览: 关键词:

前言

docker可认为容器配置环境变量。配置的路径有两种:

  • 在制作镜像时,通过ENV下令为镜像添加环境变量。在容器启动时运用该环境变量。
  • 在容器启动时候,通过参数配置环境变量,要是与镜像中有反复的环境变量,会遮盖镜像的环境变量。

运用docker exec {containerID} env即可查看容器中生效的环境变量。

[root@localhost ~]# docker exec 984 env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/java/default/bin
TERM=xterm
AUTHORIZED_KEYS=**None**
JAVA_HOME=/usr/java/default
HOME=/root
...

容器启动的进程,也就是ENTRYPOINT+CMD中,可以通过响应的系统库获取容器的环境变量。

进入到容器中,查看进程的环境变量,可以通过/proc下进行查看。

cat /proc/{pid}/environ

因而,容器中的环境变量也可以通过在容器中查看1号进程的环境变量来获取。可以通过施行cat /proc/1/environ |tr '\0' '\n'下令进行查看。

[root@localhost ~]# docker exec -it 984 cat /proc/1/environ |tr '\0' '\n'
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/java/default/bin
TERM=xterm
AUTHORIZED_KEYS=**None**
JAVA_HOME=/usr/java/default
HOME=/root
...

个别来说,从父进程发生出来的子进程都会默许继承父进程的环境变量。因而容器中的各个进程的环境变量应当是大致雷同的。当然,在一些特别的状况下,环境变量也会被重置,导致发生一些误会和题目。下面就对容器中一些常见的状况进行相干解说。

常见题目及解决

切换不一样会员后环境变量消散

在容器中,启动后切换不一样会员,比方运用su - admin切换admin会员后,发明配置的容器环境变量遗失了。

这是由于切换会员会导致环境变量重置。因而要运用su -p admin这样的方式,才可以继承先前的环境变量。

我们可以通过help来看下su的相干参数描述。

[root@adworderp-03a38d62-4103555841-m81qk /]# su --help
Usage: su [OPTION]... [-] [USER [ARG]...]
Change the effective user id and group id to that of USER.

...
 -m, --preserve-environment do not reset HOME, SHELL, USER, LOGNAME
    environment variables
 -p    same as -m
...

容器中的乱码题目

一些业务在迁移到容器中时,常常汇报打印日志乱码。个别的缘由是locale没有配置准确导致。

可以通过locale查看目前容器的说话环境。要是没设置,个别会是POSIX。我们可以通过locale -a查看目前容器支撑的说话环境,而后依据需要进行设置。

要想一劳永逸,最佳的方式还是在容器启动或者镜像的环境变量中增加LANG={xxx},选中合适的说话,从而以免因而导致的乱码题目。

ssh的环境变量题目

容器中启用sshd,可以利便连贯和排障,以及进行一些日常的运维操纵。

但是许多会员进入到容器中却发明,在docker启动时候配置的环境变量通过env下令并不能够正常显示。

这个的主要缘由还是ssh为会员创立连贯的时候会导致环境变量被重置。

这样导致的最大题目就是通过ssh启动的容器进程将没法获取到容器启动时候配置的环境变量。

理解了道理后,这个题目有个简略的要领解决。就是可以通过将容器的环境变量从新设置到ssh连贯后的session中。
具体的实现方式是,ssh连贯后,会主动施行source /etc/profile。

那么我们其实只有在/etc/profile追加几行代码,从1号进程获取容器自身的环境变量,然后轮回将环境变量export一下即可。

下列是一个简略的for轮回实现。

for item in `cat /proc/1/environ |tr '\0' '\n'`
do
 export $item
done

当然,有更简约的下令,就是export $(cat /proc/1/environ |tr '\0' '\n' | xargs),可以实现一样的结果。

总结

以上就是这篇文章的全部内容了,但愿本文的内容对大家的学习或者工作拥有一定的参考学习价值,感谢大家对脚本之家的支撑。

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有156人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板