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更多的信息
- 在Docker运行命令中安装cron任务
- 编译后的二进制文件不能在Ubuntu主机上的高山docker容器中运行
- Docker alpine image:ERROR 2002(HY000):无法通过套接字'/run/mysqld/mysqld.sock'连接到本地MySQL服务器(2“没有这样的文件或目录”)
- Docker Alpine中的ImageMagick安装
- 在Docker中,Spring Boot集成testing失败,但不在外面
- 在Alpine(node:8-latest)Docker镜像上安装“locales”
- 如何在Alpine上的OpenSSH中debugging无法使用的无密码RSA证书?
- docker – 与Nginx合作是行不通的
- 为DBI运行Mkbootstrap()=> DBIXS.h:22:20:致命错误:EXTERN.h:没有这样的文件或目录