Dockerfile配置GitLab Runner后执行CI任务遇Docker守护进程连接错误
解决GitLab Runner容器无法连接docker.sock的问题
核心原因
挂载docker.sock后仍报错,几乎都是权限问题:主机上的/var/run/docker.sock所属组通常是docker(GID多为999),而容器内的gitlab-runner用户默认不在对应GID的组里,导致没有访问套接字的权限。
具体解决方案
1. 确认挂载命令正确性
运行容器时必须正确挂载主机的docker.sock,命令示例:
docker run -d \ --name gitlab-runner \ -v /var/run/docker.sock:/var/run/docker.sock \ -v /path/to/gitlab-runner/config:/etc/gitlab-runner \ gitlab/gitlab-runner:latest
注意:路径不能写错,主机端的/var/run/docker.sock必须和容器内的路径一致。
2. 同步Docker组权限(推荐方案)
- 先查询主机上
docker组的GID:
输出类似cat /etc/group | grep dockerdocker:x:999:,这里的999就是目标GID。 - 运行容器时,将
gitlab-runner用户加入该GID的组:docker run -d \ --name gitlab-runner \ --group-add 999 \ # 替换成你查到的实际GID -v /var/run/docker.sock:/var/run/docker.sock \ -v /path/to/gitlab-runner/config:/etc/gitlab-runner \ gitlab/gitlab-runner:latest
3. 验证容器内访问权限
进入容器执行命令,确认是否能正常连接Docker守护进程:
docker exec -it gitlab-runner bash su gitlab-runner docker ps
如果能正常列出容器,说明权限配置生效。
4. 检查Runner配置
确认GitLab Runner的executor为docker,且docker_socket_path配置正确(默认就是/var/run/docker.sock)。可以在Runner配置文件/etc/gitlab-runner/config.toml中查看:
[[runners]] executor = "docker" [runners.docker] docker_socket_path = "/var/run/docker.sock"
内容的提问来源于stack exchange,提问作者andreap94
相关产品推荐
相关产品推荐

