docker安装image过程中ERROR: Get “https://registry-1.docker.io/v2/“: net/http: TLS handshake timeout

本文记录了在尝试从Docker Hub下载镜像时遇到的TLS握手超时错误,通过查询IP并更新hosts文件来解决。使用dig命令查询registry-1.docker.io的IP地址,发现多个可用的A记录,并将其中一个添加到hosts文件中,从而成功解决网络连接问题。

ERROR: Get “https://registry-1.docker.io/v2/”: net/http: TLS handshake timeout

  • 查询可用IP dig @114.114.114.114 registry-1.docker.io
➜  harbor dig @114.114.114.114 registry-1.docker.io

; <<>> DiG 9.10.6 <<>> @114.114.114.114 registry-1.docker.io
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 22970
;; flags: qr rd ra; QUERY: 1, ANSWER: 8, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;registry-1.docker.io.		IN	A

;; ANSWER SECTION:
registry-1.docker.io.	38	IN	A	52.71.127.58
registry-1.docker.io.	38	IN	A	34.236.198.185
registry-1.docker.io.	38	IN	A	52.72.255.218
registry-1.docker.io.	38	IN	A	54.174.228.110
registry-1.docker.io.	38	IN	A	3.230.13.96
registry-1.docker.io.	38	IN	A	52.72.252.48
registry-1.docker.io.	38	IN	A	34.203.135.183
registry-1.docker.io.	38	IN	A	52.21.28.242

;; Query time: 32 msec
;; SERVER: 114.114.114.114#53(114.114.114.114)
;; WHEN: Mon Apr 25 11:12:45 CST 2022
;; MSG SIZE  rcvd: 177
  • 更改hosts,加入如下信息
➜  vi /etc/hosts

52.71.127.58 registry-1.docker.io
### 问题分析 在 Docker 连接镜像仓库时,出现如下错误: ``` Error response from daemon: Get https://registry-1.docker.io/v2/: x509: certificate signed by unknown authority ``` 此错误表明 Docker 客户端在尝试连接 HTTPS 仓库时,无法验证服务器提供的 TLS/SSL 证书。原因通常是证书颁发机构(CA)未被信任或证书链未正确配置。Docker 默认会严格验证 TLS 证书,因此如果证书是自签名的或由内部 CA 签发的,就会导致此错误。 ### 解决方案 #### 方法一:配置 Docker 信任自签名证书 如果目标仓库使用的是自签名证书或由内部 CA 签发的证书,则需要将该证书添加到 Docker 的信任库中。 1. **获取证书** 从目标仓库服务器导出证书文件(如 `registry-1.docker.io.crt`)。 2. **将证书复制到 Docker 的证书信任目录** 在 Linux 系统上,通常为 `/etc/docker/certs.d/<registry-hostname>/`: ```bash sudo mkdir -p /etc/docker/certs.d/registry-1.docker.io sudo cp registry-1.docker.io.crt /etc/docker/certs.d/registry-1.docker.io/ ``` 3. **重启 Docker 服务** ```bash sudo systemctl restart docker ``` #### 方法二:配置 Insecure Registry 如果无法信任证书,或者仅用于测试环境,可以将仓库地址配置为不安全的注册表(insecure registry)。 1. **编辑 Docker 守护进程配置文件** 通常位于 `/etc/docker/daemon.json`,添加以下内容: ```json { "insecure-registries": ["registry-1.docker.io"] } ``` 2. **重启 Docker 服务** ```bash sudo systemctl daemon-reload sudo systemctl restart docker ``` > 注意:此方法降低了安全性,不建议在生产环境中使用。 #### 方法三:使用 `--insecure-registry` 启动参数 如果使用的是较旧版本的 Docker 或未使用 `daemon.json` 配置文件,可以在启动参数中添加 `--insecure-registry`: 1. **修改 Docker 服务启动参数** 编辑 `/etc/default/docker` 或 `/etc/sysconfig/docker`,修改 `DOCKER_OPTS`: ```bash DOCKER_OPTS="--insecure-registry registry-1.docker.io" ``` 2. **重启 Docker 服务** ```bash sudo systemctl restart docker ``` #### 方法四:使用代理或企业证书 如果在企业网络中,证书可能由内部 CA 签发。此时应将 CA 证书添加到系统的信任链中: 1. **将 CA 证书复制到系统证书目录** ```bash sudo cp internal-ca.crt /usr/local/share/ca-certificates/ ``` 2. **更新证书信任链** ```bash sudo update-ca-certificates ``` 3. **重启 Docker 服务** ```bash sudo systemctl restart docker ``` ### 示例代码 以下是一个配置 `daemon.json` 的完整示例: ```json { "insecure-registries": ["registry-1.docker.io"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2" } ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值