我无法在google/cloud sdk映像中使用docker命令

我无法在google/cloud sdk映像中使用docker命令,docker,gitlab-ci,google-kubernetes-engine,Docker,Gitlab Ci,Google Kubernetes Engine,我正在gitlab中运行一个yml脚本,在这里我使用gitlab-ci.yaml创建docker映像并将其推送到Google注册表。因为我无法运行命令。这是我的gitlab代码 image: docker:latest services: - docker:dind variables: SPRING_PROFILES_ACTIVE: gitlab-ci stages: - build - imagecreation - deploy maven-build: im

我正在gitlab中运行一个yml脚本,在这里我使用gitlab-ci.yaml创建docker映像并将其推送到Google注册表。因为我无法运行命令。这是我的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
她是我遇到的错误。无法连接到的Docker守护进程unix:///var/run/docker.sock. docker守护进程正在运行吗? 错误:作业失败:退出代码1


如何在此映像中运行docker命令?(google/cloud sdk)

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


docker build:
图片:谷歌/云sdk
阶段:影像创作
脚本:
-docker构建-t gcr.io/project-test-to/counter。
-gcloud docker--将gcr.io/project-test-to/counter推送到
卷:
-“/var/run/docker.sock:/var/run/docker.sock”


还请记住命令
gcloud docker
是。

由于
gcloud docker
命令只是将命令传递给docker,而docker image
google/cloud sdk
似乎没有安装docker,因此您可能需要将主机套接字装入容器中,如下所示:


docker build:
图片:谷歌/云sdk
阶段:影像创作
脚本:
-docker构建-t gcr.io/project-test-to/counter。
-gcloud docker--将gcr.io/project-test-to/counter推送到
卷:
-“/var/run/docker.sock:/var/run/docker.sock”


请记住命令
gclouddocker
is.

跟踪原始答案,“gclouddocker”命令现在已被否决,如前所述。要将映像推送到容器注册表,只需运行以下操作:

$docker推送


我还建议设置docker命令,以便按照本文中提到的步骤以非root用户身份运行它

继原来的答案之后,“gcloud docker”命令现在被弃用,如前所述。要将映像推送到容器注册表,只需运行以下操作:

$docker推送


我还建议设置docker命令,以便按照本文中提到的步骤以非root用户身份运行它

如果这是用于构建映像的CircleCI,则可以使用
设置\u remote\u 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


如果这是用于构建映像的CircleCI,则可以使用
setup\u remote\u 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

您需要使用
DOCKER\u 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: ""
您需要使用
DOCKER\u 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: ""

嗨,屋大维,我收到无效的YAML错误,说明“音量键”无效。仅供参考,我不是在POD中运行此脚本,我是在gitlab中运行此脚本(希望这与我们在POD中运行的脚本类似)嗨,octavian,我收到无效YAML错误,声明“卷密钥”无效。仅供参考,我不是在POD中运行此脚本,我是在gitlab中运行此脚本(希望这与我们在POD中运行的脚本类似)在使用google/cloud sdk映像时,如何让docker:dind运行?对我来说,它失败的原因是:source-@Vojtěch您的
.gitlab ci.yml
似乎无效。您试图使用
docker:dind
image,并设置了我的解决方案中不需要的
docker\u DRIVER=overlay
。什么是“无效”-ci正确运行,直到
无法连接到tcp://127.0.0.1:2375
。我还试图删除
DOCKER_驱动程序
,但没有任何效果。请参阅:->@Vojtěch,您缺少
变量
部分如何在使用google/cloud sdk映像时运行DOCKER:dind?对我来说,它失败的原因是:source-@Vojtěch您的
.gitlab ci.yml
似乎无效。您试图使用
docker:dind
image,并设置了我的解决方案中不需要的
docker\u DRIVER=overlay
。什么是“无效”-ci正确运行,直到
无法连接到tcp://127.0.0.1:2375
。我还试图删除
DOCKER_驱动程序
,但没有效果。请参阅:->@Vojtěch,您缺少
变量
部分