GitLab CI - 无法从图像中连接到多克尔守护
我有一个基于节点的项目,以下是需要作为构建的一部分要执行的前几个步骤: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;
和泊坞窗插座文件不存在里面的图像。这似乎是问题。
任何想法如何我能得到这个工作?
那么从你提供的例子我看不到你在哪里打电话给你的码头服务,因此我假设你没有调用它,你也没有登录到注册表。
您的管道应该像这样的东西如下:
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
谢谢@Sergiu!我没有在'.gitlab-ci.yml'文件中使用'docker login'。回想起来,我在想,为什么这并没有打动我,尤其是当我之前已经看到过这样的例子。 :(不必要的以一种复杂的方式思考它。再次感谢!:) – Technext
你不仅仅是欢迎:)我大部分时间都遇到过这个问题,那是当我读到你的问题时,它让我觉得你可能已经忘记了或登录或使用DIND服务:)但很高兴我可以提供帮助。 – Sergiu
好的。 :)只是为了记录,我以前尝试过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
它很难跟随到底发生了什么。但我认为问题是在主机上找不到docker,而不是docker容器。构建(“docker build”命令)正在主机上运行,并且这是未找到的地方。至于“无法连接到Docker守护进程”错误,这是我经历过的并且[以这种方式]修复了它(http://mbacchi.github.io/2017/09/28/docker-socket-group-permission .html) – obelix15012
所以我想,我的帖子中我不太清楚。现在让我试试。 Docker确实在我的主机上运行,这就是为什么在.gitlab-ci.yml的第一行中提到的图像('node:1.0')工作正常,因为我在GitLab CI runner中使用了docker套接字方法。问题是这个图像本身必须运行一些docker命令_within本身_即,在节点映像中,它因为docker似乎没有运行而失败。 – Technext