未檢測到 systemd,需要手動啟動 dockerd 守護程序
我正在嘗試按照本指南以非 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
查看腳本,如果falis
systemd 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
或沒有啟用使用者逗留。