2017-10-11 93 views
0

我有一个基于节点的项目,以下是需要作为构建的一部分要执行的前几个步骤:GitLab CI - 无法从图像中连接到多克尔守护

npm install 
npm run build 
docker build -t client . 

的上述最后命令构建以下Dockerfile:

含量 .gitlab-ci.yml
FROM docker.artifactory.abc.net/nginx 
COPY build /usr/share/nginx/html 
COPY default.conf /etc/nginx/conf.d/default.conf 

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),其中包含apk的代理设置以及Artifactory配置,因此所有依赖项均使用Artifactory提取。现在,当我运行此版本时,执行最后一个命令(docker build -t client .)时出现docker: command not found错误,这是因为基本映像针对的是node,并且不包含docker。所以我添加了Docker安装指令到基于this链接的节点Dockerfile,除了配置ENTRYPOINT和CMD的最后3行外。现在

,当我跑的构建,我得到:

$ 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命令来完成。由于official image中的docker设置使用tar,因此我必须将docker用户添加到/etc/group,然后将当前用户(root)添加到docker组。还增加了如下图所示的Dockerfile的docker login命令:

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

之后,如果我尝试建立这个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;和泊坞窗插座文件不存在里面的图像。这似乎是问题。

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

+0

它很难跟随到底发生了什么。但我认为问题是在主机上找不到docker,而不是docker容器。构建(“docker build”命令)正在主机上运行,​​并且这是未找到的地方。至于“无法连接到Docker守护进程”错误,这是我经历过的并且[以这种方式]修复了它(http://mbacchi.github.io/2017/09/28/docker-socket-group-permission .html) – obelix15012

+0

所以我想,我的帖子中我不太清楚。现在让我试试。 Docker确实在我的主机上运行,​​这就是为什么在.gitlab-ci.yml的第一行中提到的图像('node:1.0')工作正常,因为我在GitLab CI runner中使用了docker套接字方法。问题是这个图像本身必须运行一些docker命令_within本身_即,在节点映像中,它因为docker似乎没有运行而失败。 – Technext

回答

1

那么从你提供的例子我看不到你在哪里打电话给你的码头服务,因此我假设你没有调用它,你也没有登录到注册表。

您的管道应该像这样的东西如下:

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

+0

谢谢@Sergiu!我没有在'.gitlab-ci.yml'文件中使用'docker login'。回想起来,我在想,为什么这并没有打动我,尤其是当我之前已经看到过这样的例子。 :(不必要的以一种复杂的方式思考它。再次感谢!:) – Technext

+0

你不仅仅是欢迎:)我大部分时间都遇到过这个问题,那是当我读到你的问题时,它让我觉得你可能已经忘记了或登录或使用DIND服务:)但很高兴我可以提供帮助。 – Sergiu

+0

好的。 :)只是为了记录,我以前尝试过DIND,但无法使它工作,所以目前我使用的是Docker套接字方法。稍后再次尝试DIND。在当前的问题中,我实际上正在试图将'docker.artifactory.abc.net/docker/node:1.0'图像的'docker login'命令放入_inside_中。不知道为什么它不工作,虽然我使用它的tar文件安装Docker,如[这里]所述(https://github.com/docker-library/docker/blob/a6b52c73daa8283cd861f41f55e53426008708ac/17.09/Dockerfile)。无论如何,至少我现在有一个工作版本。 :) – Technext

相关问题