【问题标题】:I am unable to use docker commands in google/cloud-sdk image我无法在 google/cloud-sdk 映像中使用 docker 命令
【发布时间】:2018-10-30 06:50:18
【问题描述】:

我在 gitlab 中运行 yml 脚本,我使用 gitlab-ci.yaml 创建 docker 映像并将其推送到 Google Registry。因为我无法运行命令。这是我的 gitlab 代码。

image: docker:latest
services:
  - docker:dind

variables:
  SPRING_PROFILES_ACTIVE: gitlab-ci

stages:
  - build
  - imagecreation
  - deploy

maven-build:
  image: maven:3-jdk-8
  stage: build
  script: "mvn package -B"
  artifacts:
    paths:
      - target/*.war

docker-build:
  image: google/cloud-sdk
  stage: imagecreation
  script:
  - docker build -t gcr.io/project-test-to/counter .
  - gcloud docker -- push gcr.io/project-test-to/counter

k8s-deploy:
  image: google/cloud-sdk
  stage: deploy
  script:
  - echo "$GOOGLE_KEY" > key.json
  - gcloud auth activate-service-account --key-file key.json
  - gcloud config unset container/use_client_certificate
  - gcloud container clusters get-credentials gitlab --zone us-central1-a --project project-test-to
  - kubectl apply -f deployment.yaml

她是我得到的错误。无法连接到 unix:///var/run/docker.sock 上的 Docker 守护程序。 docker 守护进程是否正在运行? 错误:作业失败:退出代码 1

如何在这个镜像中运行 docker 命令?(google/cloud-sdk)

【问题讨论】:

    标签: docker gitlab-ci google-kubernetes-engine


    【解决方案1】:

    您需要添加 Docker in Docker service 然后使用 DOCKER_HOST 在此服务上绑定您的跑步者。这是我的配置

    job:publish:api:
      image: google/cloud-sdk:latest
      stage: publish
      when: on_success
      services:
        - docker:dind
      before_script:
        - echo $GCLOUD_SERVICE_KEY > ${HOME}/gcloud-service-key.json
        - gcloud auth activate-service-account --key-file ${HOME}/gcloud-service-key.json
        - gcloud auth configure-docker
      script:
        - docker build --compress -t ${GCLOUD_IMAGE_CI_FULLNAME} .
        - docker push ${GCLOUD_IMAGE_CI_FULLNAME}
      variables:
        DOCKER_HOST: tcp://docker:2375
        DOCKER_TLS_CERTDIR: ""
    

    【讨论】:

    【解决方案2】:

    由于 gcloud docker 命令只是将命令传递给 docker,而 docker 映像 google/cloud-sdk 似乎没有安装 docker,您可能需要像这样将主机套接字挂载到容器中:

    docker-build: image: google/cloud-sdk stage: imagecreation script: - docker build -t gcr.io/project-test-to/counter . - gcloud docker -- push gcr.io/project-test-to/counter volume: - "/var/run/docker.sock:/var/run/docker.sock"

    请记住命令gcloud dockerdeprecated

    【讨论】:

    • 嗨 octavian,我收到 Invalid YAML 错误,指出“音量键”无效。仅供参考,我不是在 POD 中运行它,而是在 gitlab 中运行这个脚本(希望这与我们在 pod 中运行的相似)
    【解决方案3】:

    按照最初的答案,“gcloud docker”命令现在已被弃用,如前所述。要将镜像推送到 Container Registry,您只需运行以下命令:

    $docker 推送

    我还建议设置 docker 命令,以便您可以按照documentation 中提到的步骤以非 root 身份运行它。

    【讨论】:

      【解决方案4】:

      如果这是您用于构建映像的 CircleCI,您可以使用 setup_remote_docker,如下所述:

      然后config.yml 看起来像:

      create_app_docker:
          docker:
            - image: google/cloud-sdk:latest
          steps:
            - checkout
            - setup_remote_docker
            - run:
                name: Build docker with application
                command: |
                  docker --version
                  docker build -t my-app ./
                  docker images
      
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-17
        • 2020-08-13
        • 2015-12-12
        • 2020-07-27
        • 2020-07-21
        • 2018-11-12
        • 2019-04-10
        • 2021-12-02
        相关资源
        最近更新 更多