yum安裝的docker進行升級

1. 背景

一般來說,yum默認安裝的docker版本都比較低,導致有時候docker build都有問題,因為不能解析對應的語法。所以我們需要更新我們通過yum安裝的docker。

2. 解決方案

來源:Install Docker Engine on CentOS

2.1 卸載舊版本

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

如果 yum報告沒有安裝這些軟件包,那也沒關(guān)系。

/var/lib/docker/的內(nèi)容,包括image、container、volumes, and networks,將被保留。Docker 引擎包現(xiàn)在被稱為 docker-ce.

2.2 安裝方法

您可以根據(jù)需要以不同方式安裝 Docker Engine:

  • 大多數(shù)用戶設(shè)置 Docker 的存儲庫并從中安裝,以便于安裝和升級任務。這是推薦的方法。
  • 一些用戶下載 RPM 包并手動安裝并完全手動管理升級。這在某些情況下非常有用,例如在無法訪問互聯(lián)網(wǎng)的氣隙系統(tǒng)上安裝 Docker。
  • 在測試和開發(fā)環(huán)境中,部分用戶選擇使用自動化便捷腳本來安裝Docker。

2.3 設(shè)置存儲庫

安裝 yum-utils包(提供 yum-config-manager 實用程序)并設(shè)置穩(wěn)定 存儲庫。

sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo

2.4 安裝 Docker 引擎

  1. 安裝最新版本的 Docker Engine 和 containerd,或者進入下一步安裝特定版本:
sudo yum install docker-ce docker-ce-cli containerd.io

  1. 要安裝特定版本 的 Docker Engine,請在 repo 中列出可用版本,然后選擇一種并進行安裝:
    列出并排序您的存儲庫中可用的版本。本示例按版本號對結(jié)果進行排序,從高到低,并被截斷:
yum list docker-ce --showduplicates | sort -r

返回的列表取決于啟用的存儲庫,并且特定于您的 CentOS 版本(.el7在本示例中由后綴表示)。
通過完全限定的包名稱安裝特定版本,即包名稱 ( docker-ce) 加上從第一個冒號 ( :)開始的版本字符串(第 2 列),直到第一個連字符,由連字符 ( -)分隔。例如,docker-ce-18.09.1

sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io

此命令會安裝 Docker,但不會啟動 Docker。它還會創(chuàng)建一個 docker組,但是,默認情況下它不會向該組添加任何用戶。

  1. 啟動 Docker。

    sudo systemctl start docker
    
    
  2. 通過運行 hello-world 映像驗證 Docker Engine 是否已正確安裝。

sudo docker run hello-world

此命令下載測試映像并在容器中運行它。當容器運行時,它會打印一條消息并退出。

3. 可能碰到的問題

3.1 docker 升級后或者重裝后,啟動容器提示:Error response from daemon: Unknown runtime specified docker-runc

3.1.1 解決方法:

更改/var/lib/docker/containers目錄中的文件參數(shù),把docker-runc替換為runc

grep -rl 'docker-runc' /var/lib/docker/containers/ | xargs sed -i 's/docker-runc/runc/g'

注:

  • grep -rl:遞歸搜索目錄和子目錄,只列出含有匹配的文本行的文件名,而不顯示具體的匹配內(nèi)容
  • xargs:銜接執(zhí)行之前得到的值

總體意思是把/var/lib/docker/containers中含有‘docker-runc’的文件搜索出來,并把‘docker-runc’字符為runc

重新啟動docker

sudo systemctl daemon-reload
sudo systemctl restart docker

大功告成

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容