我使用最新的gitlab/gitlab-runner:latest
镜像创建了一个测试容器。我想使用gitlab-runner
用户的权限在此容器中执行Docker命令。
容器内:
root@gitlab_runner:/# su gitlab-runner
gitlab-runner@gitlab_runner:/$ id
uid=999(gitlab-runner) gid=999(gitlab-runner) groups=999(gitlab-runner)
字符串
执行docker info
会导致错误:
gitlab-runner@gitlab_runner:/$ docker info
Client:
Version: 24.0.5
Context: default
Debug Mode: false
Server:
ERROR: permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/info": dial unix /var/run/docker.sock: connect: permission denied
errors pretty printing info
型
当使用root
权限时,执行docker info会按预期工作。
容器外:
UID 999对应于systemd-coredump
用户,它是docker组的成员。
$ id systemd-coredump
uid=999(systemd-coredump) gid=999(systemd-coredump) groups=999(systemd-coredump),135(docker)
型
Docker socket权限如下:
srw-rw---- 1 root docker 0 Oct 25 13:39 docker.sock=
型
是否需要任何额外的配置来允许测试容器在gitlab-runner用户的权限下正确执行Docker命令?非常感谢!!
我已经确认在容器之外,UID为999的用户确实是docker组的成员。
2条答案
按热度按时间hiz5n14c1#
我在/etc/group中添加了
docker:x:135:gitlab-runner
,现在我可以用gitlab-runner运行Docker了!igsr9ssn2#
这是因为默认情况下Docker引擎以root用户身份运行,实际上还有一种替代方法可以以非root用户身份运行Docker容器(无根容器)
了解更多:https://docs.docker.com/engine/security/rootless/