我正在尝试按照以下指南以非 root 用户身份安装 Docker 守护进程: https://docs.docker.com/engine/security/rootless/
首先,我删除了现有的 rootful docker 守护进程。
然后我创建了一个名为的用户并使其成为组docker-user
的成员docker
然后我切换到该 docker 用户的 shell,如下所示:
sudo -iu docker-user
并运行上面链接中给出的无根docker安装脚本。
脚本输出:
docker-user@ubuntu:~$ curl -fsSL https://get.docker.com/rootless | sh
# Installing stable version 19.03.8
# Existing rootless Docker detected at /home/docker-user/bin/dockerd
# systemd not detected, dockerd daemon needs to be started manually
/home/docker-user/bin/dockerd-rootless.sh --experimental --storage-driver vfs
# Docker binaries are installed in /home/docker-user/bin
# Make sure the following environment variables are set (or add them to ~/.bashrc):
export DOCKER_HOST=unix:///tmp/docker-1003/docker.sock
查看脚本,如果falissystemd not detected, dockerd daemon needs to be started manually
则输出该行systemctl --user daemon-reload
的输出systemctl --user daemon-reload
是
docker-user@ubuntu:~$ systemctl --user daemon-reload
Failed to connect to bus: No such file or directory
我不想手动启动 docker,它应该像通常的 docker 安装一样作为服务运行。根据指南,我应该能够将其作为服务运行。我究竟做错了什么?
答案1
您需要使用 登录pam_systemd
或为您的用户启用用户延迟,然后才能进行故障排除systemctl --user
。
要使用pam_systemd
(来源)
尝试以下方法之一:
- 通过图形控制台登录
ssh <user>@localhost
machinectl shell <user>@
登录后,您应该会看到您的会话loginctl list-sessions
。如果出现这种情况,请继续“疑难解答systemctl --user
”。
否则,如果上述方法均不起作用,请尝试启用用户延迟,如下所述。
启用用户延迟(使用loginctl
)
检查用户是否已经徘徊
ls /var/lib/systemd/linger
(来源)
如果您在此处看到您的用户,请继续“疑难解答systemctl --user
”。
否则,启用用户徘徊loginctl enable-linger <user>
。请注意,您可以省略<user>
参数以使用当前用户。
然后,您应该会看到您的用户带有ls /var/lib/systemd/linger
.
故障排除systemctl --user
现在您知道您的用户要么处于活动状态pam_systemd
,要么处于徘徊状态,您可以尝试连接到systemd
:
跑步systemctl --user
如果此命令运行没有错误,则systemd
应该准备好安装 rootless docker。
如果打印出来,Failed to connect to bus: $DBUS_SESSION_BUS_ADDRESS and $XDG_RUNTIME_DIR not defined (consider using --machine=<user>@.host --user to connect to bus of other user)
则设置$XDG_RUNTIME_DIR
为正确的值(通常export XDG_RUNTIME_DIR=/run/user/$UID
)
然后运行systemctl --user
如果此命令运行没有错误,则systemd
应该准备好安装 rootless docker。
如果显示此信息Failed to connect to bus: No such file or directory
,则您可能没有登录pam_systemd
或没有启用用户延迟。
答案2
您需要以非 root 用户身份通过 ssh 登录,然后运行脚本。
sudo -iu docker-user
ssh docker-user@hostname
(docker-user
是一个示例,使用目标系统上存在的任何非 root 用户)
该用户不需要是 docker 组的成员。