更新时间:2024-10-17 GMT+08:00

容器镜像拉取失败

问题描述

SWR的容器镜像无法拉取到边缘节点。

排查思路

容器镜像拉取失败主要原因如图1所示,在此基础上,您可以根据表1逐步排查。

图1 排查思路
表1 排查思路

可能原因

处理措施

镜像地址错误

镜像地址错误

没有镜像拉取权限

没有镜像拉取权限

边缘节点无法解析SWR和OBS域名

边缘节点无法解析SWR和OBS的域名

边缘节点无法连接SWR

边缘节点无法连接SWR

磁盘空间不足

磁盘空间不足

镜像过大而带宽不足

镜像过大而带宽不足

容器引擎异常

容器引擎异常

镜像地址错误

执行如下操作确认镜像地址是否正确,如不正确请替换为正确的地址。

  1. 登录容器镜像服务控制台。
  2. 在左侧菜单栏选择“我的镜像”,单击右侧列表中的镜像名称。
  3. “镜像版本”页签中,单击对应镜像版本“下载指令”列的复制图标,复制镜像下载地址。
    图2 确认下载指令

没有镜像拉取权限

获取登录指令并登录,尝试拉取镜像。如果无法登录或无法拉取镜像,则说明无权限。

图3 获取登录指令

边缘节点无法解析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 swr

      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文件。

边缘节点无法连接SWR

  1. 检查边缘节点到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的域名解析问题。

    如果您确认域名可以解析,请依据您为边缘节点设定的访问外网方式,确认您的容器可以访问外网。确认以下问题:

    1. 确认是否为节点配置了代理

      env| grep proxy

      env| grep PROXY

    2. 确认是否为容器引擎配置了代理

      systemctl show --property=Environment docker

      如果使用代理访问外网,请确认节点和容器引擎的代理配置正确。

  2. 尝试再次登录并下载镜像。

    如果显示鉴权失败,请提交工单

磁盘空间不足

节点磁盘不足导致镜像拉取失败(磁盘问题)

df -h

查看节点磁盘空间(/var/lib/docker/*),对比您的镜像的大小(一般镜像大小要比SWR界面显示要大),您的磁盘剩余空间是否可以下载镜像成功。如果节点空间不足,镜像拉取过程中会明确报错。

镜像过大而带宽不足

请确认镜像的大小以及外网带宽,看是否会导致镜像下载超时。

例如:镜像大小为1G,而边缘节点的下载速度约200k/s。则下载时长约为:1024M/0.2M=5129S=85.3min。远超一个应用正常下发时长,因此应用无法下载成功。

针对这类问题,建议您首先将镜像下载至边缘节点后,再下发应用,省去下载步骤。

容器引擎异常

如果执行docker pull触发容器引擎本身报错,由于容器引擎为用户自装软件,各用户安装版本等各不相同,不同的版本的容器引擎都可能存在一些性能缺陷,为快速解决问题,您可优先在网上查找容器引擎报错。

您可以尝试通过重启容器引擎规避问题:

systemctl restart docker

另外,建议您使用IEF推荐的稳定版本的容器引擎,容器引擎版本要求请参见使用要求