Systemd

未檢測到 systemd,需要手動啟動 dockerd 守護程序

  • March 22, 2022

我正在嘗試按照本指南以非 root 使用者身份安裝 Docker 守護程序: https ://docs.docker.com/engine/security/rootless/

首先,我刪除了現有的 rootful docker 守護程序。

然後我創建了一個名為的使用者docker-user並使其成為docker組的成員

然後我像這樣切換到那個 docker-user 的 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 安裝一樣作為服務執行。根據指南,我應該能夠將其作為服務執行。我究竟做錯了什麼?

您需要以非 root 使用者身份通過 ssh 登錄,然後執行腳本。

sudo -iu docker-user

ssh docker-user@hostname

docker-user是一個例子,使用目標系統上存在的任何非 root 使用者)

此使用者無需成為 docker 組的成員。

您將需要登錄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或沒有啟用使用者逗留。

引用自:https://unix.stackexchange.com/questions/587674