WSL2にPodmanを入れる

最近は仕事でPodmanを触る機会が多いので自宅のWSLにもDockerではなくPodmanを入れることにする。

How to run Podman on Windows with WSL2 | Enable Sysadmin
基本的にはこの記事どおりなのだが一部この記事の通りではいかない箇所があった。

Podmanインストール

$ . /etc/os-release
$ sudo sh -c "echo 'deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/x${NAME}_${VERSION_ID}/ /' > /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list"
$ wget -nv https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable/x${NAME}_${VERSION_ID}/Release.key -O Release.key
$ sudo apt-key add - < Release.key
$ sudo apt-get update -qq
$ sudo apt-get -qq -y install podman
$ sudo mkdir -p /etc/containers
$ echo -e "[registries.search]\nregistries = ['docker.io', 'quay.io']" | sudo tee /etc/containers/registries.conf

これでPodmanコマンドは使えるようになる

$ podman info
host:
  arch: amd64
  buildahVersion: 1.19.4
  cgroupManager: cgroupfs
  cgroupVersion: v1
  conmon:
    package: 'conmon: /usr/libexec/podman/conmon'
    path: /usr/libexec/podman/conmon
    version: 'conmon version 2.0.27, commit: '
    ..

ただし、WSL2環境ではPodmanコマンドの度に以下のオプションを指定するよう書かれている

--cgroup-manager cgroupfs --event-logger file

いちいちオプションを追加するのは面倒なので設定ファイルで設定することにする。

ちなみに確認した限りではそのままだと以下のエラーが出る。cgroup_managerの必要性はよくわからない。

$ podman run -it --rm centos:7 bash                                                                                                                          [~]
ERRO[0000] unable to write pod event: "write unixgram @00037->/run/systemd/journal/socket: sendmsg: no such file or directory"
ERRO[0000] unable to write pod event: "write unixgram @00037->/run/systemd/journal/socket: sendmsg: no such file or directory"
ERRO[0000] unable to write pod event: "write unixgram @00037->/run/systemd/journal/socket: sendmsg: no such file or directory"
ERRO[0000] unable to write pod event: "write unixgram @00037->/run/systemd/journal/socket: sendmsg: no such file or directory"
[root@9697f94b4a75 /]#

Rootlessコンテナ用

podmanコマンドの設定ファイルで--event-logger fileの部分を設定すればよい。 デフォルトでは設定ファイルは存在しない(記事中にはpodman infoなどを実行すれば生成されるとあるが自分の環境では生成されなかった)ので自分で作成する。 また記事中ではファイル名はlibpod.confとなっているが、containers.confでよい。

この設定ファイルはtableとoptionという階層構造になっている。 man containers.confからそれらしい項目を探すと、「engine」tableの「events_logger=“file”」でよいことがわかる。

$ mkdir -p $HOME/.config/containers
$ cat <<'EOF' >$HOME/.config/containers/containers.conf
[engine]
events_logger="file"
EOF

Rootfulコンテナ用

同様に探すとcgroup_managerenginetableにある。

$ cat <<'EOF' | sudo tee /etc/containers/containers.conf
[engine]
cgroup_manager="cgroupfs"
events_logger="file"
EOF

確認

以上でコンテナが起動できるようになる。

$ podman run -it --rm centos:7 bash                                                                                                                          [~]
[root@8f869401da0f /]#

以上

関連記事

comments powered by Disqus