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 。但是 镜像加速器一定要紧跟时代,不能使用过期的。

相关推荐
j_xxx404_1 小时前
Linux进程信号捕捉与操作系统运行本质深度解析
linux·运维·服务器·开发语言·c++·人工智能·ai
eggrall1 小时前
Linux信号——保存信号
linux·运维·服务器
2501_920047031 小时前
firewalld的使用
linux·运维
孙高飞2 小时前
直播预告 - 周日晚 7 点半-AI 驱动 UI 自动化
运维·自动化
qq_196976172 小时前
硬核多语言办公方案:基于Gemini境像站的实时翻译与双语文档自动化生成管道(国内免费镜像实测)
运维·自动化
拉不拉斯2 小时前
Linux 性能调优实战指南:从 perf 实时监控到火焰图生成
linux·运维·服务器·perf
Agent手记2 小时前
环保排放数据自动上报全流程自动化—— 2026企业级智能体(Agent)落地全指南
运维·人工智能·ai·自动化
LCG元2 小时前
RAG工程指南:从基础检索到生产部署全解析
java·运维·数据库
小生迷途知返3 小时前
影响巨大!Linux 提权大洞速速复现!!!暂无补
linux·运维·服务器