Docker(五)OpenEuler22.03 安装docker ce、排坑

本系列帖子传送门

Docker(一) 简介与基础操作(图文)

Docker(二) dockerfile创建镜像(图文)

Docker(三)dockerfile命令说明(图文)

Docker(四)创建centos、mysql、nacos、redis容器及理解

Docker(五)OpenEuler22.03 安装docker ce、排坑

目录

零、说在前面

[一、OpenEuler22.03 安装docker ce](#一、OpenEuler22.03 安装docker ce)

二、问题和解决

三、感想


零、说在前面

我在本系列的第一篇帖子中详细介绍了docker的基础内容,但缺乏一步步的实操过程,因此诞生了这篇帖子。

其次,本次使用 docker ce 进行整体操作,它是docker公司于2017年推出的免费开源社区版,我们之前说docker收费,其实是 docker ee版收费,docker ce一直免费。它与ee的核心引擎完全一致、基本功能完全相同、命令行接口完全兼容、镜像生态完全互通。更多的 ce和ee的区别联系网上一搜一大把,这里不再赘述。

另外,想详细说说如何解决常见的"docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)."报错

一、OpenEuler22.03 安装docker ce

  1. 安装操作系统、关闭 selinux 等操作见以下帖子

Centos7 / OpenEuler 操作系统安装构建 yum / dnf 源测试环境防火墙的初始化

  1. 卸载系统自带的冲突软件包
bash 复制代码
## openEuler 默认预装了 podman、containerd 等容器相关软件,与 Docker 可能会产生冲突,卸载了干净
[root@milvus2 ~]# sudo dnf remove -y podman containerd runc docker docker-client docker-common docker-engine
  1. 安装必要的依赖包
bash 复制代码
[root@milvus2 ~]# sudo dnf install -y dnf-plugins-core
  1. 配置 Docker CE 软件源(华为云镜像)
bash 复制代码
## 使用华为云镜像源速度更快且稳定,我们一直用它。另外 Docker 官方源不识别 openEuler 的版本号,需要手动修改为 CentOS 8 的版本
## 添加华为云 Docker CE 源
[root@milvus2 ~]# sudo wget -O /etc/yum.repos.d/docker-ce.repo https://repo.huaweicloud.com/docker-ce/linux/centos/docker-ce.repo

## 修改源中的系统版本变量为 8(openEuler 22.03 与 CentOS 8 二进制兼容)
[root@milvus2 ~]# sudo sed -i 's+$releasever+8+' /etc/yum.repos.d/docker-ce.repo
  1. 更新软件源缓存并安装 Docker CE
bash 复制代码
## 更新缓存
sudo dnf makecache

## 安装最新版 Docker CE 及相关组件(包含 docker compose,至于docker compose 的作用和应用场景请自行搜索了解)
[root@milvus2 ~]# sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  1. 配置国内镜像加速器(这一步有坑)
bash 复制代码
## 创建 Docker 配置目录
[root@milvus2 ~]# sudo mkdir -p /etc/docker

## 配置镜像加速器
[root@milvus2 ~]# sudo tee /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn",
    "https://hub-mirror.c.163.com",
    "https://mirror.baidubce.com"
  ],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "500m",
    "max-file": "3"
  }
}
EOF

## 重新加载 systemd 配置
[root@milvus2 ~]# sudo systemctl daemon-reload
  1. 启动 Docker 服务并设置开机自启
bash 复制代码
## 启动 Docker 服务
[root@milvus2 ~]# sudo systemctl start docker

## 设置开机自启动
[root@milvus2 ~]# sudo systemctl enable docker
  1. 验证。如果下面三步都能成功执行
bash 复制代码
## 查看 Docker 版本信息,能看到包含 Client 和 Server 两部分的版本信息
[root@milvus2 ~]# docker version

## 查看 Docker 系统信息,包括Docker 的存储驱动、镜像加速器配置、容器和镜像数量等详细信息
[root@milvus2 ~]# docker info

