我正在一个最受信任的网络中管理运行 Ubuntu 18.04(带有 systemd)和 Docker 的多个计算主机。
我有一个身份验证服务器,因此,与其手动将用户添加到 docker 组以便他们可以运行 docker 命令,不如在身份验证服务器上创建一个 ldap-docker 组并将我的用户添加到该组。然后,我将“group”:“ldap-docker”添加到 /etc/docker/daemon.json 文件,并从系统中删除本地“docker”组。
这在多个主机上运行良好,但在其中一些主机上,docker.service 无法启动,因为 /var/run/docker.sock 仍然归 root:root 所有,而不是 root:ldap-docker。docker.socket.service 也报告启动失败
$ docker ps
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.40/containers/json: dial unix /var/run/docker.sock: connect: permission denied
$ sudo systemctl status docker.socket
● docker.socket - Docker Socket for the API
Loaded: loaded (/lib/systemd/system/docker.socket; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Fri 2021-03-12 08:11:48 PST; 8h ago
Listen: /var/run/docker.sock (Stream)
Mar 12 08:11:48 host.example.com systemd[1]: Starting Docker Socket for the API.
Mar 12 08:11:48 host.example.com systemd[1171]: docker.socket: Failed to resolve group docker: Connection refused
Mar 12 08:11:48 host.example.com systemd[1]: docker.socket: Control process exited, code=exited status=216
Mar 12 08:11:48 host.example.com systemd[1]: docker.socket: Failed with result 'exit-code'.
Mar 12 08:11:48 host.example.com systemd[1]: Failed to listen on Docker Socket for the API.
我可以在 /var/run/docker.sock 套接字上运行 sudo chgrp,但是 docker 服务已经启动失败,所以这没有帮助。
如何控制 docker.sock.service 的启动?为什么我的设置在某些机器上可以正常运行,但在其他机器上却不行?
答案1
好吧,问题有两个方面。一个是你(可能)必须使用 --group 更改 dockerd 组,另一个你还必须更改 docker.socket.service 组。
另一部分是您需要使用 systemd 覆盖()来修改设置,sudo systemctl edit docker
而不是在 /lib/systemd/system/docker.service 中进行更改,因为它会在重新启动时自动恢复为已知的良好值(在文档中找不到证明,但似乎是那样发生的)。