我看了其他问题,但找不到自己的解决方案!我在gitlab中设置了一个CI,并使用gitlab的共享运行器。在构建阶段,我使用docker镜像作为基础镜像,但当我使用docker
命令时,它说:
无法在unix:/var/run/docker. sock上连接到Docker守护进程。Docker守护进程是否正在运行?
我看了this主题,但仍然不明白我应该做什么?
.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时如何做到这一点呢?
5条答案
按热度按时间pvabu6sv1#
啊,这就是我可爱的主题-使用
docker
为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
映像用于您的作业。字符串
优点:
cwd
中的作业,因为它们会直接拉到您的docker runner中**酒店:你必须为该服务配置docker registry,否则你将在每次管道启动时从头开始构建
Dockerfile
s。至于我,这是不可接受的,因为可能需要一个多小时,具体取决于你拥有的容器数量。方式二-共享宿主docker守护进程
/var/run/docker.sock
我们使用docker daemon设置了自己的docker executor,并通过将其添加到
/etc/gitlab-runner/config.toml
文件中来共享socket。因此,我们使机器的docker daemon可用于容器内的docker cli
。注意-在这种情况下,您不需要为executor设置特权模式。之后,我们可以在自定义Docker镜像中使用
docker
和docker-compose
。此外,我们不需要特殊的Docker注册表,因为在这种情况下,我们在所有容器中共享executor的注册表。缺点:
在这种情况下,你需要以某种方式将源代码传递给你的容器,因为你只将它们挂载到Docker执行器,而不是从它启动的容器。
z8dt9xmd2#
我试着在runner配置下将其添加到我的helm chart部署中,docker开始工作,如果您在Kubernetes中部署了runner,请使用此选项。
字符串
eoigrqb63#
运行Gitlab Runner(有权限)
看起来,即使为Bitnami gitlab-runner容器提供了额外的权限,它在尝试访问Docker守护进程套接字时仍然会遇到权限问题。
要解决此问题,您可以尝试以下步骤:
1.在macOS机器上检查Docker socket文件的所有权和权限。打开终端并运行以下命令:
字符串
请确保该文件属于**
root
用户和staff
**组。权限应允许所有者和组具有读写权限。1.根据需要调整Docker socket文件的所有权和权限,在终端中运行以下命令:
型
1.重新启动Bitnami gitlab-runner容器,并更新Docker socket的所有权和权限。运行以下命令:
型
如果您仍然无法运行上一个命令,
运行最后一个命令,确保Gitlab-runner容器以root权限运行,允许它访问Docker Daemon Socket。
通过在命令中指定**
--user=root
**,您可以确保Bitnami gitlab-runner容器以root权限运行,这应该允许它访问Docker守护进程套接字。通过这些步骤,Bitnami gitlab-runner容器应该能够连接到Docker守护进程并执行与Docker相关的任务,而不会遇到权限拒绝错误。
型
wj8zmpe14#
这对我很有效。特别是
DOCKER_HOST
变量是成功的最后一根稻草。不能告诉你为什么,对不起!字符串
4uqofj5v5#
不得不添加插座作为卷:
字符串