docker啟動時環(huán)境變量不生效的解決方法
前言
因項目需要多處部署,為了部署的方便,于是準備將項目環(huán)境打包成docker鏡像以便于部署。mq、mysql這些在倉庫中都有現(xiàn)成的鏡像,雖然java和nginx的也都有,但是不知道當時是怎么想的,就不想搞太多鏡像,也打算自己實踐一下docker踩踩坑,就拉了個debian的環(huán)境自己配。
問題
按照網(wǎng)上的教程在容器中配置Java環(huán)境,這點沒什么難的,學過Java的都能做到,我也確實成功了。然后在重啟驗證時發(fā)現(xiàn)環(huán)境變量失效了,然后在網(wǎng)上搜索時發(fā)現(xiàn)在/etc/profile中設置的環(huán)境變量每次進入時都需要source /etc/profile,這有些麻煩,然后找到了另外一種方式,可以把環(huán)境變量寫入~/.bashrc中,每次打開新的shell時都會執(zhí)行,聽著就比較符合我們的要求了,然后重啟以及重新進入shell都驗證一下,發(fā)現(xiàn)Java環(huán)境都生效。
然后寫個shell腳本,讓容器在啟動時運行我的各個服務,退出容器并打包成鏡像。本以為大功告成了,誰知在測試鏡像能否正常運行我的各個服務時報錯了,又是Java環(huán)境問題。但是之前已經(jīng)驗證過環(huán)境沒問題,進入容器查看Java環(huán)境發(fā)現(xiàn)一切正常,沒有問題。于是退出容器重啟,結果還是因為沒有Java環(huán)境報錯,這就很奇怪了,有點像量子力學了,觀察就有,不觀察就沒有。
既然是shell腳本運行的時候沒有Java環(huán)境,那我們可以在腳本中配置Java環(huán)境就能解決這個問題,確實也有不少執(zhí)行腳本都這么做,但是我還是想知道環(huán)境變量為什么失效。
解決思路
首先懷疑的肯定是加載順序,自己寫的腳本執(zhí)行得比~/.bashrc快。那么在init.sh中寫入以下內(nèi)容。

在~/.bashrc中寫入以下內(nèi)容

然后把容器提交成鏡像后啟動鏡像docker run -itd config_init_test:2.0 /init.sh
在Docker Desktop中發(fā)現(xiàn)壓根就沒執(zhí)行~/.bashrc中的內(nèi)容

順著~/.bashrc中的命令沒有執(zhí)行這個線索去查,仔細閱讀之后才意識到我在上面加粗的那句“每次打開新的shell時都會執(zhí)行,那不打開shell就不會執(zhí)行,而絕大多數(shù)運行鏡像的場景都是后臺運行,不會打開shell,環(huán)境變量的設置理所當然的失效。
解決方案
1、在shell腳本設置環(huán)境變量
2、在Dockerfile中使用ENV命令
一開始我是用的方案2,但是語法沒寫對導致我以為這種用法不行才換的寫入~/.bashrc這個方案,然后就踩了這個坑。。。
總結
對Linux不熟悉,平時接觸得也少,這算是Linux的基礎知識吧,沒事還是多學學基礎知識,特別是想要用好docker的話Linux基礎知識必不可少。
到此這篇關于docker啟動時環(huán)境變量不生效的解決方法的文章就介紹到這了,更多相關docker啟動時環(huán)境變量不生效內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
docker-compose java.net.UnknownHostException問題
這篇文章主要介紹了docker-compose java.net.UnknownHostException問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-05-05
使用Docker構建開發(fā)環(huán)境的方法步驟(?Windows和mac)
利用Docker,我們可以做很多事情。所以本文就詳細介紹了使用Docker構建開發(fā)環(huán)境的方法步驟,分為?Windows和mac版本,具有一定的參考價值,感興趣的可以了解一下2021-12-12
打包docker鏡像推送到遠程服務器并部署到k8s的方法步驟
本文主要介紹了打包docker鏡像推送到遠程服務器并部署到k8s的方法步驟,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-11-11
docker容器中登陸并操作postgresql的實現(xiàn)
本文主要介紹了docker容器中登陸并操作postgresql的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2024-02-02

