docker报错Error response from daemon: Get https://registry-1.docker.io/v2/library/hello-world/manifest

docker下载镜像出现Error response from daemon: Get https://registry-1.docker.io/v2/library/nginx/manifests/1.14-alpine: Get https://auth.docker.io/token?scope=repository%3Alibrary%2Fnginx%3Apull&service=registry.docker.异常

今天在linux系统下学习Docker的时候出现了镜像下载报错的问题提示请求超时,查阅各种论坛没解决最终在一位大牛的帮助下才弄好,接下来给三种解决方案。

主要原因

  1. 解析ip不可用
  2. 是因为dns域名没有解析的原因;

第一种原因解决方案(解析ip不可用)

第一种原因是因为docker解析的IP失效或者不能正常访问所引起的请求超时这个时候我们就想要去配置docker的解析ip
我们想要下载一个big命令如下:

[root@wangqi]# yum install bind-utils

下载成功后使用查询可用big查询可用的ip:
dig @114.114.114.114 registry-1.docker.io
这个时候就会出现很多的ip:

; <<>> DiG 9.9.4-RedHat-9.9.4-74.el7_6.2 <<>> @114.114.114.114 registry-1.docker.io
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 64159
;; flags: qr rd ra; QUERY: 1, ANSWER: 8, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SE

<think>好的,我现在需要帮助用户解决他们遇到的Docker镜像拉取问题。根据用户提供的日志信息,他们在执行`docker pull`和`docker run`时遇到了连接被拒绝的问题,同时尝试查看registry日志时发现日志文件不存在。 首先,用户之前的问题是在拉取镜像时出现“unexpected EOF”错误,现在的新错误是“connection refused”。这表明问题可能已经从网络不稳定转变为仓库服务不可达。用户执行`tail -f /var/log/docker/registry.log`时提示文件不存在,这说明可能Docker registry服务没有正确安装或配置,或者日志路径不同。 接下来,用户运行`docker run`时,Docker尝试通过HTTPS(端口443)访问仓库,但连接被拒绝。这可能意味着仓库服务没有在443端口运行,或者防火墙阻止了该端口的连接。另外,可能仓库配置为使用HTTP而不是HTTPS,但客户端默认使用HTTPS,导致连接失败。 需要分步骤排查: 1. **确认Docker registry服务是否运行**:使用`systemctl status docker-registry`或检查容器状态,确认服务是否正在运行。 2. **检查仓库监听的端口**:默认情况下,Docker registry使用5000端口,但用户尝试的是443端口,这可能配置有误。 3. **验证防火墙设置**:确保仓库服务器的防火墙允许来自客户端的5000或443端口的连接。 4. **检查客户端配置**:如果仓库使用HTTP而非HTTPS,客户端需要将仓库地址添加到insecure-registries配置中。 5. **确认镜像存在性**:直接使用curl检查仓库的API,确认镜像是否存在。 另外,用户之前可能配置了HTTPS访问,但证书有问题或未正确设置,导致连接失败。如果用户没有配置TLS,应该改用HTTP并配置Docker客户端信任私有仓库。 可能需要指导用户检查仓库服务状态、端口监听情况,调整Docker客户端配置,以及正确设置防火墙规则。同时,确保镜像已经正确推送到仓库,并且标签正确。</think>--- ### **问题定位** 根据最新操作反馈,当前存在两个关键问题: 1. **Registry日志文件缺失**:说明Docker私有仓库服务可能未正常运行或日志路径配置错误 2. **HTTPS连接被拒绝**:客户端尝试通过HTTPS协议访问仓库失败(默认使用443端口) --- ### **分步解决方案** #### **阶段一:验证仓库服务状态** ```bash # 1. 检查registry服务是否运行 systemctl status docker-registry # 如果是systemd管理 # 或检查容器状态(如果通过容器部署) docker ps | grep registry # 2. 确认仓库监听端口 netstat -tulnp | grep -E '5000|443' ``` **预期结果:** - 如果使用标准配置,应看到`0.0.0.0:5000`的监听 - 若显示`10.8.3.219:443`则需检查证书配置 --- #### **阶段二:修复HTTPS访问问题** ##### **情况A:未配置HTTPS证书** 如果未配置TLS证书,强制客户端使用HTTP协议: 1. 修改Docker客户端配置(所有需访问仓库的主机) ```bash # 编辑配置文件 vim /etc/docker/daemon.json # 添加以下内容(如果文件已存在请保持格式): { "insecure-registries": ["10.8.3.219:5000"] } # 重启Docker服务 systemctl restart docker ``` 2. 修改镜像地址为HTTP协议: ```bash docker pull 10.8.3.219:5000/crm/crm-web:master ``` ##### **情况B:需要配置HTTPS证书** 如果必须使用HTTPS: ```bash # 在仓库服务器创建证书(示例) mkdir -p /certs openssl req -newkey rsa:4096 -nodes -sha256 \ -keyout /certs/domain.key -x509 -days 365 \ -out /certs/domain.crt \ -subj "/CN=10.8.3.219" -addext "subjectAltName = IP:10.8.3.219" # 启动registry容器(示例) docker run -d \ -p 443:443 \ -v /certs:/certs \ -e REGISTRY_HTTP_ADDR=0.0.0.0:443 \ -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \ -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \ --name registry \ registry:2 ``` --- #### **阶段三:检查防火墙规则** ```bash # 在仓库服务器10.8.3.219操作 # 查看防火墙状态 firewall-cmd --list-all # CentOS/RHEL ufw status # Ubuntu # 开放对应端口(以firewalld为例) firewall-cmd --permanent --add-port=5000/tcp firewall-cmd --permanent --add-port=443/tcp firewall-cmd --reload ``` --- ### **关键验证步骤** ```bash # 在客户端10.8.3.213测试连接 # 方法1:使用HTTP协议 curl -v http://10.8.3.219:5000/v2/_catalog # 方法2:使用HTTPS协议(需提前分发证书) curl --cacert /path/to/domain.crt https://10.8.3.219/v2/_catalog ``` **预期响应:** ```json {"repositories":["crm/crm-web"]} # 显示仓库中的镜像列表 ``` --- ### **错误场景模拟与解决** #### **场景:registry服务未运行** ```bash # 在仓库服务器启动registry(临时测试) docker run -d -p 5000:5000 --name test-registry registry:2 # 客户端测试推送镜像 docker tag alpine:latest 10.8.3.219:5000/my-alpine docker push 10.8.3.219:5000/my-alpine ``` #### **典型错误修复:** ```log Error response from daemon: Get "https://10.8.3.219:5000/v2/": http: server gave HTTP response to HTTPS client ``` **解决方案:** 必须按前文配置`insecure-registries` --- ### **补充建议** 1. **日志配置**:为registry容器添加日志持久化 ```bash docker run -d \ -v /var/log/registry:/var/lib/registry/logs \ -p 5000:5000 \ --name registry \ registry:2 ``` 2. **镜像验证**: ```bash # 检查镜像层完整性 docker manifest inspect 10.8.3.219:5000/crm/crm-web:master ``` --- ### **架构示意图** ```mermaid sequenceDiagram participant Client participant Registry Client->>Registry: HTTPS请求(443端口) alt 端口未开放 Registry-->>Client: Connection refused else 服务未运行 Registry-->>Client: No response else 证书错误 Registry-->>Client: x509错误 end ``` 请根据实际测试结果反馈更多细节,以便进一步精准定位问题。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值