Open8

MacOS で Podman を試す

odanodan

podman machine ssh で VM に ssh できる

プロンプトの内容を読むに Fedora CoreOS が動いているらしい

この VM の中に /run/user/1000/podman/podman.sock/run/podman/podman.sock などのソケットがある
ソケットの一覧は podman system connection list で取得可能

このソケットに対して REST API でコンテナの情報を取ってくることができる
https://docs.podman.io/en/latest/_static/api.html

odanodan

この VM には /var/run/docker.sock も生えている

これは DOCKER_HOST のデフォルトの値で、互換性のために用意されているっぽい
docker context ls で確認可能

Shion TanakaShion Tanaka

標準のFedora CoreOSではPodmanと共にmoby-engineがインストールされています。
https://getfedora.org/en/coreos?stream=stable

ですが、Podman machine用に起動されるFedora CoreOSでは初回起動時のIgnitionでmoby-engineがアンインストールされ、代わりにpodman.sockへのシンボリックリンクが設定されています。これらの処理はignition.goの中で確認できます。
https://github.com/containers/podman/blob/main/pkg/machine/ignition.go

VMの中へSSHで入って確認するとSymlinkであることが分かります。

$ podman system connection default podman-machine-default-root
$ podman machine ssh ls -l /var/run/docker.sock
lrwxrwxrwx. 1 root root 23 Dec 27 12:12 /var/run/docker.sock -> /run/podman/podman.sock
odanodan

VM への接続情報を .ssh/config に書いて export DOCKER_HOST=ssh://podman とすれば、VM 内部の /var/run/docker.sock を使って docker コマンドが使えるようになる、と思いきやエラーになる

Error: unrecognized command `docker system dial-stdio`
Try 'docker system --help' for more information.

わからん

Shion TanakaShion Tanaka

上記でレスした通り、moby-engineはアンインストールされているため、本来のdocker コマンドはありません。実際にはpodmanコマンドへのSymlinkになっています。そのため、podmanコマンドにないサブコマンドはエラーになります。

$ podman machine ssh ls -l /usr/local/bin/docker
lrwxrwxrwx. 1 root root 15 Dec 27 12:12 /usr/local/bin/docker -> /usr/bin/podman
odanodan

上記でレスした通り、moby-engineはアンインストールされているため、本来のdocker コマンドはありません

あーそうだったんですね。本来の docker コマンドは残しつつ DOCKER_HOST だけを podman に差し替えられるのかなと思いこんでいました。
ありがとうございます