本文介绍云效流水线镜像构建并推送到镜像仓库相关问题及解决方案。
流水线推送镜像到ACR企业版报错409 Conflict
解决方案:检查对应的镜像仓库的镜像版本是否设置为“不可变”。当该设置为“不可变”时,该仓库下除 latest 之外的镜像版本均不可以覆盖,保证容器镜像版本一致性。
流水线推送镜像到ACR企业版显示镜像是unknow架构
解决方案:需要在流水线镜像构建的时候添加上--provenance=false
参数。
流水线镜像构建报错failed to do request: Head "https://registry-1.docker.io xxx i/o timeout
问题描述:如图所示拉取镜像超时。
解决方案:该报错原因是构建机与目标IP建连失败(dial tcp xxx timeout),若是偶发问题,可以尝试重试;若反复出现,需要考虑构建时是否流经跨境链路(docker.io是境外的镜像仓库)。跨境网络问题可以尝试通过下面方案1、2解决,非跨境链路可以通过下面方案3检查:
方案1:将构建集群更换成云效
香港公共构建集群
、香港地域的私有构建集群。方案2:将对应的基础镜像push到ACR中,再修改
Dockerfile
使用私有镜像仓库中的镜像进行构建。方案3:非跨境链路需要检查对应镜像仓库是否存在黑/白名单限制、网络是否可达(可在构建机上执行telnet等命令)
流水线镜像推送报错failed to solve: failed to push xxxx: server message: insufficient_scope: authorization failed
问题描述:如图所示认证失败。
解决方案:您可按照以下步骤进行排查:
确认步骤中使用的镜像仓库服务连接是否有问题。
可能是命中缺陷导致,执行命令清理构建机上的
docker buildx
缓存,再执行构建看下:docker buildx prune -af
。
更多解决思路,请参见:https://github.com/docker/buildx/issues/2364。
流水线镜像构建使用ACR企业版docker login
报错request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
问题描述:如图所示登录超时。
解决方案:检查ACR企业版白名单是否添加对应的云效公共构建集群IP地址。
流水线镜像构建使用ACR企业版docker login
报错no such host
问题描述:如图所示找不到主机。
解决方案:您可通过以下步骤进行排查:
如果通过公网进行推送,请检查ACR企业版公网地址是否开放。
如果通过内网进行推送,请检查对应的ACR企业版是否添加私有构建机所在的VPC。ACR企业版VPC网络域名是通过PrivateZone进行私网域名解析,当私有构建机不在对应VPC内的时候无法解析域名。