低版本Docker升级高版本Docker【详细教程、成功避坑】

news/2024/10/21 17:48:19/

🎈 作者:互联网-小啊宇

🎈 简介: CSDN 运维领域创作者、阿里云专家博主。目前从事 Kubernetes运维相关工作,擅长Linux系统运维、开源监控软件维护、Kubernetes容器技术、CI/CD持续集成、自动化运维、开源软件部署维护等领域。
🎈 博客首页:CSDN【互联网-小阿宇】 、阿里云【互联网-小阿宇】
🎈 欢迎小伙伴们点赞👍、收藏⭐、留言💬

在这里插入图片描述

🔥低版本Docker升级高版本Docker【详细教程、成功避坑】🔥

  • ⭐安装低版本Docker
    • 🍒查看Docker版本
    • 🍒宿主机创建挂载目录
    • 🍒下载镜像并创建容器
    • 🍒登录容器查看映射
    • 🍒访问测试
  • ⭐在升级前确定几个重点:
    • 🍒1.原配置文件备份一下
    • 🍒2.清楚知道Docker的存储目录在哪里
  • ⭐进行升级高版本docker
    • 🍒将低版本Docker卸载
    • 🍒 安装yum管理工具
    • 🍒 添加国内镜像源
    • 🍒 查看软件版本
    • 🍒安装指定版本的docker
    • 🍒查看容器和镜像依然存在
    • 🍒启动容器测试:
      • 报错①`Error response from daemon: Unknown runtime specified docker-runc`
      • 报错①解决方法:
      • 报错②`Error response from daemon: error creating overlay mount to /var/lib/docker/overlay2/09f8444f734ca18130ac4e2dafdcd3a19dd2986c9474bd0a50c87c0af559a831/merged: invalid argument`
      • 报错②解决方法:
    • 🍒启动容器进行测试


操作系统服务
Centos7Docker

⭐安装低版本Docker

由于Centos7自带的yum源中的Docker版本过低,先安装默认的版本

yum -y install docker

🍒查看Docker版本

[root@Ayu ~]# docker --version
Docker version 1.13.1, build 7d71120/1.13.1

🍒宿主机创建挂载目录

mkdir -p /test/nginx
cd /test/nginx && mkdir a b c d

🍒下载镜像并创建容器

docker pull nginx
docker run -itd -v /test/nginx:/test/nginx -p 80:80 --name nginx nginx

🍒登录容器查看映射

docker exec -it nginx bash
root@daea0c2b307b:/# cd /test/nginx
root@daea0c2b307b:/test/nginx# ls
a  b  c  d

🍒访问测试

在这里插入图片描述

⭐在升级前确定几个重点:

🍒1.原配置文件备份一下

[root@localhost ~]# cat /usr/lib/systemd/system/docker.service 
[Unit]
Description=Docker Application Container Engine
Documentation=http://docs.docker.com
After=network.target
Wants=docker-storage-setup.service
Requires=docker-cleanup.timer[Service]
Type=notify
NotifyAccess=main
EnvironmentFile=-/run/containers/registries.conf
EnvironmentFile=-/etc/sysconfig/docker
EnvironmentFile=-/etc/sysconfig/docker-storage
EnvironmentFile=-/etc/sysconfig/docker-network
Environment=GOTRACEBACK=crash
Environment=DOCKER_HTTP_HOST_COMPAT=1
Environment=PATH=/usr/libexec/docker:/usr/bin:/usr/sbin
ExecStart=/usr/bin/dockerd-current \--add-runtime docker-runc=/usr/libexec/docker/docker-runc-current \--default-runtime=docker-runc \--exec-opt native.cgroupdriver=systemd \--userland-proxy-path=/usr/libexec/docker/docker-proxy-current \--init-path=/usr/libexec/docker/docker-init-current \--seccomp-profile=/etc/docker/seccomp.json \$OPTIONS \$DOCKER_STORAGE_OPTIONS \$DOCKER_NETWORK_OPTIONS \$ADD_REGISTRY \$BLOCK_REGISTRY \$INSECURE_REGISTRY \$REGISTRIES
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=1048576
LimitNPROC=1048576
LimitCORE=infinity
TimeoutStartSec=0
Restart=on-abnormal
KillMode=process[Install]
WantedBy=multi-user.target

🍒2.清楚知道Docker的存储目录在哪里

默认目录:/var/lib/docker

⭐进行升级高版本docker

🍒将低版本Docker卸载

不删除 /var/lib/docker 目录 就不会删除已安装的镜像及容器

[root@localhost docker]# yum list installed | grep docker
docker.x86_64                       2:1.13.1-209.git7d71120.el7.centos @extras  
docker-client.x86_64                2:1.13.1-209.git7d71120.el7.centos @extras  
docker-common.x86_64                2:1.13.1-209.git7d71120.el7.centos @extras  
[root@localhost ~]# yum -y remove docker*

