我有一个安装了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
条款中的内容。