docker - Gitlab CI:找不到泊坞窗
问题描述
我正在尝试使用 gitlab ci 功能构建我的项目。根据这个问题,我已经正确地完成了一切。这是我的 .gitlab-ci.yml。
.gitlab-ci.yml
image: docker:latest
services:
- docker:dind
stages:
- build
- release
- deploy
variables:
DOCKER_DRIVER: overlay
MAVEN_CLI_OPTS: "-s .m2/settings.xml --batch-mode"
cache:
paths:
- .m2/repository/
- auth/target/
before_script:
- docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
build:
image: maven:latest
stage: build
script:
- mvn $MAVEN_CLI_OPTS package
auth-release:
stage: release
when: on_success
script:
- docker build -f auth/Dockerfile -t "$CI_REGISTRY/$CI_PROJECT_PATH/auth" ./auth
- docker push "$CI_REGISTRY/$CI_PROJECT_PATH/auth"
但是控制台打印出错误:
控制台输出
Running with gitlab-runner 11.7.0-rc1 (6e20bd76)
on docker-auto-scale ed2dce3a
Using Docker executor with image maven:latest ...
Starting service docker:dind ...
Pulling docker image docker:dind ...
Using docker image sha256:067814781fbba30c17a86aa6159516660b6c210485ac9ac346d5101d6e4b70f0 for docker:dind ...
Waiting for services to be up and running...
Pulling docker image maven:latest ...
Using docker image sha256:3bc97dc2e7ba13887f5a850968419ad0e83fc482acd1cf0d9606882b665e39f3 for maven:latest ...
Running on runner-ed2dce3a-project-10090201-concurrent-0 via runner-ed2dce3a-srm-1547629674-aa23c547...
Cloning repository...
Checking out 10c9202f as master...
Skipping Git submodules setup
Checking cache for default...
FATAL: file does not exist
Failed to extract cache
$ docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
/bin/bash: line 76: docker: command not found
ERROR: Job failed: exit code 1
我究竟做错了什么?
解决方案
您正在混淆构建阶段。
根据您的日志,您在build
使用maven:latest
图像执行的阶段失败,因为它是在您的yaml
.
但你也有你的before_script
:
before_script:
- docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
因此,此脚本尝试在maven
图像上执行并失败,因为maven
图像没有内部docker
。可能,您想执行您before_script
only forauth-release
阶段 - 它会在那里工作,因为auth-release
使用docker:latest
图像,而图像又包含docker
可执行文件。
您可能对您的docker:dind
服务感到困惑,认为它会docker
在所有图像中为您提供 CLI - 这不是这样的。docker:dind
service 为您提供docker
守护进程,但您仍需要docker
在所有镜像中安装 CLI 才能与 service 交互。
推荐阅读
- python - 从匹配条件的 pandas 数据框中选择行
- python - 使用汇集4个不同列表的数据制作表格
- json - 将 response.body 映射到模型类
- matlab - Matlab的detectMaskRCNN函数误差与变量之间的大小差异
- mysql - MySql COUNT(column_name = 'foobar' or null) 如何工作?
- python - google.cloud.bigquery 库将在 DataLab 实例中运行 SQL 查询,但不在容器优化的 VM 中
- python - Python 虚拟环境操作系统 PATH 问题
- html - 识别当今超高分辨率智能手机中的目标设备,以选择要运行的 css 文件
- java - 在不更改 spring-boot-starter-parent 版本的情况下,我应该如何只降级我的 springboot 应用程序运行的 tomcat 服务器
- r - Ops.factor(rf_mod, target) 中的错误:因子的级别集不同