🍒 安装yum管理工具

yum install -y yum-utils

🍒 添加国内镜像源

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

🍒 查看软件版本

yum list docker-ce --showduplicates|sort -rdocker-ce.x86_64            3:18.09.6-3.el7                     docker-ce-stable
docker-ce.x86_64            3:18.09.5-3.el7                     docker-ce-stable
docker-ce.x86_64            18.03.1.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            18.03.0.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            17.12.1.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            17.03.3.ce-1.el7                    docker-ce-stable

🍒安装指定版本的docker

yum -y install docker-ce-18.03.1.ce-1.el7.centos
[root@localhost ~]# systemctl start docker
[root@localhost ~]# docker --version
Docker version 18.03.1-ce, build 9ee9f40

🍒查看容器和镜像依然存在

在这里插入图片描述

🍒启动容器测试:

报错①Error response from daemon: Unknown runtime specified docker-runc

在这里插入图片描述

这是因为低版本升级到高版本之后不兼容 修改参数进行解决

报错①解决方法:

更改/var/lib/docker/containers目录中的文件参数,把docker-runc替换为runc

命令:

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

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

vi /etc/selinux/config
# 找到SELINUX=enable修改为SELINUX=permissive
SELINUX=permissive
# 保存
:wq

或者修改docker关闭selinux

vi /etc/sysconfig/docker
# 找到OPTIONS="--selinux-enabled --log-driver=journald --signature-verification=false"
# 删除 --selinux-enabled
OPTIONS="--log-driver=journald --signature-verification=false"
# 保存
:wq

另外docker-18.03已经废弃使用overlay1了,overlay2存储才是今后所支持的,因此不建议按照网上某文章的教程那样将docker的存储驱动改回overlay1。改回overlay1的方式只是治标不治本,正解是修改selinux配置。

🍒启动容器进行测试

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

至此低版本Docker升级高版本Docker完美结束~!
在这里插入图片描述


http://www.ppmy.cn/news/499645.html

相关文章

Gorm many2many关系中如何使用预加载查询

Gorm many2many关系中如何使用预加载查询 gorm中,若两个实体A、B之间关系为m:n。如果查询A时候需要Preload(B),那么db查询之前需要设置 db.SetupJoinTable()。 例子: Person : Address m : n。 type Person struct {ID int …

深度学习实例分割篇——Mask RCNN原理详解篇

🍊作者简介:秃头小苏,致力于用最通俗的语言描述问题 🍊专栏推荐:深度学习网络原理与实战 🍊近期目标:写好专栏的每一篇文章 🍊支持小苏:点赞👍🏼、…

电脑推荐-暂时就写这么多

注: 游戏本不是意味专门用于打游戏, 而是说电脑的配置很好, 性能强劲, 自然玩游戏不在话下, 同时得益于其强大的配置, 也能流畅运行各领域的专业软件, 如CAD, 3dsMax 等, 完全可以做为主要生产力工具. 而轻薄本(全能本)的主要特点是便携, 不像游戏本那样很重, 所以会牺牲掉一些…

计算机网络技术自谋职业,过去认知或许都是错的 主编告诉你游戏PC该怎么选

每一年随着CPU、GPU的升级,各家厂商就会对旗下的游戏型PC进行更新,而在选购上的建议则是崇尚买新不买旧,毕竟新品在性能上肯定比老品来的强,而且大家选购游戏型PC的核心要素是获得良好的游戏体验,性能越高自然更容易满…

计算机硬件性能以及配置,硬件配置和性能表现

二、硬件配置和性能表现 配置概览: 首先我们先简要介绍一下这台笔记本的主要配置,惠普光影精灵4代搭载了第八代英特尔酷睿™i7-8750H处理器、NVIDIA GeForce GTX 1050 Ti显卡(最高可选NVIDIA GeForce GTX 1060 MAX-Q GDDR5显卡),这次我们测试…

简要介绍 | 图像聚类:概念、原理与方法

注1:本文系“简要介绍”系列之一,仅从概念上对图像聚类进行非常简要的介绍,不适合用于深入和详细的了解。 图像聚类:概念、原理与方法 Cluster Analysis | NVIDIA Developer 1. 背景介绍 图像聚类(Image Clustering&a…

想去除List重复元素?我有两种方法搞定,赶紧拿去用

关注“Java架构栈”微信公众号,回复暗号【Java面试题】即可获取大厂面试题 问题背景 最近就有很多小伙伴在后台私信波哥,问波哥这样一个问题:“波哥,我最近正在找工作,被面试官问到List该怎么去重?我感觉自…

Java关于反射的理解

关于反射的理解 Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。 框架 反射 注解 设计模式。 3.体会反射机制的“动态性” //体会…