Docker 镜像推送至 Coding 制品仓库超时问题排查与解决
Docker 镜像推送至 Coding 制品仓库超时问题排查与解决
在将 Docker 镜像推送至 Coding 的制品仓库时,可能会遇到 docker push
命令超时失败的问题。但使用 curl -i http://xxx.coding.xxxx.xx
测试时,连接却能成功建立。以下是排查过程及解决方案。
问题排查
1. 域名解析检查
首先,我们需要排查网络连接问题,特别是域名解析是否正常。可以通过执行 nslookup
命令来进行检查。
# 检查域名能否解析
nslookup xxx.coding.xxxx.xx
如果该命令能正常返回域名对应的 IP 地址,说明域名解析功能正常。
2. 端口连通性测试
接着使用telnet命令,测试目标端口443的连通性,根据telnet
测试结果(Connection refused
),问题已明确:客户端能解析 Coding 仓库域名,但端口443拒绝连接
# 检查端口连通性(需安装telnet)
telnet xxx.coding.xxxx.xx 443
初步推测是因为docker push
命令默认使用 HTTPS 协议,而 Coding 仓库使用的是 HTTP 协议
解决方案
1. 配置 Docker 信任 HTTP 仓库
要让 Docker 能够与使用 HTTP 协议的私有镜像仓库进行通信,需要在 Docker 配置中添加 insecure-registries
# 1. 编辑Docker配置文件
vim /etc/docker/daemon.json# 2. 添加以下内容
{"insecure-registries": ["xxx.coding.xxxx.xx"]
}# 3. 重启Docker服务
sudo systemctl restart docker
2. 验证配置是否生效
配置完成后,需要验证 insecure-registries
配置是否已成功添加到 Docker 配置中
# 检查Docker配置是否包含insecure-registries
docker info | grep -A5 'Insecure Registries'# 预期输出示例:
# Insecure Registries:
# xxx.coding.xxxx.xx
# 127.0.0.0/8
3. 重新登录并推送镜像
完成配置验证后,就可以使用 HTTP 协议重新登录 Coding 仓库,并推送 Docker 镜像了
# 使用HTTP协议登录(无需指定端口,默认80)
docker login xxx.coding.xxxx.xx -u your_username -p your_password# 推送镜像(确保镜像标签包含仓库域名)
docker tag your-image:tag xxx.coding.xxxx.xx/your-image:tag
docker push xxx.coding.xxxx.xx/your-image:tag