容器镜像拉取失败
问题描述
SWR的容器镜像无法拉取到边缘节点。
排查思路
镜像地址错误
执行如下操作确认镜像地址是否正确,如不正确请替换为正确的地址。
- 登录容器镜像服务控制台。
- 在左侧菜单栏选择“我的镜像”,单击右侧列表中的镜像名称。
- 在“镜像版本”页签中,单击对应镜像版本“下载指令”列的复制图标,复制镜像下载地址。
图2 确认下载指令
边缘节点无法解析SWR和OBS的域名
检查SWR和OBS的域名是否能解析。SWR镜像拉取不仅要可以访问SWR,同时也要可以访问OBS,因为SWR镜像实际存储在OBS中。
请确认您的节点是否可以解析SWR和OBS的域名,如果域名无法解析,将会导致镜像拉取失败。
- 验证方案1:
cat /var/IEF/sys/log/edge_core.log| grep lookup
- 验证方案2:
ping swr.cn-north-4.myhuaweicloud.com
ping obs.cn-north-4.myhuaweicloud.com
看是否可以解析出IP,看是否可以解析域名,如果在边缘节点上域名可以解析,但是登录SWR镜像仓库一直卡住,请确认您的容器引擎的域名解析方式如何配置的。如果无法解析出IP,请执行如下步骤查看域名解析服务器配置是否被修改。
- 如果配置了本地hosts的做域名与IP地址的映射,请检查配置是否正确。
cat /etc/hosts | grep obs
请在环境正确的机器上解析出正确IP后配置,若配置错误会导致域名解析错误。
- 如果您是通过/etc/resolv.conf文件配置的域名解析服务器来解析域名,请确认配置的域名解析服务器是否正确,该域名解析服务器是否可以解析这两个域名。
注意:如果通过公网访问IEF和容器引擎,中国大陆DNS解析服务器一般设置为114.114.114.114。并且确认您的域名解析服务器配置正确,可以在有效时间内解析到域名。
如果配置多个域名解析服务器(其中包含114.114.114.114),但容器引擎仍然无法解析域名,建议注释其他域名解析服务器,只留114.114.114.114尝试。
- 是否配置了代理,代理服务器是否可以解析这两个域名。
- 为边缘节点同时开两个终端。
在一个终端上保持:ping swr.cn-north-4.myhuaweicloud.com
在另外一个终端抓包:tcpdump -nn -i eth0 udp port 53
确认使用域名解析服务器的顺序,域名解析情况,最终通过那个域名解析服务器解析出域名(如果配置了hosts文件,不会进行域名解析)。
- 在一个终端上保持:docker login XXX(在SWR复制的临时登录命令)
在另外一个界面抓包:tcpdump -nn -i eth0 udp port 53
确认使用域名解析服务器的顺序,域名解析情况,最终通过那个域名解析服务器解析出域名(如果配置了hosts文件,不会进行域名解析)
- 确认上面两步域名解析服务器使用是否一致,域名是否可以解析,请保证您的机器可以在有效时间内解析SWR和OBS的域名,您可以修改/etc/resolv.conf文件并配置hosts文件。
- 为边缘节点同时开两个终端。
- 如果配置了本地hosts的做域名与IP地址的映射,请检查配置是否正确。
边缘节点无法连接SWR
- 检查边缘节点到SWR的网络是否能连接。
在边缘节点上:
curl -i -k -v swr.cn-north-4.myhuaweicloud.com
curl -i -k -v obs.cn-north-4.myhuaweicloud.com
不同区域域名不同。
看边缘节点网络是否连通,如果网络不通,请确认您的网络策略,是否可以连接外网。如果边缘节点测试网络连通,但是执行docker login命令会卡住,请再次依据边缘节点无法解析SWR和OBS的域名确认SWR的域名解析问题。
如果您确认域名可以解析,请依据您为边缘节点设定的访问外网方式,确认您的容器可以访问外网。确认以下问题:
- 尝试再次登录并下载镜像。
如果显示鉴权失败,请提交工单。
磁盘空间不足
节点磁盘不足导致镜像拉取失败(磁盘问题)
df -h
查看节点磁盘空间(/var/lib/docker/*),对比您的镜像的大小(一般镜像大小要比SWR界面显示要大),您的磁盘剩余空间是否可以下载镜像成功。如果节点空间不足,镜像拉取过程中会明确报错。
镜像过大而带宽不足
请确认镜像的大小以及外网带宽,看是否会导致镜像下载超时。
例如:镜像大小为1G,而边缘节点的下载速度约200k/s。则下载时长约为:1024M/0.2M=5129S=85.3min。远超一个应用正常下发时长,因此应用无法下载成功。
针对这类问题,建议您首先将镜像下载至边缘节点后,再下发应用,省去下载步骤。
容器引擎异常
如果执行docker pull触发容器引擎本身报错,由于容器引擎为用户自装软件,各用户安装版本等各不相同,不同的版本的容器引擎都可能存在一些性能缺陷,为快速解决问题,您可优先在网上查找容器引擎报错。
您可以尝试通过重启容器引擎规避问题:
systemctl restart docker
另外,建议您使用IEF推荐的稳定版本的容器引擎,容器引擎版本要求请参见使用要求。