Advertisement

学习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
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-08-16/kSI6LfaUmx3OpiFcyElZBHKQJTzh.png)

**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 iputilsapk 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

全部评论 (0)

还没有任何评论哟~