未检测到 systemd,需要手动启动 dockerd 守护进程

未检测到 systemd,需要手动启动 dockerd 守护进程

我正在尝试按照以下指南以非 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 组的成员。

相关内容