我使用最新的
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套接字权限如下:
srw-rw---- 1 root docker 0 Oct 25 13:39 docker.sock=
是否需要进行任何额外配置才能让测试容器在 gitlab-runner 用户的权限下正确执行 Docker 命令?非常感谢!!
我已经确认,在容器外,UID 999的用户确实是docker组的成员。
这是因为默认情况下 docker 引擎以 root 身份运行,实际上有一种替代方法可以以非 root 用户身份运行 docker 容器(无 root 容器)