从gitlab ci运行docker命令

从gitlab ci运行docker命令,docker,gitlab-ci,gitlab-ci-runner,docker-in-docker,Docker,Gitlab Ci,Gitlab Ci Runner,Docker In Docker,我有这个gitlab ci文件: services: - docker:18.09.7-dind variables: SONAR_TOKEN: "$PROJECT_SONAR_TOKEN" GIT_DEPTH: 0 MAVEN_CLI_OPTS: "-s .m2/settings.xml --batch-mode" MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository" DOCKER_HOST: "tcp://docker:23

我有这个gitlab ci文件:

services:
  - docker:18.09.7-dind
variables:
  SONAR_TOKEN: "$PROJECT_SONAR_TOKEN"
  GIT_DEPTH: 0
  MAVEN_CLI_OPTS: "-s .m2/settings.xml --batch-mode"
  MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository"

  DOCKER_HOST: "tcp://docker:2375"
  DOCKER_DRIVER: overlay2

sonarqube-check:
  image: maven:latest
  stage: test
  before_script:
    - "docker version"
    - "mkdir $PWD/.m2"
    - "cp -f /cache/settings.xml $PWD/.m2/settings.xml"
  script:
    - mvn $MAVEN_CLI_OPTS clean verify sonar:sonar -Dsonar.qualitygate.wait=true -Dsonar.login=$SONAR_TOKEN -Dsonar.projectKey="project-key"
  after_script:
    - "rm -rf $PWD/.m2"
  allow_failure: false
  only:
    - merge_requests
出于某些原因,docker服务中的docker找不到docker的二进制文件(docker version命令,第16行):

我想知道在gitlab ci文件中是否有这样做的方法,因为我需要为测试运行docker,是否有一个包含maven和docker二进制文件的映像,或者是否必须创建自己的docker映像

它必须全部在一个阶段中,我不能将它分为两个阶段(或者至少我不知道如何在一个阶段中用maven编译,在另一个阶段中使用docker映像运行测试)


谢谢大家!

正如你正确指出的那样。在用于GitLab CI作业的映像中,需要
mvn
docker
二进制文件

最快的成功可能是在
before_script
部分的
maven:latest
运行时构建映像中安装docker

before_script:
    - apt-get update && apt-get install -y docker.io
    - docker version
如果这会使您的工作速度过慢,您可能希望构建自己的自定义docker映像,其中包含Maven和docker


另外,请看一下,如果您最终转到Docker 19.03+

,正如您正确指出的那样。在用于GitLab CI作业的映像中,需要
mvn
docker
二进制文件

最快的成功可能是在
before_script
部分的
maven:latest
运行时构建映像中安装docker

before_script:
    - apt-get update && apt-get install -y docker.io
    - docker version
如果这会使您的工作速度过慢,您可能希望构建自己的自定义docker映像,其中包含Maven和docker

另外,如果您最终转到Docker 19.03+也可以查看