GitLab CI - 无法从图像中连接到 Docker 守护程序
GitLab CI - Cannot connect to the Docker daemon from within an image
我有一个基于节点的项目,以下是构建过程中需要执行的前几个步骤:
npm install
npm run build
docker build -t client .
上面的最后一个命令构建了以下 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
),其中包含 apk
的代理设置和 Artifactory 配置,因此所有依赖项都使用 Artifactory 获取。现在,当我 运行 这个版本时,我在执行最后一个命令 (docker build -t client .
) 时收到 docker: command not found
错误,这是预期的,因为基本图像是用于 node
而不是'包含 docker
。因此,我根据 this link 添加 docker 设置说明到节点 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;
并且 docker 套接字文件不存在 在 图像中。这似乎是问题所在。
知道如何让它工作吗?
从您提供的示例来看,我看不到您调用 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
我有一个基于节点的项目,以下是构建过程中需要执行的前几个步骤:
npm install
npm run build
docker build -t client .
上面的最后一个命令构建了以下 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
),其中包含 apk
的代理设置和 Artifactory 配置,因此所有依赖项都使用 Artifactory 获取。现在,当我 运行 这个版本时,我在执行最后一个命令 (docker build -t client .
) 时收到 docker: command not found
错误,这是预期的,因为基本图像是用于 node
而不是'包含 docker
。因此,我根据 this link 添加 docker 设置说明到节点 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;
并且 docker 套接字文件不存在 在 图像中。这似乎是问题所在。
知道如何让它工作吗?
从您提供的示例来看,我看不到您调用 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