## 拉取 hello-world 测试镜像并运行容器
[root@milvus2 ~]# docker run --rm hello-world

## 执行完拉取 hello-world 容器后,应该能看到一个类似 Hello from Docker!  字样的内容,说明已成功

二、问题和解决

事实上,我在第7步的时候发现根本拉取不到 hello-world 的镜像。同时报出了"Docker(一) 简介与基础操作(图文)"中出现的 Get "https://registry-1.docker.io/v2/" 错误

问题的根源在于我既没有为 虚拟机设置 DNS ,也没有在 docker 的 daemon.json 配置文件中添加 DNS 的设置。同时我在第5步设置的三个国内镜像也有问题了。

排查步骤如下。排查结果是第一个命令 ping 不通,第三个命令没有反应。可以确认是 dns 解析失败的问题,进而无法连接 Docker Hub。

bash 复制代码
## 1. 测试 DNS 解析,用来确定DNS 是否能解析 Docker Hub 域名
[root@milvus2 ~]# ping -c 4 registry-1.docker.io

## 2. 测试外网连通性,用来确定虚拟机是否能访问外网
[root@milvus2 ~]# ping -c 4 8.8.8.8

## 3. 测试 HTTPS 连接,用来确定HTTPS 连接是否正常
[root@milvus2 ~]# curl -I https://registry-1.docker.io/v2/

解决方法如下。执行了下面的命令,更换了 daemon.json 配置文件的内容并重启Docker之后,问题解决。

bash 复制代码
## 备份原配置
[root@milvus2 ~]# sudo cp /etc/docker/daemon.json /etc/docker/daemon.json.bak

## 修改 Docker 配置,添加 DNS
[root@milvus2 ~]# sudo tee /etc/docker/daemon.json <<EOF
{
  "dns": ["8.8.8.8", "8.8.4.4", "114.114.114.114"],
  "registry-mirrors": [
    "https://docker.m.daocloud.io",
    "https://dockerproxy.com",
    "https://docker.nju.edu.cn",
    "https://docker.mirrors.ustc.edu.cn"
  ],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "500m",
    "max-file": "3"
  }
}
EOF

## 重启 Docker 服务
[root@milvus2 ~]# sudo systemctl daemon-reload
[root@milvus2 ~]# sudo systemctl restart docker

三、感想

如果我在装完虚拟机的时候,为虚拟机配置如上所示的 DNS 信息,那么也不必在 Docker 的daemon.json 文件中显式指定 DNS 。但是 镜像加速器一定要紧跟时代,不能使用过期的。

相关推荐
MXsoft61813 分钟前
**智慧校园运维实践:多校区、老旧设备的统一监控方案**
运维·自动化
Sean‘20 分钟前
在隔离内网机器上使用 Filebeat 全量采集日志并推送到 ELK 的实战
运维·服务器·elk
Promise微笑27 分钟前
精准微阻测量:微欧计的分类、场景应用与高效选型决策指南
大数据·运维·网络·人工智能
MageGojo34 分钟前
R-Shell开源项目实战解析:用Rust打造命令行SSH工具,支持连接管理、远程执行、SFTP与MCP
运维·rust·开源项目·命令行工具·ssh客户端·mcp
云飞云共享云桌面36 分钟前
非标设计工厂8-10个SolidWorks研发共享一台高性能工作站
运维·服务器·自动化·电脑·制造
墨痕诉清风44 分钟前
Linux系统设置上海时间(24小时制)
linux·运维·服务器
utf8mb4安全女神1 小时前
脚本模块化
linux·运维·服务器
数智化精益手记局1 小时前
拆解项目管理平台核心功能:看项目管理平台如何解决跨部门协作难题与多项目并行场景
大数据·运维·数据库·人工智能·产品运营
杨浦老苏1 小时前
PDF文档管理平台PDFManager
docker·pdf·工具·群晖
MAXrxc1 小时前
BGP策略
运维·网络