Docker缺少libnsl動態庫


1:為了和客戶docker環境保持一直要使用基礎鏡像:openjdk:8-jdk-oraclelinux8

這個版本號是個tag,tag用docker list是查不到的,可以直接docker pull到本地,Dockerfile里直接From使用。

2:為了和客戶的版本號保持一直還要升級最新的Docker版本,我用之前的版本打出來的鏡像只能使用-v參數進行目錄映射而且需要加--privileged=true,不然鏡像里的項目占位符無法解析。

3:使用的上面的基礎鏡像有一個問題,如果項目依賴libnsl.so.1函數庫會報錯,這個問題折磨了我好久,上網搜了很多方法,在Dockerfile中以各種姿勢下載這個libnsl打鏡像都不成功。

    最后沒法子問了客戶的運維,還是專業的人有見解,一下子給我解決了。就是在Dockerfile中添加:

RUN microdnf install -y libnsl

    這樣打鏡像的時候會自動下載這個動態庫,啟動鏡像的時候還報錯了一個錯誤:

terminate called after throwing an instance of 'std::runtime_error'
 
what(): locale::facet::_S_create_c_locale name not valid

 

 可能是語言包支持的問題,在啟動腳本里加上:

export LC_ALL="C"

 

 解決問題。

雖然簡簡單單寫了幾句,但是上面三個問題花了我兩天的時間來搞,哎還是要繼續努力呀。關於Docker升級上傳的文檔參考。

對了對於os的動態庫,可以使用ldd  file查看這個函數庫依賴了那些函數庫,如果缺少的話結果會顯示not found,我的環境是如下的情況。

 

然后就是動態庫加載的路徑可以通過下面的參數進行設置。上面的Indigo目錄就是自定義設置的。

export LD_LIBRARY_PATH=***

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM