Rootless Docker install時にsystemdが検出されずdaemonの起動を設定してくれない
環境
OS: Debian stretch
systemd: systemd 232
エラーの発生方法
-
systemctl --user daemon-reload
が成功しない状態で、curl -sSL https://get.docker.com/rootless | sh
を実行する - Rootless Dockerのinstallには成功するが
systemd not detected, dockerd daemon needs to be started manually
と表示され、deamonの起動は手動で行うように促される
原因
systemctl --user daemon-reload
が成功しない状態だと、インストールスクリプトのsystemd検出処理が働かず、systemd用のセッティングがなされないため
if systemctl --user daemon-reload >/dev/null 2>&1; then
SYSTEMD=1
https://get.docker.com/rootless
経緯
- RootlessDocker(参考1 参考2)を使おうと思った
- Debian stretchをクリーンインストール
- 一般ユーザーでログイン
-
curl -sSL https://get.docker.com/rootless | sh
を実行 - 上述の問題が発生
解決
- systemctl --userが失敗するを解決する
- 先のinstallで.bashrcに設定を追記している場合は、削除する
-
systemctl --user daemon-reload
が成功することを確認する -
curl -sSL https://get.docker.com/rootless | sh
を再び実行する
systemctl --user
が失敗する
via: http://hirai.me/memo.html#systemctl-user
環境
OS: Debian stretch
systemd: systemd 232
エラーの発生方法
-
systemd --user
が起動していない状態でsystemctl --user
を叩くとFailed to connect to bus: No such file or directory
- rootlessdockerのインストールスクリプトがsystemdを検出しない状態で終了した際の
export XDG_RUNTIME_DIR=/tmp/docker-1000
の環境変数設定を.bashrcに書いてしまった状態でsystemctl --user
の実行(こちらは後述の解決法をやってもエラーが出続けるため、.bashrcから、rootlessdockerのインストールスクリプト由来の設定をすべて削除すること
原因
- systemd --user が起動していない場合、 systemd サービスに接続できないことでエラーが発生する。
- systemd --user 自体は /lib/systemd/system/user@.service から起動されており、 libpam-systemd とは直接関係はない
- ただし、 libpam-systemd がインストールされていない状態では、 systemd --user は、必要なディレクトリや環境変数が足りず起動できない
- libpam-systemd でインストールされる pam_systemd モジュールは、 systemd --user の起動に必要な環境変数やディレクトリを設定する
- 結果的に、 libpam-systemd をインストールすると、 systemd --user が起動できるようになり、 systemctl --user からユーザーサービスが起動できるようになる
対処法
sudo apt install pam_systemd
- マシン再起動
-
root@ # systemctl status user@1000
でactiveになっていることを確認 -
user@ $ systemctl --user
が正常動作することを確認