我正在一个最受信任的网络中管理多个运行 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 的启动?为什么我的设置在某些机器上可以正常工作,而在其他机器上不行?
好的,所以问题有两个。一个是您(可能)必须使用 --group 更改 dockerd 组,并且您还必须更改 docker.socket.service 组。
另一部分是您需要使用 systemd override (
sudo systemctl edit docker
) 修改设置,而不是在 /lib/systemd/system/docker.service 中进行更改,因为它会在重新启动时自动恢复到已知的良好值(找不到证据在文档中,但它似乎是这样发生的)。