docker没有发现与docker:dind +谷歌/云-sdk

在gitlab-ci中运行以下CI脚本时, docker: command not found错误docker: command not found 。 在部署阶段before_script期间发生此错误。

 services: - docker:dind stages: - build - test - deploy before_script: - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY build: stage: build image: docker:latest script: - docker info - docker version - docker build --pull -t $SERVICE_NAME:$CI_COMMIT_REF_NAME . - docker image list - docker tag $SERVICE_NAME:$CI_COMMIT_REF_NAME $CI_REGISTRY_IMAGE/$SERVICE_NAME:$CI_COMMIT_REF_NAME - docker push $CI_REGISTRY_IMAGE/$SERVICE_NAME:$CI_COMMIT_REF_NAME test: image: docker:latest stage: test script: - docker pull $CI_REGISTRY_IMAGE/$SERVICE_NAME:$CI_COMMIT_REF_NAME - docker image list - docker run $CI_REGISTRY_IMAGE/$SERVICE_NAME:$CI_COMMIT_REF_NAME npm test deploy: image: google/cloud-sdk stage: deploy environment: Production script: - echo $DEPLOY_KEY_FILE_PRODUCTION > /tmp/GCLOUD_KEYFILE.json - gcloud auth activate-service-account --key-file /tmp/GCLOUD_KEYFILE.json - rm /tmp/GCLOUD_KEYFILE.json - gcloud info - gcloud components list only: - master 

我有点困惑,因为我将docker:dind -in- docker:dinddocker:dind )作为一个服务运行,所以docker:dind命令应该可用于所有阶段(如果我理解正确的话),但显然不是这样。

是由于与Google / cloud-sdk的交互?

您可能误解了services含义。 从文档中 ,

services关键字定义了另一个在作业期间运行的docker镜像,并链接到image关键字定义的docker镜像。

你需要的是一个自定义的docker执行程序,它使用了dind图像,并预装了gcloud sdk。 您可以使用此Dockerfile构build这样的图像:

 FROM docker:latest RUN apk add --no-cache \ bash \ build-base \ curl \ git \ libffi-dev \ openssh \ openssl-dev \ python \ py-pip \ python-dev RUN pip install docker-compose fabric RUN curl https://sdk.cloud.google.com | bash -s -- --disable-prompts 

你忘了通知顶部的image标签。

 image: docker:latest services: - docker:dind ... 

为我工作! 🙂

请参阅: https : //docs.gitlab.com/ce/ci/docker/using_docker_build.html