MacOS で Podman を試す
podman machine ssh
で VM に ssh できる
プロンプトの内容を読むに Fedora CoreOS
が動いているらしい
この VM の中に /run/user/1000/podman/podman.sock
や /run/podman/podman.sock
などのソケットがある
ソケットの一覧は podman system connection list
で取得可能
このソケットに対して REST API でコンテナの情報を取ってくることができる
この VM には /var/run/docker.sock
も生えている
これは DOCKER_HOST
のデフォルトの値で、互換性のために用意されているっぽい
docker context ls
で確認可能
標準のFedora CoreOSではPodmanと共にmoby-engineがインストールされています。
ですが、Podman machine用に起動されるFedora CoreOSでは初回起動時のIgnitionでmoby-engineがアンインストールされ、代わりにpodman.sockへのシンボリックリンクが設定されています。これらの処理は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
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.
わからん
上記でレスした通り、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
上記でレスした通り、moby-engineはアンインストールされているため、本来のdocker コマンドはありません
あーそうだったんですね。本来の docker コマンドは残しつつ DOCKER_HOST
だけを podman に差し替えられるのかなと思いこんでいました。
ありがとうございます
とりあえず、ssh proxy を使ってホストマシンにソケットを生やせば、docker コマンドは使えるようになる
ssh -nNT -L/tmp/podman.sock:/var/run/docker.sock ssh://podman
export DOCKER_HOST=unix:///tmp/podman.sock
docker ps # 成功する