1. 程式人生 > >Sub-process /usr/bin/dpkg returned an error code (1)的解決方法

Sub-process /usr/bin/dpkg returned an error code (1)的解決方法

之前是專案中用的Docker容器,後來前天突然docker起服務,起不來了,報錯誤如下:

FATA[0000] Cannot connect to the Docker daemon. Is ‘docker -d’ running on this host?

然後,我和我的小夥伴就開始了作死(我們對docker不怎麼了解,僅限知道是個容器2333),然後我們打算解除安裝了docker然後重新裝docker,然後我們就解除安裝了docker,至於解除安裝的乾淨不乾淨,也不清楚了,之後就安裝docker.io 但是總是報錯:

Sub-process /usr/bin/dpkg returned an error code (1)的解決方法


然後絞盡腦汁,各種百度,發現基本都是說有兩種方案:

  • 方案①
開啟終端,輸入
cd /var/lib/dpkg/info
sudo rm -f  foomatic-filters #即刪掉上面提示到的那些出錯的軟體包
sudo apt-get update -f
sudo apt-get -f install
sudo apt-get upgrade
sudo apt-get install foomatic-filters  #即又重新安裝回原來出錯的軟體包
  •  
  • 方案②
cd /var/lib/dpkg
sudo mv info info.bak #即備份一個info
sudo mkdir info #新建一個新的info目錄
然後採用以下命令重灌那些出錯的軟體包
sudo apt-get –reinstall install 軟體包名
開始我是想在一條命令中同時安裝幾個軟體包,結果還是出現E: Sub-process /usr/bin/dpkg returned an error code (1) 。於是把新的info刪掉,一個個地來安裝,每裝好一個軟體包,就把info刪掉,再新建一個,這樣就沒有提示E: Sub-process /usr/bin/dpkg returned an error code (1) 了。
最後用原來的info.bak 替換新的info
sudo -rf info
sudo mv info.bak info
之後輸入 sudo apt-get update 和 sudo apt-get upgrade 以及sudo apt-get autoremove 都不再有E: Sub-process /usr/bin/dpkg returned an error code (1)了

這些都還是報錯,哪怕安裝上了,就是還要報錯誤:

Client and server don’t have same version (client API version: 1.20, server API version: 1.19)
那我們最後又找了個強力小夥伴,他給我們把解除安裝乾淨了之後( /usr/bin/docker下面的docker.io.* 在解除安裝docker.io 的時候不會自動清除,需要單獨刪除),最後我們安裝的官網最新版!

//最終解決問題O(∩_∩)O哈哈~
$ sudo apt-get install apt-transport-https 
$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9 
$ sudo bash -c "echo deb https://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list" 
$ sudo apt-get update 
$ sudo apt-get install lxc-docker

總結:感覺就是解除安裝軟體的時候解除安裝的不乾淨,導致安裝的時候發現有docker殘留,安裝不了,涉及版本問題的情況,可以嘗試下載最新版本,試試!!!