无法在 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)的主要内容,如果未能解决你的问题,请参考以下文章
无法在 SQL Server 视图中使用工作查询:“IS”无法识别“>”无法识别