Oracle Cloud实例无法访问Docker Registry,求排查方案
排查Oracle Cloud私有子网实例Podman拉取镜像超时的步骤
你遇到的错误日志如下:
Trying to pull docker.io/library/alpine:latest... Error: initializing source docker://alpine:latest: pinging container registry registry-1.docker.io: Get "https://registry-1.docker.io/v2/": dial tcp 3.216.34.172:443: i/o timeout
按以下步骤逐一排查:
验证NAT网关配置有效性
- 登录实例执行
curl -v https://registry-1.docker.io/v2/,直接测试与registry的连通性,排除Podman本身的干扰 - 进入OCI控制台,确认NAT网关已关联实例所在的私有子网,且网关处于运行状态
- 检查子网绑定的路由表:必须存在一条目标为
0.0.0.0/0、下一跳指向NAT网关的路由规则,且规则为启用状态
- 登录实例执行
检查实例本地网络配置
- 查看DNS配置:执行
cat /etc/resolv.conf,确认包含有效DNS服务器(如OCI内置的169.254.169.254或公共DNS8.8.8.8) - 测试DNS解析:执行
nslookup registry-1.docker.io,确认能解析出正确IP(如错误日志中的3.216.34.172),解析失败则优先修复DNS - 测试端口连通性:用
nc -zv registry-1.docker.io 443或telnet registry-1.docker.io 443,确认TCP 443端口能建立连接
- 查看DNS配置:执行
核对安全组与网络安全组(NSG)规则
- 实例关联的安全组:必须允许出站TCP 443(HTTPS)和UDP 53(DNS)流量到
0.0.0.0/0,别只关注入站规则 - 子网或实例绑定的NSG:同样需要放行上述出站流量,NSG规则优先级高于安全组,若有拒绝规则会直接阻断
- 实例关联的安全组:必须允许出站TCP 443(HTTPS)和UDP 53(DNS)流量到
排查Podman本地配置
- 检查代理设置:执行
podman info | grep -i proxy,若存在错误的代理配置,会导致无法正常访问公网registry - 重置registry配置:删除
/etc/containers/registries.conf.d/下的自定义配置文件,恢复默认设置后重新尝试拉取
- 检查代理设置:执行
确认OCI租户网络限制
- 检查租户是否有出站流量配额限制:进入OCI控制台租户设置,查看是否存在网络流量上限导致无法访问
- 确认实例无公网IP冲突:私有子网实例不应分配公网IP,若误分配会导致路由异常,需解绑公网IP
内容的提问来源于stack exchange,提问作者Todd
相关产品推荐
相关产品推荐

