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

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

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


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

https://docs.docker.com/engine/security/rootless/

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

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

``` sh: 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での制御を試みるもエラーとなり実行できません。

```sh
$ 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ユーザーにスイッチ
1. 再インストール

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


```sh:systemd-containerのインストール(root実行)
$ apt install systemd-container
Reading package lists... Done
...
```

```sh:runnerへログイン
$ machinectl shell runner@
Connected to the local host. Press ^] three times within 1s to exit session.
```

```sh:アンインストール
$ /usr/bin/dockerd-rootless-setuptool.sh uninstall
+ systemctl --user stop docker.service
...
```

```sh:インストール
$ /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. 

https://docs.docker.com/engine/security/rootless/#troubleshooting


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

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3638052/d4aacbd4-c306-fc40-e624-085617beda38.png)