无法连接到unix:// var/run/ Docker .sock的Docker守护进程.(Gitlab)



我有一个安装了Docker的AWS实例。一些容器正在运行。我已经在docker中设置了一个Laravel项目。

我可以通过AWS IP地址以及DNS地址(GoDaddy)访问这个web应用程序。

我还设计了gitlab CI/CO,将代码发布到AWS实例。

当我尝试通过Gitlab管道推送代码时,我在管道中得到以下错误:

无法连接到unix://var/run/Docker .sock的Docker守护进程。docker守护进程是否运行?

我检查了docker,它运行正常。有什么线索吗?

.gitlab-ci.yml

http://pastie.org/p/7ELo6wJEbFoKaz7jcmJdDp

管道在部署-api-staging失败:->脚本→脚本/ci/构建

构建脚本http://pastie.org/p/1iQLZs5GqP2m5jthB4YCbh

部署脚本http://pastie.org/p/2ho6ElfN2iWRcIZJjQGdmy

从我看到的,您已经直接在EC2实例上安装并注册了GitLab运行器。

我认为问题是你还没有给你的GitLab Runner用户使用Docker的权限。

来自Docker官方文档:

Docker守护进程绑定到Unix套接字而不是TCP端口。默认情况下,Unix套接字由用户root拥有,其他用户只能使用sudo访问它。Docker守护进程总是以root用户运行。

如果你不想在docker命令前加上sudo,创建一个名为docker的Unix组,并向其中添加用户。当Docker守护进程启动时,它会创建一个Unix套接字,供Docker组的成员访问。

好吧,GitLab运行器默认使用用户gitlab-runner,当他们运行任何CI/CD管道时,该用户不会使用sudo(也不应该在sudoers文件中!),所以我们必须正确配置它。

首先,在注册GitLan Runner的EC2上创建一个Docker组:

sudo groupadd docker

然后,我们将用户gitlab-runner添加到该组:

sudo usermod -aG docker gitlab-runner

并且我们要验证gitlab-runner用户实际上有访问Docker的权限:

sudo -u gitlab-runner -H docker info

现在您的管道应该能够访问unix:///var/run/docker.sock下的Unix套接字而没有任何问题。

使用Docker runner

的附加步骤如果你在运行程序中使用Docker执行器,你现在必须将Unix套接字挂载到你正在使用的Docker映像上。

[[runners]]
url = "https://gitlab.com/"
token = REGISTRATION_TOKEN
executor = "docker"
[runners.docker]
tls_verify = false
image = "docker:19.03.12"
privileged = false
disable_cache = false
volumes = ["/var/run/docker.sock:/var/run/docker.sock", "/cache"]

请特别注意volume条款中的内容。

相关内容

  • 没有找到相关文章

最新更新