GitLab Runner容器内gitlab-runner用户执行Docker命令权限被拒问题
解决容器内gitlab-runner用户执行Docker命令的权限问题
问题根源
宿主机的docker.sock权限为srw-rw---- 1 root docker,意味着只有root用户或属于docker组(GID匹配宿主机docker组GID)的用户才能读写这个套接字。容器内的gitlab-runner用户UID是999,但默认GID只有999,和宿主机docker组的GID(你的环境里是135)不匹配,所以即使宿主机UID999在docker组,容器内用户依然没有权限访问套接字。
解决步骤
1. 确认宿主机docker组的GID
先在宿主机执行命令,获取docker组的GID:
getent group docker | cut -d: -f3
你的环境里这个值是135。
2. 方法一:启动容器时添加docker组权限
启动容器时,通过--group-add参数将宿主机docker组的GID添加到容器内的gitlab-runner用户附加组中:
docker run -d \ -v /var/run/docker.sock:/var/run/docker.sock \ --group-add $(getent group docker | cut -d: -f3) \ gitlab/gitlab-runner:latest
3. 方法二:对已运行的容器调整权限
如果容器已经在运行,进入容器内执行以下操作:
- 以root身份进入容器:
docker exec -it gitlab_runner bash
- 创建GID匹配宿主机docker组的本地docker组:
groupadd -g 135 docker
- 将gitlab-runner用户加入该组:
usermod -aG docker gitlab-runner
- 退出容器后重新以gitlab-runner身份登录(或重启容器),再执行
docker info即可正常运行。
注意事项
- 不建议修改gitlab-runner用户的主GID,这可能会破坏容器内gitlab-runner服务的默认权限配置。
- 确保容器挂载了宿主机的
/var/run/docker.sock,这是容器内访问宿主机Docker daemon的前提。
内容的提问来源于stack exchange,提问作者林姿均
相关产品推荐
相关产品推荐

