摘自:https://blog.csdn.net/weixin_46152207/article/details/127533584
在升级前确定几个重点:
原配置文件备份一下
bash
1 | [root@localhost ~]# cat /usr/lib/systemd/system/docker.service |
停止当前所有容器运行,并记录下container-id
shell
1 | docker stop $(docker ps -a -q) |
清楚知道Docker的存储目录在哪里
默认目录:
/var/lib/docker
如果有配置到其它存储目录,记得额外注意下以下两个地方
/etc/docker/daemon.json
文件json
1
2
3
4
5 {
"insecure-registries": ["xxx:5000"],
"registry-mirrors": ["https://mirror.ccs.tencentyun.com"],
"data-root": "/mnt/datadisk0/docker" # 这里多注意下
}
/usr/lib/systemd/system/docker.service
文件中的graph参数【默认可能是不带的】--graph=/mnt/datadisk0/docker
进行升级高版本docker
将低版本Docker卸载
不删除 /var/lib/docker 目录 就不会删除已安装的镜像及容器
bash
1 | [root@localhost docker]# yum list installed | grep docker |
安装yum管理工具和必备工具包
bash
1 | yum install -y yum-utils device-mapper-persistent-data lvm2 |
添加国内镜像源
bash
1 | yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo |
刷新仓库信息
shell
1 | yum repolist |
查看软件版本
bash
1 | yum list docker-ce --showduplicates|sort -r |
安装指定版本的docker
bash
1 | # 安装docker-ce-18.03.1.ce-1.el7。若要安装其他版本则按照以下格式进行安装:docker-ce-,其它版本还有去掉“3:” |
查看容器和镜像依然存在

启动容器报错处理:
报错①Error response from daemon: Unknown runtime specified docker-runc

这是因为低版本升级到高版本之后不兼容 修改参数进行解决
报错①解决方法:
更改/var/lib/docker/containers目录中的文件参数,把docker-runc替换为runc
命令:
bash
1 | grep -rl 'docker-runc' /var/lib/docker/containers/ | xargs sed -i 's/docker-runc/runc/g' |
注:grep -rl:递归搜索目录和子目录,只列出含有匹配的文本行的文件名,而不显示具体的匹配内容
xargs:衔接执行之前得到的值总体意思是把/var/lib/docker/containers中含有‘docker-runc’的文件搜索出来,并把‘docker-runc’字符为runc
重新启动docker
bash
1 | systemctl restart docker |

报错②Error response from daemon: error creating overlay mount to /var/lib/docker/overlay2/09f8444f734ca18130ac4e2dafdcd3a19dd2986c9474bd0a50c87c0af559a831/merged: invalid argument

报错②解决方法:
解决方案无非是SELINUX要么都关闭,要么都开启
推荐修改CentOS下的/etc/selinux/config 将SELINUX=disabled 改成 SELINUX=permissive
bash
1 | vi /etc/selinux/config |
或者修改docker关闭selinux
bash
1 | vi /etc/sysconfig/docker |
另外docker-18.03已经废弃使用overlay1了,overlay2存储才是今后所支持的,因此不建议按照网上某文章的教程那样将docker的存储驱动改回overlay1。改回overlay1的方式只是治标不治本,正解是修改selinux配置。
重启所有旧容器
拿到之前记录下container-id
shell
1 | docker restart {xxx,xxx,xxx} |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 小五的个人杂货铺!