
# 容器镜像拉取失败
#### 问题描述
SWR的容器镜像无法拉取到边缘节点。
#### 排查思路
容器镜像拉取失败主要原因如[图1]所示，在此基础上，您可以根据[表1]逐步排查。
图1排查思路   
![](https://support.huaweicloud.com/ief_faq/zh-cn_image_0286839661.png "点击放大")
 表1排查思路 
| 可能原因              | 处理措施                                                     |
|:---|:---|
| 镜像地址错误            | [镜像地址错误]            |
| 没有镜像拉取权限          | [没有镜像拉取权限]         |
| 边缘节点无法解析SWR和OBS域名 | [边缘节点无法解析SWR和OBS的域名] |
| 边缘节点无法连接SWR       | [边缘节点无法连接SWR]        |
| 磁盘空间不足            | [磁盘空间不足]            |
| 镜像过大而带宽不足         | [镜像过大而带宽不足]          |
| 容器引擎异常            | [容器引擎异常]            |
   
 #### 镜像地址错误
执行如下操作确认镜像地址是否正确，如不正确请替换为正确的地址。
1. 登录[SWR控制台](https://console.huaweicloud.com/swr/#/swr/dashboard)。
2. 在左侧菜单栏选择"我的镜像"，单击右侧列表中的镜像名称。
3. 在"镜像版本"页签中，单击对应镜像版本"下载指令"列的复制![](https://support.huaweicloud.com/ief_faq/zh-cn_image_0286839937.png)图标，复制镜像下载地址。
   图2确认下载指令   
   ![](https://support.huaweicloud.com/ief_faq/zh-cn_image_0000001190173049.png "点击放大") 
 
 #### 没有镜像拉取权限
获取登录指令并登录，尝试拉取镜像。如果无法登录或无法拉取镜像，则说明无权限。
图3获取登录指令   
![](https://support.huaweicloud.com/ief_faq/zh-cn_image_0000001144056344.png "点击放大")
 #### 边缘节点无法解析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**
   ![](https://support.huaweicloud.com/ief_faq/public_sys-resources/note_3.0-zh-cn.png)
   不同区域域名不同。
   看边缘节点网络是否连通，如果网络不通，请确认您的网络策略，是否可以连接外网。如果边缘节点测试网络连通，但是执行docker login命令会卡住，请再次依据[边缘节点无法解析SWR和OBS的域名]确认SWR的域名解析问题。
   如果您确认域名可以解析，请依据您为边缘节点设定的访问外网方式，确认您的容器可以访问外网。确认以下问题：
   1. 确认是否为节点配置了代理 **env\| grep proxy**
      **env\| grep PROXY**
      
   
   2. 确认是否为容器引擎配置了代理 **systemctl show --property=Environment docker**
      如果使用代理访问外网，请确认节点和容器引擎的代理配置正确。
      
   
   
   
   
2. 尝试再次登录并下载镜像。 
   如果显示鉴权失败，请[提交工单](https://console.huaweicloud.com/ticket/#/ticketindex/createIndex)。
   
   
 
 #### 磁盘空间不足
节点磁盘不足导致镜像拉取失败（磁盘问题）
**df -h**
查看节点磁盘空间（/var/lib/docker/\*），对比您的镜像的大小（一般镜像大小要比SWR界面显示要大），您的磁盘剩余空间是否可以下载镜像成功。如果节点空间不足，镜像拉取过程中会明确报错。
 #### 镜像过大而带宽不足
请确认镜像的大小以及外网带宽，看是否会导致镜像下载超时。
例如：镜像大小为1G，而边缘节点的下载速度约200k/s。则下载时长约为：1024M/0.2M=5129S=85.3min。远超一个应用正常下发时长，因此应用无法下载成功。
针对这类问题，建议您首先将镜像下载至边缘节点后，再下发应用，省去下载步骤。
 #### 容器引擎异常
如果执行docker pull触发容器引擎本身报错，由于容器引擎为用户自装软件，各用户安装版本等各不相同，不同的版本的容器引擎都可能存在一些性能缺陷，为快速解决问题，您可优先在网上查找容器引擎报错。
您可以尝试通过重启容器引擎规避问题：
**systemctl restart docker**
另外，建议您使用IEF推荐的稳定版本的容器引擎，容器引擎版本要求请参见[使用要求](https://support.huaweicloud.com/productdesc-ief/ief_productdesc_0006.html)。
