文档首页/ 容器镜像服务 SWR/ 常见问题/ 故障类/ 为什么docker pull指令执行失败?
更新时间:2025-03-03 GMT+08:00
分享

为什么docker pull指令执行失败?

x509: certificate signed by unknown authority

问题现象:使用docker pull拉取镜像,报错“x509: certificate signed by unknown authority”。

问题原因:

  • 容器引擎客户端和SWR之间使用HTTPS的方式进行通信,客户端会对服务端的证书进行校验。如果客户端安装的根证书不完整,会报如下错误:“x509: certificate signed by unknown authority”。
  • 容器引擎客户端配置了Proxy导致。

解决方法:

  • 如果您信赖服务端,跳过证书认证,那么可以手动配置容器引擎的启动参数,配置如下(其中地址配置成需要的即可,选择一个配置即可):
    • /etc/docker/daemon.json(如果没有可以手动创建),在该文件内添加如下配置(注意缩进,2个空格):
      {
        "insecure-registries":["镜像仓库地址"]
      }
    • /etc/sysconfig/docker:
      INSECURE_REGISTRY='--insecure-registry=镜像仓库地址'

    添加配置后执行如下命令重启:systemctl restart dockerservice restart docker。

  • 执行docker info命令,检查Proxy配置是否正确,修改为正确的Proxy配置。

Error response from daemon

问题现象:使用docker pull拉取官方镜像,报错“Error response from daemon: Get "https://index.docker.io/v1/search?q=redis&n=25": dial tcp *.*.*.*: i/o timeout”。

问题原因:根据Docker公司政策,2020年11月01日起将逐步向Docker Hub匿名和免费用户实施速率和拉取请求次数限制。所以,您构建服务拉取Docker Hub镜像,将可能受此影响导致构建失败。详情请查看国内网络访问dockerhub异常的公告

解决方法:建议您将需要的镜像从Docker Hub同步到SWR私有仓库使用

Error: remote trust data does not exist

问题现象:使用docker pull拉取镜像,报错“Error: remote trust data does not exist”。

问题原因:客户端开启镜像签名验证,而镜像没有镜像签名层。

解决方法:查看“/etc/profile”文件中的环境变量是否设置了DOCKER_CONTENT_TRUST=1,如果设置了,请将其改为DOCKER_CONTENT_TRUST=0,然后执行source /etc/profile生效。

不允许用户下载镜像

问题现象:使用客户端下载镜像,报如下所示错误:

“Not allow to login、upload or download image”

问题原因:用户大批量并发上传镜像或者攻击服务,系统把用户拉黑,用户无法登录和上传下载镜像。

解决方法
  • 请在30分钟之后重新尝试。
  • 通过提工单的形式,由运维工程师进行处理。

pull access deny

问题现象:拉取镜像的时候报错,详细报错见下图。

问题原因:您的账号没有拉取镜像的权限swr:repo:download或对应组织的权限。

解决办法

给您的用户添加镜像拉取的权限以及对应组织的权限,可通过以下两种方法进行授权:

方法一: 本地授权:使用具有SWR管理员权限的用户在组织管理页面授予要拉取镜像的用户目标组织的管理权限。授权操作请参见授权管理

方法二: 使用IAM细粒度授权,为用户授予自定义的权限策略,包含镜像拉取的权限,具体操作如下:

  1. 登录管理控制台
  2. 在页面上方选择“区域”后,单击页面左上方的,选择“管理与监管 > 统一身份认证服务 IAM”。
  3. 选择左侧导航树的“权限管理 > 权限”,单击右上角的“创建自定义策略”填写策略参数。策略名称自定义,策略配置方式选择“JSON视图”。填写策略内容如下(请将namespace1替换为您要拉取镜像所在的组织),配置完成后单击“确定”。

    {
        "Version": "1.1",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "swr:repo:download"
                ],
                "Resource": [
                    "SWR:*:*:repo:namespace1/*" 
                ]
            },
        ]
    }

  4. 选择左侧导航树的“用户组”,单击您的用户所在的用户组名称进入用户组详情页面,单击”授权”,将步骤3创建的权限添加给用户所在的用户组即可。
  5. 稍等1分钟待权限生效后进行重新拉取。

相关文档