GitLab CI – 无法从映像中连接到Docker守护进程

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

npm install npm run build docker build -t client . 

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

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

.gitlab-ci.yml内容:

 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 . 

在上面的Dockerfile中,我使用了一个包含代理设置的自定义节点图像( node:1.0 ),以便工作和Artifactoryconfiguration,所有的依赖关系都是使用Artifactory来获取的。 现在当我运行这个版本时,我得到了docker: command not found执行最后一个命令( docker build -t client . )时docker: command not found错误,这是因为基本映像是针对node而不包含docker 。 所以我添加了docker安装指令到基于这个链接的节点Dockerfile,除了configurationENTRYPOINT和CMD的最后3行之外。

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

 $ 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 

根据我过去的经验,这个错误与运行docker login命令有关。 由于官方镜像中的docker设置使用焦油,我不得不将docker用户添加到/etc/group ,然后将当前用户(root)添加到docker组。 还将docker docker login命令添加到了Dockerfile中,如下所示:

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

之后,如果我尝试build立这个Dockerfile,我得到以下错误:

 + 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? 

我也做了一个ls -ltr /var/run/docker.sock; Docker套接字文件不存在图像中。 这似乎是问题。

任何想法如何我能得到这个工作?

那么从你提供的例子我看不到你在哪里打电话给你的docker服务,因此我假设你没有调用它也没有login到registry。

你的pipe道看起来应该是这样的:

  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 

你也可以在这里find更多的信息