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:dind
( docker: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