一、背景

这些天对微服务进行整理,发现很多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.