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

Posted

技术标签:

【中文标题】无法在 unix:///var/run/docker.sock 连接到 Docker 守护进程。(Gitlab)【英文标题】:Cannot connect to the Docker daemon at unix:///var/run/docker.sock.( Gitlab ) 【发布时间】:2021-12-06 22:05:26 【问题描述】:

我有一个安装了 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

管道在 deploy-api-staging 失败:-> script -> scripts/ci/build

构建脚本

http://pastie.org/p/1iQLZs5GqP2m5jthB4YCbh

部署脚本

http://pastie.org/p/2ho6ElfN2iWRcIZJjQGdmy

【问题讨论】:

这个错误会导致很多情况。你能告诉我你正在做什么吗? 我正在构建图像并将其发布到 aws 上,我正在附加有问题的 gitlab 代码 你的 Gitlab CI 代理里面有 Docker 吗? Gitlab CI 需要一个代理来运行。我认为您的代理没有 Docker 哦,我明白了,检查相同。你能给我更多的细节。比如如何检查以及如何设置。 你在哪里安装了 Gitlab CI 运行器?检查该实例 【参考方案1】:

据我所知,您已经在 EC2 实例上直接安装并注册了 GitLab 运行器。

我认为问题在于您尚未授予 GitLab Runner 用户使用 Docker 的权限。

来自官方 Docker 文档:

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

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

好吧,GitLab Runners 在运行任何 CI/CD 管道时默认使用用户 gitlab-runner,而该用户不会使用 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 Runners 的附加步骤

如果您在运行程序中使用 Docker 执行程序,您现在必须在您正在使用的 Docker 映像上挂载该 Unix 套接字。

[[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 子句中的内容。

【讨论】:

嘿伙计,尝试了解决方案。仍然失败并出现同样的错误 实际上,您的跑步者上没有安装 Unix 套接字。将此添加到卷数组:/var/run/docker.sock:/var/run/docker.sock。 PD:编辑您的评论并删除令牌。 这意味着您正在使用您的ubuntu 用户执行跑步者。没有问题。 不,这是您的主机、运行器和用于运行管道的图像之间配置错误的问题;因为您可以启动映像,这意味着至少 Docker 在主机中已正确配置。如果您仍然有权限和配置问题,也许您应该尝试 docker-in-docker 解决方案:docs.gitlab.com/ee/ci/docker/… Jay,如果您已经解决了您的问题,请将问题恢复到原始状态并标记解决方案。如果您还有其他问题,请随时将它们放在不同的问题中,因为您的原始问题可能会在读者之间共享。

以上是关于无法在 unix:///var/run/docker.sock 连接到 Docker 守护进程。(Gitlab)的主要内容,如果未能解决你的问题,请参考以下文章

包无法在 R 中卸载:无法安装包

无法在 SQL Server 视图中使用工作查询:“IS”无法识别“>”无法识别

无法在春季导入 org.apache.poi,因此无法编译

无法理解为啥计算在没有手表的情况下无法工作

React 无法编译模块未找到:无法在listingDetail 上解析

为啥 Today Widget 在 iOS 14 上显示“无法加载”且无法调试?