校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > docker中的環(huán)境變量使用與常見問題解決方案

docker中的環(huán)境變量使用與常見問題解決方案

熱門標(biāo)簽:物超所值的400電話申請 營銷電銷機(jī)器人招商 百應(yīng)電銷機(jī)器人靠譜嗎 菏澤crm外呼系統(tǒng)價(jià)格 遼寧電銷平臺外呼系統(tǒng)軟件 coreldraw地圖標(biāo)注 申請400電話號碼多少錢 信陽銷售外呼系統(tǒng)招商 如何在各種地圖標(biāo)注自己的地址

前言

docker可以為容器配置環(huán)境變量。配置的途徑有兩種:

  • 在制作鏡像時(shí),通過ENV命令為鏡像增加環(huán)境變量。在容器啟動時(shí)使用該環(huán)境變量。
  • 在容器啟動時(shí)候,通過參數(shù)配置環(huán)境變量,如果與鏡像中有重復(fù)的環(huán)境變量,會覆蓋鏡像的環(huán)境變量。

使用docker exec {containerID} env即可查看容器中生效的環(huán)境變量。

[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
...

容器啟動的進(jìn)程,也就是ENTRYPOINT+CMD中,可以通過相應(yīng)的系統(tǒng)庫獲取容器的環(huán)境變量。

進(jìn)入到容器中,查看進(jìn)程的環(huán)境變量,可以通過/proc下進(jìn)行查看。

cat /proc/{pid}/environ

因此,容器中的環(huán)境變量也可以通過在容器中查看1號進(jìn)程的環(huán)境變量來獲取。可以通過執(zhí)行cat /proc/1/environ |tr '\0' '\n'命令進(jì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
...

一般來說,從父進(jìn)程產(chǎn)生出來的子進(jìn)程都會默認(rèn)繼承父進(jìn)程的環(huán)境變量。因此容器中的各個(gè)進(jìn)程的環(huán)境變量應(yīng)該是大致相同的。當(dāng)然,在一些特殊的情況下,環(huán)境變量也會被重置,導(dǎo)致產(chǎn)生一些誤解和問題。下面就對容器中一些常見的情況進(jìn)行相關(guān)講解。

常見問題及解決

切換不同用戶后環(huán)境變量消失

在容器中,啟動后切換不同用戶,比如使用su - admin切換admin用戶后,發(fā)現(xiàn)配置的容器環(huán)境變量丟失了。

這是因?yàn)榍袚Q用戶會導(dǎo)致環(huán)境變量重置。因此要使用su -p admin這樣的方式,才可以繼承先前的環(huán)境變量。

我們可以通過help來看下su的相關(guān)參數(shù)描述。

[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
...

容器中的亂碼問題

一些業(yè)務(wù)在遷移到容器中時(shí),常常報(bào)告打印日志亂碼。一般的原因是locale沒有配置正確導(dǎo)致。

可以通過locale查看當(dāng)前容器的語言環(huán)境。如果沒設(shè)置,一般會是POSIX。我們可以通過locale -a查看當(dāng)前容器支持的語言環(huán)境,而后根據(jù)需要進(jìn)行設(shè)置。

要想一勞永逸,最好的方式還是在容器啟動或者鏡像的環(huán)境變量中添加LANG={xxx},選擇合適的語言,從而避免因此導(dǎo)致的亂碼問題。

ssh的環(huán)境變量問題

容器中啟用sshd,可以方便連接和排障,以及進(jìn)行一些日常的運(yùn)維操作。

但是很多用戶進(jìn)入到容器中卻發(fā)現(xiàn),在docker啟動時(shí)候配置的環(huán)境變量通過env命令并不能夠正常顯示。

這個(gè)的主要原因還是ssh為用戶建立連接的時(shí)候會導(dǎo)致環(huán)境變量被重置。

這樣導(dǎo)致的最大問題就是通過ssh啟動的容器進(jìn)程將無法獲取到容器啟動時(shí)候配置的環(huán)境變量。

了解了原理后,這個(gè)問題有個(gè)簡單的方法解決。就是可以通過將容器的環(huán)境變量重新設(shè)置到ssh連接后的session中。
具體的實(shí)現(xiàn)方式是,ssh連接后,會自動執(zhí)行source /etc/profile。

那么我們其實(shí)只要在/etc/profile追加幾行代碼,從1號進(jìn)程獲取容器本身的環(huán)境變量,然后循環(huán)將環(huán)境變量export一下即可。

以下是一個(gè)簡單的for循環(huán)實(shí)現(xiàn)。

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

當(dāng)然,有更簡潔的命令,就是export $(cat /proc/1/environ |tr '\0' '\n' | xargs),可以實(shí)現(xiàn)同樣的效果。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對腳本之家的支持。

標(biāo)簽:江西 泰安 玉樹 江門 湖北 瀘州 內(nèi)江 廈門

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《docker中的環(huán)境變量使用與常見問題解決方案》,本文關(guān)鍵詞  docker,中的,環(huán)境,變量,使用,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《docker中的環(huán)境變量使用與常見問題解決方案》相關(guān)的同類信息!
  • 本頁收集關(guān)于docker中的環(huán)境變量使用與常見問題解決方案的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 邵阳县| 郯城县| 光泽县| 镇宁| 盱眙县| 崇州市| 长汀县| 双峰县| 灵石县| 清新县| 玛多县| 鱼台县| 东光县| 横峰县| 公安县| 平乐县| 延津县| 建水县| 互助| 边坝县| 得荣县| 金华市| 霍州市| 台东县| 天等县| 临泉县| 聂荣县| 嘉兴市| 石门县| 客服| 湖州市| 五河县| 梁山县| 祁门县| 云和县| 阿瓦提县| 甘南县| 宁国市| 嘉定区| 罗城| 华阴市|