使用Dockerfile制作镜像失败
COPY或者ADD指令找不到文件
问题现象
构建任务中有“制作镜像并推送SWR”或“执行Docker命令”构建步骤,执行任务时日志报如下异常信息:
ADD failed: stat /var/lib/docker/tmp/docker-builder154037010/temp: no such file or directory [ERROR][制作镜像并推送到SWR仓库]:错误信息:DEV.CB.0210043,制作Docker镜像失败。
COPY failed: stat /var/lib/docker/tmp/docker-builder076130522/test.txt: no such file or directory
原因分析
ADD指令的源文件为“./temp”,而当前工作目录下没有temp文件。
处理方法
假设当前目录的结构如下:
+ target - temp - Dockerfile
target目录下有temp文件,而Dockerfile文件和target同级。
制作镜像时拉取基础镜像失败
使用Dockerfile制作镜像时,如果指定的基础镜像参数有误,会导致镜像拉取失败,主包括以下两个场景:
- 指定的镜像不存在或无权限
pull access denied for java1, repository does not exist or may require 'docker login'
分析处理
镜像仓库中找不到指定的镜像或当前用户对该镜像没有pull权限时,会出现该错误。
此例的Dockerfile中,FROM java1:8ull-jdk-alpine命令指定的镜像“java1”无法在镜像仓库中找到,故出现此错误,请核对并修正镜像名后重试即可。
- 指定的镜像标签不存在
manifest for java:8ull-jdk-alpine not found
分析处理
镜像仓库中存在指定镜像,但不存在镜像的对应版本/标签时会出现“manifest not found”错误。此例的Dockerfile中,FROM java:8ull-jdk-alpine命令指定了镜像“java:8ull-jdk-alpine”,镜像仓库中存在“java”镜像,但没有对应的版本/标签“8ull-jdk-alpine”,故出现此错误,请核对并修正镜像版本后重试即可。
执行命令失败
问题现象
使用Dockerfile制作镜像时,在执行docker build阶段报如下错:
exec user process caused "exec format error"
原因分析
此问题出现的原因一般有两个:
- 制作镜像的基础镜像和执行机不匹配,如:镜像为arm的,但是执行机是x86的。
- Dockerfile文件内容从其他地方复制过来时出现问题。
处理方法
- 先确认镜像和执行机是否匹配,如果镜像是x86的镜像,就只能用x86的执行机。
- 重新执行构建,查看是否成功,如果不成功,手动输入Dockerfile后再重新执行。
拉取DockerHub镜像超时或失败
问题现象
- 现象一
- 现象二
toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit
原因分析
- 现象一:dockerHub网络不稳定导致拉取镜像超时或失败。
- 现象二:dockerHub的频率限制导致拉取镜像失败。
处理方法
- 方法一:将dockerHub的镜像迁移到SWR上,再拉取镜像
- 将需要使用的dockerHub镜像下载到本地。
- 登录容器镜像服务,在总览页面,单击右上角“上传镜像”或快速入门区域的“上传自有镜像”。
- 在上传页面选择组织和需要上传的镜像。
- 还可以通过客户端上传,选择“我的镜像 ”,单击右上角的“客户端上传”,根据弹出的页面提示进行操作。
- 镜像上传成功后,需要将镜像设置成公开,在“我的镜像”页面,找到刚刚上传的镜像,单击镜像名称,然后单击右上方“编辑”,在编辑页面中将镜像设置成公开。
- 最后替换dockerfile中FROM的基础镜像地址并重新执行构建任务,镜像地址格式一般为swr.cn-south-1.myxxcloud.com/{组织名称}/{镜像名称}:{版本名称},具体内容可以从下载指令中截取。
- 方法二:通过配置SWR镜像加速器地址解决
该方法只适用于现象一:dockerHub网络不稳定导致拉取镜像超时或失败。
- 登录华为云SWR。
- 选择“镜像资源 > 镜像中心 > 镜像加速器”,复制加速器地址。
- 替换dockerfile中FROM的基础镜像地址后重新执行构建任务。如:原先基础镜像地址为library/node:8.16-slim,加速器地址为https://a786190f76fb41679546b24d8d08d8b8.mirror.swr.myxxcloud.com, 则将镜像地址替换为:
a786190f76fb41679546b24d8d08d8b8.mirror.swr.myxxcloud.com/library/node:8.16-slim