LoginSignup
0
0

EC2でDockerをルートレスモードで稼働させようとしてつまづいた

Posted at

はじめに

EC2インスタンスでDockerをルートレスモードで実行させようとしたところ、systemdでの制御が出来ない状況に陥り、思いの外ハマってしまったので書き残しておきます。

  • OS: Ubuntu 22.04.3 LTS
  • 作業環境: EC2で構築し、SSMセッションマネージャでコンソールログインしての作業

何が起こった?

公式ドキュメントに従い、dockerをインストールし、ルートレスモードにしようと試みたところで躓きました。

dockerd-rootless-setuptool.shを実行したところ、ドキュメントと異なる出力となり、systemdでの起動設定が出来ない状況に陥りました。

下記が実行時の出力です。
ここではrunnerという非ルートユーザーで制御する事を目標としています。

dockerd-rootless-setuptool.sh install
$ whoami
runner
$ /usr/bin/dockerd-rootless-setuptool.sh install
[INFO] systemd not detected, dockerd-rootless.sh needs to be started manually:

PATH=/usr/bin:/sbin:/usr/sbin:$PATH dockerd-rootless.sh

[INFO] Creating CLI context "rootless"
Successfully created context "rootless"
[INFO] Using CLI context "rootless"
Current context is now "rootless"

[INFO] Make sure the following environment variable(s) are set (or add them to ~/.bashrc):
# WARNING: systemd not found. You have to remove XDG_RUNTIME_DIR manually on every logout.
export XDG_RUNTIME_DIR=/home/runner/.docker/run
export PATH=/usr/bin:$PATH

[INFO] Some applications may require the following environment variable too:
export DOCKER_HOST=unix:///home/runner/.docker/run/docker.sock

XDG_RUNTIME_DIR環境変数等を設定しsystemdでの制御を試みるもエラーとなり実行できません。

$ export XDG_RUNTIME_DIR=/home/runner/.docker/run
$ export PATH=/usr/bin:$PATH
$ systemctl --user start docker.service
Failed to connect to bus: No such file or directory

どうしたのか

次のように対処しました。

  1. machinctlコマンドでrunnerユーザーにスイッチ
  2. 再インストール

SSMでログインし、ssm-user →(sudo su -)→ root →(su - runner)→ runner とユーザーを切り替え作業したのですが、これが良くなかったようです。
rootからrunnerへの切り替えをmachinctlで行う事で解消しました。

systemd-containerのインストール(root実行)
$ apt install systemd-container
Reading package lists... Done
...
runnerへログイン
$ machinectl shell runner@
Connected to the local host. Press ^] three times within 1s to exit session.
アンインストール
$ /usr/bin/dockerd-rootless-setuptool.sh uninstall
+ systemctl --user stop docker.service
...
インストール
$ /usr/bin/dockerd-rootless-setuptool.sh install
[INFO] Creating /home/runner/.config/systemd/user/docker.service
[INFO] starting systemd service docker.service
+ systemctl --user start docker.service
 
...

[INFO] Installed docker.service successfully.
[INFO] To control docker.service, run: `systemctl --user (start|stop|restart) docker.service`
[INFO] To run docker.service on system startup, run: `sudo loginctl enable-linger runner`

[INFO] Creating CLI context "rootless"
Successfully created context "rootless"
[INFO] Using CLI context "rootless"
Current context is now "rootless"

[INFO] Make sure the following environment variable(s) are set (or add them to ~/.bashrc):
export PATH=/usr/bin:$PATH

[INFO] Some applications may require the following environment variable too:
export DOCKER_HOST=unix:///run/user/1002/docker.sock

インストール時の出力がドキュメント相当となり、無事systemdでの制御が可能となりました。

原因は?

詳しく調査出来ていないのですが、Dockerのトラブルシュートに次の記載がありました。

you need to log in using pam_systemd.

今回は、AWSのマネコンからセッションマネージャを使用してログインしていたのですが、この方法だとpam_systemdを使用していないので上手くいかなかった。と推測しています。

おそらく、sshログインをし直す方法等でも解消が見込めると思います。

image.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0