GitLab CI - 无法从映像中连接到Docker守护程序

时间:2017-10-11 12:20:32

标签: docker gitlab gitlab-ci gitlab-ci-runner alpine

我有一个基于节点的项目,以下是作为构建的一部分需要执行的前几个步骤:

<ion-content>
  <ion-slides>
    <ion-slide>
      <ion-content padding>
        <ion-refresher (ionRefresh)="doRefresh($event)">
          <ion-refresher-content
            pullingIcon="ios-refresh"
            pullingText="Pull to refresh"
            refreshingSpinner="ios"
            refreshingText="Loading...">
          </ion-refresher-content>
        </ion-refresher>
        <!--put long text--> 
      </ion-content>
    </ion-slide>
    <ion-slide>
      <ion-content padding>
        <ion-refresher (ionRefresh)="doRefresh($event)">
          <ion-refresher-content
            pullingIcon="ios-refresh"
            pullingText="Pull to refresh"
            refreshingSpinner="ios"
            refreshingText="Loading...">
          </ion-refresher-content>
        </ion-refresher>
        <!--put long text--> 
      </ion-content>
    </ion-slide>
    <ion-slide>
      <ion-content padding>
        <ion-refresher (ionRefresh)="doRefresh($event)">
          <ion-refresher-content
            pullingIcon="ios-refresh"
            pullingText="Pull to refresh"
            refreshingSpinner="ios"
            refreshingText="Loading...">
          </ion-refresher-content>
        </ion-refresher>
        <!--put long text--> 
      </ion-content>
    </ion-slide>
  </ion-slides>
</ion-content>

上面的最后一个命令构建了以下Dockerfile:

npm install
npm run build
docker build -t client .

FROM docker.artifactory.abc.net/nginx COPY build /usr/share/nginx/html COPY default.conf /etc/nginx/conf.d/default.conf 的内容:

.gitlab-ci.yml

在上面的Dockerfile中,我正在使用一个自定义节点映像(image: docker.artifactory.abc.net/docker/node:1.0 stages: - build - deploy build: stage: build script: - npm install - npm run build - docker build -t client . ),其中包含node:1.0的代理设置以及Artifactory配置,因此所有依赖项都是使用Artifactory获取的。现在,当我运行此构建时,我在执行最后一个命令(apk)时出现docker: command not found错误,这是预期的,因为基本图像是docker build -t client .并且不是{0}}包含node。所以我在基于this链接的节点Dockerfile中添加了docker setup指令,除了它配置ENTRYPOINT和CMD的最后3行。

现在,当我运行构建时,我得到了:

docker

根据我过去的经验,这个错误与运行$ docker build -t client . Sending build context to Docker daemon 372.7MB Step 1 : FROM docker.artifactory.abc.net/nginx Get https://docker.artifactory.abc.net/v2/nginx/manifests/latest: unknown: Authentication is required ERROR: Job failed: exit code 1 命令有关。由于official image中的泊坞窗设置使用了tar,因此我必须将docker login用户添加到docker,然后将当前用户(root)添加到/etc/group组。还将如下所示的docker命令添加到Dockerfile:

docker login

之后,如果我尝试构建此Dockerfile,我会收到以下错误:

    addgroup docker; \
    adduser root docker; \
    docker login docker.artifactory.abc.net -u svc-art -p "ZTg6#&kq"; \

我也做了一个+ dockerd -v Docker version 17.05.0-ce, build v17.05.0-ce + docker -v Docker version 17.05.0-ce, build v17.05.0-ce + adduser root docker + tail -2 /etc/group node:x:1000:node docker:x:101:root + docker login docker.artifactory.abc.net -u svc-art -p ZTg6#&kq Warning: failed to get default registry endpoint from daemon (Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?). Using system default: https://index.docker.io/v1/ Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? ,并且里面没有 图片中的docker套接字文件。这似乎是个问题。

知道如何让这个工作吗?

1 个答案:

答案 0 :(得分:1)

从你提供的示例中我看不到你在哪里调用你的docker服务,因此我假设你没有调用它,你也没有登录注册表。

管道的外观如下所示:

 image: docker.artifactory.abc.net/docker/node:1.0

 stages:
    - build
    - deploy

 build:
   image: docker:latest
   services:
   - docker:dind
   stage: build
   script:
     - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN registry.example.com
     - docker build -t registry.example.com/group/project/image:latest .
     - docker push registry.example.com/group/project/image:latest

您还可以找到更多信息here