Docker異常:/lib/x86_64-linux-gnu/libnss_files.so.2: symbol __libc_readline_unlocked, version GLIBC_PRIVATE not defined in file libc.so.6 with link time reference


 

當使用docker cp 將容器內數據拷貝至主機時,或是使用docker export 命令歸檔容器文件時,出現下述異常:

Error response from daemon: error processing tar file: docker-tar: relocation error: /lib/x86_64-linux-gnu/libnss_files.so.2: symbol __libc_readline_unlocked, version GLIBC_PRIVATE not defined in file libc.so.6 with link time reference : exit status 127

則對應的解決方案為:

Initialize nss libraries in Glibc so that the dynamic libraries are loaded in the host environment not in the chroot from untrusted files. CVE-2019-14271 may allow unprivileged access to host system while copying files from a malicious container image with docker cp command. Affected versions: v19.03.0. Older Docker versions are not affected by this issue. This fix is included in the already released Docker v19.03.1. Users of Docker v19.03.0 are advised to upgrade. (可參考鏈接:https://www.cnblogs.com/cnlihao/p/11255000.html

根據上述的描述可知:當前docker 19.03.0的版本是存在這樣一個bug的,不過已經在對應的 Docker v19.03.1上已經被修復過了,不過很不巧的是,當前樓主的版本就是:19.03.0,如下圖所示:

所以此處,要想解決當前的問題,則必須是,升級當前版本了;

版本升級的步驟如下:

1、在對應的Docker官網,下載對應的RPM包:https://download.docker.com/linux/centos/7/x86_64/stable/Packages/ ,此處樓主選擇的則是:19.03.1的RPM安裝包

linux命令如下:wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-19.03.1-3.el7.x86_64.rpm

將對應的RPM包下載以后,則在對應的服務器上執行現有的Docker版本升級,使用命令為: yum -y update /opt/docker-ce-19.03.1-3.el7.x86_64.rpm,(需注意:升級現有的Docker版本將會導致所以已啟的容器全部停止),此處更新對應的Docker版本以后,重復使用export命令,此時則不再出現上述異常

2、除了使用 yum -y update的方式進行更新外,也可以選擇重新卸載當前Docker包后,重新安裝新的Docker版本,如下所示:

  a)刪除掉當前的舊版本Docker:

sudo yum remove docker \
                  docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine

  b)刪除已有的鏡像和容器數據(如果不進行刪除,則新安裝的Docker后,還是可以通過docker images 找到對應的鏡像及容器信息)(此步驟:未測試)

find /etc/systemd -name '*docker*' -exec rm -f {} \;
find /etc/systemd -name '*docker*' -exec rm -f {} \;
find /lib/systemd -name '*docker*' -exec rm -f {} \;
rm -rf /var/lib/docker   #刪除以前已有的鏡像和容器,非必要
rm -rf /var/run/docker  

  c) 此處通過指定的軟件包進行yum安裝,sudo yum install /opt/docker-ce-19.03.1-3.el7.x86_64.rpm

  d) 啟動Docker;systemctl start docker

3、使用yum直接安裝對應的Docker存儲庫,(無需再手動下載RPM包,但需保證已鏈接互聯網,適合直接進行在線安裝的操作(RPM則適合進行離線的Docker安裝))

  a) 參考 菜鳥教程中對Docker存儲庫的安裝方式的介紹,如下鏈接:https://www.runoob.com/docker/centos-docker-install.html

  b) 參考 博客:https://www.cnblogs.com/wdliu/p/10194332.html

  c) 無論是上述的 菜鳥教程中所描述的安裝方式,還是第二個博客中所描述的安裝方式,其本質都是來自於,Docker官方教程中對存儲庫的在線安裝的說明,如需參考Docker官方的安裝教程,則可以參考該鏈接:https://docs.docker.com/install/linux/docker-ce/centos/ (其中分別說明了:1、在線使用Docker存儲庫的方式進行安裝,2、適合於離線安裝的rpm包的安裝方式,以及3、直接在線使用便捷腳本的方式進行安裝)

 


免責聲明!

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



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