为什么创建组织失败?
问题现象:创建组织失败,页面提示该组织已经存在,但在“组织管理”页面没有查询到该组织。
解决办法:组织名称全局唯一,即当前区域下,组织名称唯一。
创建组织时如果提示组织已存在,可能该组织名称已被其他用户使用,请重新设置一个组织名称。
CCE工作负载拉取SWR镜像异常,提示为“未登录”
当CCE工作负载无法正常拉取SWR的镜像,且提示“未登陆”时,请排查该工作负载的yaml文件中是否存在“imagePullSecrets”字段,且name参数值需固定为default-secret。
示例:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
strategy:
type: RollingUpdate
template:
metadata:
labels:
app: nginx
spec:
containers:
- image: nginximagePullPolicy: Always
name: nginx
imagePullSecrets:
- name: default-secret
为什么登录指令执行失败?
登录指令执行失败有以下几种情况:
- 容器引擎未安装正确,报如下所示错误:
“docker: command not found”
解决方法: 重新安装docker容器引擎。
由于容器镜像服务支持容器引擎1.11.2及以上版本上传镜像,建议下载对应版本。
安装容器引擎需要连接互联网,内网服务器需要绑定弹性公网IP后才能访问。
- 临时登录指令已过期或登录指令中区域项目名称、AK、登录密钥错误,报如下所示错误:
“unauthorized: authentication required”
解决方法: 登录容器镜像服务控制台,在左侧菜单栏选择“我的镜像”,单击右侧“客户端上传”获取登录指令。
a. 获取临时的登录指令:单击“生成临时登录指令”,在弹出的页面中单击复制登录指令。
b. 获取长期有效的登录指令:单击“如何获取长期有效登录指令”,具体方法请参见用户指南 > 镜像管理> 获取长期有效登录指令。
- 登录指令中镜像仓库地址错误,报如下所示错误:
“Error llgging in to v2 endpoint, trying next endpoint: Get https://{{endpoint}}/v2/: dial tcp: lookup {{endpoint}} on xxx.xxx.xxx.xxx:53 : no such host”
解决方法:
c. 修改登录指令中的镜像仓库地址。
镜像仓库地址格式: registry.区域项目名称.ctyun.cn,如“苏州”对应的镜像仓库地址为registry.cn-jssz1.ctyun.cn。
d. 获取临时登录指令。
- x509: certificate has expired or is not yet valid
长期有效登录指令中AK/SK被删除导致,请使用有效的AK/SK生成登录指令。
- x509: certificate signed by unknown authority
问题原因:
容器引擎客户端和SWR之间使用HTTPS的方式进行通信,客户端会对服务端的证书进行校验。如果服务端证书不是权威机构颁发的,则会报如下错误:x509: certificate signed by unknown authority
解决方法:
如果用户信赖服务端,跳过证书认证,那么可以手动配置Docker的启动参数,配置方法如下:
CentOS:
修改“/etc/docker/daemon.json”文件(如果没有,可以手动创建),在该文件内添加如下内容:
{
"insecure-registries": ["{镜像仓库地址}"]
}
Ubuntu:
修改“/etc/default/docker”文件,在DOCKER_OPTS配置项中增加如下内容:
DOCKER_OPTS="--insecure-registry {镜像仓库地址}"
EulerOS:
修改“/etc/sysconfig/docker”文件,在INSECURE_REGISTRY配置项中增加如下内容:
INSECURE_REGISTRY='--insecure-registry {镜像仓库地址}'
说明镜像仓库地址支持域名和IP形式。
- 域名:registry.区域项目名称.ctyun.cn。例如“苏州”的镜像仓库地址为:registry.cn-jssz1.ctyun.cn。
- IP:可通过ping镜像仓库地址(域名形式)获取。
配置完成后,执行systemctl restart docker重启容器引擎。
为什么使用客户端上传镜像失败?
denied: you do not have the permission
问题现象 :使用客户端上传镜像,报如下所示错误:
“denied: you do not have the permission”
问题原因 :
- 该组织名已被其他用户注册或当前SWR组织数量已超过配额。
- docker login命令使用IAM用户的AK、SK生成,没有对应组织的权限。
解决方法 :
- 该组织名已被其他用户注册时:建议您先创建组织然后再上传镜像。
- SWR组织数量超过配额时:单个用户的组织数量限制为5个,您可以将镜像上传到已存在的组织下,也可以提交工单申请增加配额。
- 没有对应组织的权限:使用帐号授权后,可以正常推送。
denied: Image organization does not exist, you should create it first
问题现象 :使用客户端上传镜像,报如下所示错误:
“denied: Image organization does not exist, you should create it first”
问题原因 :docker push命令中的组织名称不存在。
解决方法 :请先创建组织,再重新上传。
tag does not exist: xxxxxx或An image does not exist locally with the tag: xxxxxx
问题现象 :使用客户端上传镜像,报如下所示错误:
“tag does not exist: xxxxxx”
或
“An image does not exist locally with the tag: xxxxxx”
问题原因 :上传的镜像或镜像版本不存在。
解决方法 :通过docker images查看本地镜像,确认要上传的镜像名称及版本后,重新上传镜像。
name invalid: 'repository' is invalid
问题现象 :使用客户端上传镜像,报如下所示错误:
“name invalid: 'repository' is invalid”
问题原因 :组织命名或镜像命名不规范。
解决方法 :以下分别是组织名(namespace)和仓库名(repository)的命名正则表达式:
namespace:^([a-z]+(?:(?:(?:_|__|[-]*)[a-z0-9]+)+)?)$,长度范围为:1-64;
repository:^([a-z0-9]+(?:(?:(?:_|__|[-]*)[a-z0-9]+)+)?)$,长度范围为:1-128。
您可以按照上述命名规范,重新指定上传的组织和镜像名称。
errorDetail":{"message":"error parsing HTTP 404 response body: no error details found in HTTP response body
问题现象 :使用客户端上传镜像,报如下所示错误:
{"errorDetail":{"message":"error parsing HTTP 404 response body: no error details found in HTTP response body: "{"code":404,"message":"Not Found"}""},"error":"error parsing HTTP 404 response body: no error detail s found in HTTP response body: "
问题原因 :连接不上镜像仓库,网络不通。
解决办法 :请检查网络后重试。
- 内网访问
当您使用的安装容器引擎的客户端为云上的ECS或CCE节点,且机器与容器镜像仓库在同一区域时,上传下载镜像走内网链路。您无需进行任何访问配置,直接访问SWR即可。
- 公网访问
该场景下安装容器引擎的机器为云上的ECS或CCE节点,机器与容器镜像仓库不在同一区域,上传下载镜像走公网链路,机器需要绑定弹性公网IP。
为什么通过页面上传镜像失败?
SWR对镜像的命名和地址有严格的规范。如果镜像的命名不规范或镜像地址不规范都会导致镜像上传失败。
镜像格式不合法或鉴权失败
问题现象 :通过页面上传镜像,出现“镜像格式不合法”或“鉴权失败”的报错。
问题原因 :镜像地址不规范,导致上传失败。
镜像地址各个部分的含义如下,最后的tag(版本号)可省略,如果省略则表示latest版本,其余部分均不可省略,且不可多余。
样例:registry.cn-jssz1.ctyun.cn/repo_namespace/repo_name:tag
- registry.cn-jssz1.ctyun.cn为容器镜像服务的镜像仓库地址。
- repo_namespace为组织名称,命名正则表达式为^([a-z]+(?:(?:(?:_|__|[-]*)[a-z0-9]+)+)?)$,长度范围为:1-64。
- repo_name:tag为镜像名称和版本号,镜像命名正则表达式为^([a-z0-9]+(?:(?:(?:_|__|[-]*)[a-z0-9]+)+)?)$,长度范围为:1-128。
您可以将镜像解压,打开文件manifest.json文件查看RepoTags字段的值是否符合上述规范。
解决方法 :按照命名规范,重新给镜像打tag,然后使用docker save命令保存镜像,然后再使用页面上传。
注意SWR判定镜像名是否合法不是以用户在界面上传镜像时的文件名为依据,而是依据镜像包中的repositories和manifest.json文件。
一直卡在上传界面直到超时
问题现象 :通过页面上传镜像,一直卡在上传界面直到超时。
问题原因 :
- 镜像命名不规范,导致上传失败。
- 页面上传走公网链路,可能会因为网络不稳定导致传输异常。
解决方法 :
- 您可以按照镜像命名规范修改镜像名称后,重新上传镜像。
- 建议更换网络环境,或者通过容器引擎客户端上传。
为什么docker pull指令执行失败?
x509: certificate sigined by unknown authority
问题现象: 使用docker pull拉取镜像,报错“x509: certificate sigined by unknown authority”。
问题原因:
- 容器引擎客户端和SWR之间使用HTTPS的方式进行通信,客户端会对服务端的证书进行校验。如果客户端安装的根证书不完整,会报如下错误:“x509: certificate sigined by unknown authority”。
- 容器引擎客户端配置了Proxy导致。
解决方法:
- 如果您信赖服务端,跳过证书认证,那么可以手动配置容器引擎的启动参数,配置如下(其中地址配置成需要的即可,选择一个配置即可):
/etc/docker/daemon.json(如果没有可以手动创建),在该文件内添加如下配置(注意缩进,2个空格):
{
"insecure-registries":["镜像仓库地址"]
}
/etc/sysconfig/docker:
INSECURE_REGISTRY='--insecure-registry=镜像仓库地址'
添加配置后执行如下命令重启:systemctl restart docker或service restart docker。
- 执行docker info命令,检查Proxy配置是否正确,修改为正确的Proxy配置。
Error response from daemon
问题现象: 使用docker pull拉取官方镜像,如docker pull elasticsearch:5时,报错“Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)”。
问题原因: Docker默认的源为国外官方源,镜像拉取速度较慢,可能因超时而拉取失败。
解决方法: 将Docker镜像源修改为容器镜像服务或国内镜像源地址。
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生效。
如何解决内网下载镜像失败?
内网下载镜像失败基本上都是由于DNS配置问题导致的,可以采用以下两种方法进行修改。
- 方法一:
编辑“/etc/resolv.conf”文件,在/etc/resolv.conf中新增一个内网DNS服务器地址,具体的内网DNS地址请参考云主机所在VPC子网的DNS设置。
说明新增的DNS服务器地址必须位于所有原有的DNS服务器地址之前。
DNS配置操作在保存“/etc/resolv.conf”文件的修改操作后立即生效。
- 方法二:
“/etc/resolv.conf”文件的修改操作在弹性云主机重启后会失效,需要重新进行配置。如果用户不希望每次重启弹性云主机后都重新配置DNS,可以按如下步骤修改虚拟私有云的子网信息,将DNS服务器地址添加到弹性云主机对应的子网中。
注意对虚拟私有云的子网信息的修改会影响所有使用该子网创建的弹性云主机。
e. 登录管理控制台,选择“网络 > 虚拟私有云”。
f. 修改VPC子网的DNS服务器地址。
g. 重启弹性云主机,查看“/etc/resolv.conf”文件的内容,确认其中包含待配置的DNS服务器地址,并且新增的DNS服务器地址位于其他DNS服务器地址之前。