Linux网络故障排查与深度进入网络通信手记

情况分类:

  1. 连不上网(无法访问国内网站也无法访问国外网站);访问不了docker的网站
  2. 能访问国内网站,访问不了国外网站;docker拉不下镜像->docker镜像源失效

能访问国内网站,访问不了国外网站;docker拉不下镜像

  1. eth0存在

  2. 报错信息

1
2
3
└─# docker-compose up -d 
Pulling web (vulhub/teamcity:2023.05.3)...
ERROR: Get "https://registry-1.docker.io/v2/": dial tcp 168.143.162.42:443: i/o timeout

注解:

docker-compose up -d

  1. docker-compose
    docker-compose 是一个用于定义和运行多容器 Docker 应用程序的工具。通过在 docker-compose.yml 文件中定义服务(包括镜像、网络、卷等),可以方便地启动和管理多个容器。

  2. up
    up 命令会根据 docker-compose.yml 文件中的配置启动所有定义的服务。如果容器或服务已经存在,Docker Compose 会检查它们的状态,并在必要时重新启动它们。
    具体操作包括:

  3. 创建网络:如果还没有定义的网络,它将自动创建。

  4. 创建卷:定义的卷(存储)也会被自动创建并挂载到相应的容器。

  5. 构建镜像:如果服务定义了镜像,Docker Compose 会检查镜像是否存在,如果不存在,会自动拉取或构建镜像。

  6. 启动服务:最后,所有服务会被启动。

  7. -d
    -d 代表 “detached mode”(后台运行模式)。这意味着容器将在后台运行,你的终端会立即返回,而不是保持打开以显示容器日志。 detach:分开
    如果不加 -d 参数,docker-compose up 会以前台模式启动,容器的日志输出会显示在当前终端中,直到手动停止。

Pulling web (vulhub/teamcity:2023.05.3)

  1. Docker Compose 尝试拉取名为 vulhub/teamcity:2023.05.3 的镜像,用于启动 web 服务。

  2. 镜像来源于 vulhub 的 Docker Hub 仓库,标签版本为 2023.05.3

ERROR: Get "https://registry-1.docker.io/v2/": dial tcp 168.143.162.42:443: i/o timeout

  1. dial tcp 168.143.162.42:443
    Docker 尝试通过 TCP 协议与目标 IP 地址 168.143.162.42 的端口 443 建立连接。端口 443 是 HTTPS 使用的标准端口。
    这个 IP 地址是 Docker Hub 的服务器之一,Docker 客户端通过该地址访问 Docker Hub 来拉取镜像。

  2. i/o timeout
    这是一个网络超时错误,表示 Docker 在尝试与 Docker Hub 建立网络连接时等待的时间过长,导致连接失败。
    i/o timeout 意味着 Docker 发送了一个请求,但未能在预期时间内收到响应,因此中止了操作。

测试排障

1
2
└─# docker pull vulhub/teamcity:2023.05.3
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-compose的问题,具体到网络问题

1
└─# nslookup registry-1.docker.io

DNS服务有效

1
2
└─# curl https://registry-1.docker.io/v2/
curl: (7) Failed to connect to registry-1.docker.io port 443 after 21121 ms: Couldn't connect to server

连接服务器失败

curl命令来自英文词组CommandLine URL的缩写,其功能是在Shell终端界面中基于URL规则进行文件传输工作。 curl是一款综合性的传输工具,可以上传也可以下载,支持HTTP、HTTPS、FTP等30余种常见协‍议。

1
ping ip服务器

ping:是用来探测本机与网络中另一主机之间是否可达的命令,如果两台主机之间 ping 不通,则表明这两台主机不能建立起连接。

ping 命令是基于 ICMP 协议来工作的,

ICMP 全称为 Internet 控制报文协议( Internet Control Message Protocol)。

ping 命令会发送一份 ICMP 回显请求报文给目标主机,并等待目标主机返回 ICMP回显应答。因为 ICMP 协议会要求目标主机在收到消息之后,必须返回 ICMP 应答消息给源主机,如果源主机在一定时间内收到了目标主机的应答,则表明两台主机之间网络是可达的。

猜测:

  1. 被墙了(但是采用的是和以前相同的环境)

被Q

  1. 采用国内镜像源(但是国内镜像源已配置,可能未生效)
  2. 借用主机的梯子
  3. 虚拟机再建梯子

发现原因,解决方法

docker镜像源失效。/(ㄒoㄒ)/~~

添加了新的镜像源就解决了,三条命令

1
2
3
4
5
vim /etc/docker/daemon.json

systemctl restart docker

docker-compose up -d