学习Docker遇到的问题
目录
1、拉取hello-world镜像报错
1. 检查网络连接
排查:
2. 配置 Docker 镜像加速器(推荐)
具体解决步骤:
1.在服务器上创建并修改配置文件,添加Docker镜像加速器地址:
2. 重启Docker
3. 拉取hello-world镜像
2、删除镜像出现异常
3、 容器内部不能ping命令
解决方案:
方案1:临时安装(适合调试)
方案2:创建包含ping的自定义镜像
方案3:使用替代命令
1、拉取hello-world镜像报错
通过命令 docker pull hello-world:latest 拉取报错
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)
此错误表明 Docker 客户端无法访问 Docker Hub(registry-1.docker.io$),通常是因为网络中断或不稳定 所致。具体来说,请参考以下针对 CentOS 和 Ubuntu 的通用解决方案:
1. 检查网络连接
确保服务器可以访问外网:
1. ping 8.8.8.8 # 测试基础网络连通性
2. curl -v https://registry-1.docker.io # 测试直接访问 Docker Hub
bash
如果无法连接,可能是防火墙、代理或 DNS 问题。
排查:
是否可以访问 => 可以访问外网

是否可以直接访问Docker Hub => 不能

尝试配置国内镜像解决。
2. 配置 Docker 镜像加速器(推荐)
访问Docker Hub在国内可能会比较缓慢, 可考虑配置使用支持国内加速的镜像源
sudo mkdir -p /etc/docker # 确保目录存在
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://docker.registry.cyou",
"https://docker-cf.registry.cyou",
"https://dockercf.jsdelivr.fyi",
"https://docker.jsdelivr.fyi",
"https://dockertest.jsdelivr.fyi",
"https://mirror.aliyuncs.com",
"https://dockerproxy.com",
"https://mirror.baidubce.com",
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn",
"https://docker.mirrors.sjtug.sjtu.edu.cn",
"https://docker.mirrors.ustc.edu.cn",
"https://mirror.iscas.ac.cn",
"https://docker.rainbond.cc"
]
}
EOF
bash

**sudo tee ** *
sudo:以管理员权限执行命令(因 /etc/docker/ 目录需要 root 权限)。
tee:将标准输入(stdin)的内容同时发送到文件并同步显示在屏幕上,并被用来将数据保存至 /etc/docker/daemon.json文件。
<<-'EOF' 和 EOF *
Heredoc语法:表示将后续的内容(直到遇到独立EOF)作为标准输入传递给前一个命令(tee)。
字符型单引号’EOF’:禁止对变量进行替换以及使用转义符操作(保证输入内容完整无误,并防止像$等特殊符号被误认为是代码的一部分)。
EOF:结束标记(必须顶格写,且前后不能有空格)。
文件内容
这里是 JSON 格式的 Docker 配置,例如
{
"registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"]
}
bash
registry-mirrors:指定 Docker 镜像加速器地址(如阿里云、腾讯云等)。
具体解决步骤:
1.在服务器上创建并修改配置文件,添加Docker镜像加速器地址:

2. 重启Docker
sudo systemctl restart docker
bash
3. 拉取hello-world镜像
docker pull hello-world:latest
bash
拉取成功,问题解决

2、删除镜像出现异常
root@hcss-ecs-999c:/# docker rmi hello-world
Error response from daemon: conflict: unable to remove repository reference "hello-world" (must force) - container 98a7dd3e676a is using its referenced image 74cc54e27dc4
bash
遇到错误时【发现报错了
root@hcss-ecs-999c:/# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
98a7dd3e676a hello-world:latest "/hello" 4 minutes ago Exited (0) 4 minutes ago angry_lamarr
bash
利用 docker命令 'docker ps -a' 查看当前所有已部署的镜像信息。在查看结果中发现了一个名为 'hello-world' 的实例,在确认要删除该实例后,请执行相应的操作以彻底移除其相关的镜像。
root@hcss-ecs-999c:/# docker rm 98a7dd3e676a
98a7dd3e676a
root@hcss-ecs-999c:/# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bash
删除镜像
root@hcss-ecs-999c:/# docker rmi hello-world:latest
Untagged: hello-world:latest
Untagged: hello-world@sha256:424f1f86cdf501deb591ace8d14d2f40272617b51b374915a87a2886b2025ece
Deleted: sha256:74cc54e27dc41bb10dc4b2226072d469509f2f22f1a3ce74f4a59661a1d44602
Deleted: sha256:63a41026379f4391a306242eb0b9f26dc3550d863b7fdbb97d899f6eb89efe72
root@hcss-ecs-999c:/# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql latest 4b2d796bebc2 2 days ago 859MB
bash
3、 容器内部不能ping命令
主要原因:
轻量级镜像架构:标准基础镜像(如 Alpine 和 Debian-Slim)通常情况下未预装网络工具(包括 ping)。
安全考虑 :生产环境容器通常遵循最小化原则,移除非必要组件
解决方案:
方案1:临时安装(适合调试)
根据镜像类型选择安装命令:
| 镜像类型 | 安装命令 |
|---|---|
| Alpine | apk add --no-cache iputils 或 apk add busybox-extras |
| Debian/Ubuntu | apt-get update && apt-get install -y iputils-ping |
| CentOS/RHEL | yum install -y iputils |
方案2:创建包含ping的自定义镜像
在 Dockerfile 中预装工具:
FROM alpine
RUN apk add --no-cache iputils # 或 busybox-extras
CMD ["sh"]
bash
构建镜像:
docker build -t my-ping-image .
bash
方案3:使用替代命令
如果无法安装工具,可用以下方式测试网络:
# 使用curl检查连通性
curl -I https://google.com
# 使用nslookup检查DNS
nslookup google.com
# 使用telnet测试端口(需安装)
telnet google.com 80
bash
