docker build 发生 unable to prepare context 错误的解决办法
一、背景
这些天对微服务进行整理,发现很多C端的接口可以通过一个前端服务来聚合,所以创建了一个新的服务进行管理。因为我们的发布环境采用CI/CD自动化编译部署框架,所以需要创建.gitlab-ci.yml文件来管理编译部署脚本。我们使用的脚本如下:
build-image:
stage: build-image
only:
- /^v\d+\..*/
script:
- docker login -u$ROBOT_NAME -p$ROBOT_PASS http://dhub.xxx.cn
- export IMAGE_VERSION=`echo $CI_COMMIT_TAG | sed 's/v//g'`
# 编译auth镜像 (合并到一个)
#- docker build -t "dhub.xxx.cn/biz/das-customer-auth:latest" das-customer-auth
#- docker tag "dhub.xxx.cn/biz/das-customer-auth:latest" "dhub.xxx.cn/biz/das-customer-auth:${IMAGE_VERSION}"
#- docker push "dhub.xxx.cn/biz/das-customer-auth:latest"
#- docker push "dhub.xxx.cn/biz/das-customer-auth:${IMAGE_VERSION}"
# 编译user镜像
- docker build -t "dhub.xxx.cn/biz/das-notification-sms:latest" das-notification-sms
- docker tag "dhub.xxx.cn/biz/das-notification-sms:latest" "dhub.xxx.cn/biz/das-notification-sms:${IMAGE_VERSION}"
- docker push "dhub.xxx.cn/biz/das-notification-sms:latest"
- docker push "dhub.xxx.cn/biz/das-notification-sms:${IMAGE_VERSION}"
tags:
- shell
在自动化编译的docker打镜像阶段,出现了以下异常信息:
$ export IMAGE_VERSION=`echo $CI_COMMIT_TAG | sed 's/v//g'`
$ docker build -t "dhub.xxx.cn/front/customer-api-group:latest" customer-api-group
unable to prepare context: path "customer-api-group" not found
ERROR: Job failed: exit status 1
那么上面是什么原因,下面我们来分析下。
二、原因及解决办法
错误的主要原因是:unable to prepare context: path "customer-api-group" not found
翻译过来中文的意思是:无法创建打包环境,路径中的xxx未被发现。
因为打包环境依赖于Dockerfile打包脚本,所以需要在每个工程或者module下面创建一个Dockerfile配置文件,以指引docker使用什么样的依赖,启动过程中要执行什么样的命令,最后运行什么具体的东西。
所以这个错误就是找不到Dockerfile文件。
那么什么情况下会令系统找到Dockerfile配置文件呢?通常有三种情况会导致这个问题,下面让咱们逐一认识它们:
- 1、路径错误。
顾明思议:就是给出的Dockerfile路径是错误的,值得注意的是,如果Dockerfile和打包的工程在同一个目录,那么用点符号(即"."符号)表示Dockerfile在当前目录下。
- 2、Dockerfile 名字错误。
假如你把Dockerfile 命名为:DockerFile,那么在分辨字母大小写的系统中就会出现这个情况。
- 3、Dockerfile文件不存在。
即路径正确,但文件不存在还是会报以上错误。
---- 关于这个错误的原因及分析写到这里,希望对大家有所帮助或者启示。
-- end.
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。