參考文章:https://blog.csdn.net/weixin_46152207/article/details/127533584
本文記錄在CentOS上使用yum工具升級docker 的過程。參考文章寫得很好,一次性成功。
我為什么升級
老版本是是1.13.X不支持多階段構(gòu)建,多階段構(gòu)建需要1.17.5以上版本
舊版本備份
首先對原來的配置文件進(jìn)行備份,docker升級可能覆蓋原配置文件。鏡像和容器不會覆蓋,升級后依然可用。
默認(rèn)配置文件
默認(rèn)路徑:/etc/docker/*
我只備份daemon.json,升級后確實(shí)被覆蓋,我從備份恢復(fù)了daemon.json存儲地址
默認(rèn)路徑:/var/lib/docker
升級不會覆蓋該路徑,升級后可以繼續(xù)使用
我遇到的問題
- containerd.io 安裝失敗
參考上面文章基本可用,但是 containerd.io 下載失敗,在國內(nèi)鏡像中無法下載
containerd.io-1.6.33-3.1.el7.x86_64.rpm: [errno -1] 軟件包與預(yù)期下載的不符
通過直接下載,手動安裝解決
# 下載,如果有網(wǎng)絡(luò)問題,可以從其他地方下載上傳
wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.6.33-3.1.el7.x86_64.rpm
# 安裝
rpm -ivh --replacepkgs containerd.io-1.6.33-3.1.el7.x86_64.rpm
- 低版本升級到高版本之后不兼容 修改參數(shù)進(jìn)行解決,
修改后需要重啟
Error response from daemon: Unknown runtime specified docker-runc
解決方法:
更改/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
總結(jié)流程
- 備份配置文件
- 卸載
- 查找可用的新版本
- 安裝,并解決無法自動安裝的組件問題
- 恢復(fù)配置文件,然后啟動
- 解決兼容性問題
- 重啟docker