docker - 无法连接到 gitlab CI 中 unix:///var/run/docker.sock 的 Docker 守护进程
问题描述
我查看了任何其他问题,但找不到自己的解决方案!我在 gitlab 中设置了一个 CI 并使用了 gitlab 的共享运行器。在构建阶段,我使用 docker 镜像作为基础镜像,但是当我使用docker
命令时它说:
无法连接到 unix:///var/run/docker.sock 上的 Docker 守护程序。docker 守护进程是否正在运行?
我看了这个话题,但还是不明白我该怎么办?
.gitlab-ci.yml :
stages:
- test
- build
- deploy
job_1:
image: python:3.6
stage: test
script:
- sh ./sh_script/install.sh
- python manage.py test -k
job_2:
image: docker:stable
stage: build
before_script:
- docker info
script:
- docker build -t my-docker-image .
我知道 gitlab runner 必须注册才能使用docker
和分享/var/run/docker.sock
!但是在使用 gitlab 自带的 runner 时如何做到这一点呢?
解决方案
啊,这是我可爱的话题——使用docker
for gitlab ci
。您遇到的问题通常称为docker-in-docker
.
在配置它之前,您可能想阅读这篇精彩的文章:http: //jpetazzo.github.io/2015/09/03/do-not-use-docker-in-docker-for-ci/
这将使您了解问题所在以及最适合您的解决方案。通常有两种主要方法:docker
在内部实际安装守护程序docker
和将主机的守护程序共享到容器。选择哪种方法 - 取决于您的需求。
在gitlab
您可以通过多种方式进行,我将分享我们的经验。
方式 1 -docker:dind
用作服务。
设置非常简单。只需将docker:dind
共享服务添加到您的gitlab-ci.yml
文件中,然后将docker:latest
图像用于您的工作。
image: docker:latest # this sets default image for jobs
services:
- docker:dind
优点:
- 设置简单。
- 易于运行 - 默认情况下,您的源代码可用于您的工作,
cwd
因为它们被直接拉到您的 docker runner
缺点:您必须为该服务配置 docker 注册表,否则Dockerfile
每次管道启动时您都会从头开始构建您的 s。至于我,这是不可接受的,因为可能需要一个多小时,具体取决于您拥有的容器数量。
方式 2 - 共享/var/run/docker.sock
主机 docker daemon
我们使用 docker daemon 设置了自己的 docker 执行器,并通过将其添加到/etc/gitlab-runner/config.toml
文件中来共享套接字。因此,我们使我们机器的 docker 守护进程可用于docker cli
内部容器。注意- 在这种情况下,您不需要执行程序的特权模式。
之后,我们可以在自定义 docker 镜像中使用docker
两者docker-compose
。此外,我们不需要特殊的 docker 注册表,因为在这种情况下,我们在所有容器之间共享 executor 的注册表。
缺点
在这种情况下,您需要以某种方式将源传递给您的容器,因为您只将它们安装到 docker executor,而不是从它启动的容器。我们已经停止使用以下命令克隆它们git clone $CI_REPOSITORY_URL --branch $CI_COMMIT_REF_NAME --single-branch /project
推荐阅读
- bitbucket - 将创建存储库限制为项目?
- excel - 计算一年中日期范围覆盖/发生的周数
- input - 将输入文本检测为 ISBN EAN UPC
- javascript - 重新排列对象数组的更有效方法?
- android - 白色 tabLayout 上的波纹效果
- python - 在为玻尔兹曼机执行对比发散时,我收到以下错误。我正在使用最新版本的 pytorch
- android - 在构建即时应用程序时找不到 Searchable.xml
- asp.net - 引导模板 asp.net 中的文本框值返回 null
- c# - 序列号生成器,每次启动应用程序时从 0 开始
- mysql - 节点 MySQL 异步执行查询