Windows版Podman.exeのRESTful APIにアクセスしてみたものの

Windows 10のWSL2で動作しているPodman。

RESTful APIが実装されているということで。

正直、あまり良くわかっていない部分が御座いまして、認識が不完全かと存じますが。

PodmanのRESTful APIが実際にどのようなものか、見てみたいと思います。


検証環境はWindows 10

検証する環境ですが、Windows 10になります。

こちらの手順でPodmanをインストール後。

Windows版Podman.exeのインストール手順 2022年10月版
Windows 10のPCに、Podman.exeをインストールしてみました。 アザラシ?アシカ?セイウチ?暗い海から、紫色の目で、す...

1つのポッドの中で、MongoDBコンテナとPostgreSQLコンテナを動かしています。

DockerからPodman.exeへのコンテナ移行手順 MongoDB編
前回、Dockerで動かしていましたPostgreSQLコンテナのデータベースを。 Windows版Podman.exeで新たにポッド...
DockerからPodman.exeへのコンテナ移行手順 PostgreSQL編
過去、Windows版のDockerで、PostgreSQLを動かして使用していました。 データの保存先にローカルボリュームをマウント...

こちらのポッドの情報を、RESTful APIで取得してみたいと思います。

使用するPodmanのバージョンは 4.3.1になります。


Podman system service

https://docs.podman.io/en/latest/markdown/podman-system-service.1.html

こちらの公式情報より。

REST APIを使用するにあたり、通常はPodman system serviceでAPIコールの受け口となるサービスを作成しますが。

Windows版ということで、サービスを作るコマンドは実装されていないようです。※22.11.29現在。

ということでAPIコールできませんでした。

・・・・

というのも面白くないので、なんとか考えてみようと思います。

Podman systemの情報からヒントを得ようと思います。

podman system info

実行すると、podman systemのホスト情報が表示されますが。

このあたりの情報を参考にしました。

os: linux
remoteSocket:
  exists: true
  path: /run/user/1000/podman/podman.sock
security:
  apparmorEnabled: false

これは、Podman machineの実装内のUnix socket情報かと思います。

現状、Windows版のPodmanは、podman system serviceが実装されておりませんが。

たとえばpodmanコマンドを実行した場合など、内部的にpodman machineに対してREST APIを使用してアクセスしているようです。

その確認は、こちらの記事になります。

Podmanのデバッグログを出力するには
次のオプションのようです。 --log-level=debug Windows版ですが。 イメージのビルドに6分くらいかかっていま...

ここでは、podman machineの内部から、REST APIをコールしてみたいと思います。


Podman machine内部からREST APIをコールしてみる

podmanの具体的なRESTful APIコールのサンプルはこちらの記事になります。

https://www.redhat.com/sysadmin/podman-rest-api

こちらを参考に、実際にAPIをコールしてみたいと思います。

まずは、podman machine sshコマンドで、ホストOSのコンソールに入りました。

podman machine ssh

podman system info情報から、unix socketが存在するか実際に確認します。

ls -al /run/user/1000/podman/podman.sock

確かにソケットが存在します。ふむふむ。

現在、sv1-podという名称のポッドが動いている状態です。

ポッドの情報の取得(inspect)

RESTful APIでポッドの情報を取得してみましょう。

出力結果としてJSONを選択してみました。

curl  --unix-socket /run/user/1000/podman/podman.sock \
http://d/v4.3.0/libpod/pods/sv1-pod/json

このような感じで、確かにポッドの情報が取得できています。

ポッドの停止

先ほど確認したポッドを停止してみました。

curl -XPOST --unix-socket /run/user/1000/podman/podman.sock \
-H content-type:application/json \
http://d/v4.3.0/libpod/pods/sv1-pod/stop

エラーはnullで、該当のポッドのIDが帰ってきました。

podmanコマンドで確認すると、確かにポッドが停止しています。

ポッドの開始

APIのstopをstartに変更して実行します。

curl -XPOST --unix-socket /run/user/1000/podman/podman.sock \
-H content-type:application/json \
http://d/v4.3.0/libpod/pods/sv1-pod/start

問題なくポッドがスタートした模様です。

簡単な確認ではありましたが。

確かに、curlコマンドを使用して、httpリクエストをunix socketにポストすることで、実際にポッドの操作が可能であることがわかりました。


PodmanのAPIリファレンス

PodmanのAPIリファレンスはこちらのようです。

https://docs.podman.io/en/latest/Reference.html

podmanコマンドと同様、ポッド、イメージ、コンテナ、ボリューム等に対する操作が可能のようです。

APIということで、自作のアプリケーションや、Podman Desktopの機能拡張等による、プログラムの内部からの操作が、主な使用目的になると思います。

こちらのリファレンスを参考に、プログラミングが必要になります。


Windows上からREST APIをコールできるかどうか

Windows版はpodman system serviceコマンドが実装されていませんので。

公式な方法では無いと思いますが。

podman machineのunix socketに、Windows側からアクセスできないかどうか確認してみましょう。

Windowsのファイルエクスプローラーから、WSLファイルシステムにアクセスします。

\\wsl$

podman machineが動作していれば、このようにファイルシステムが見えると思います。

unix socketはこちらになります。

/run/user/1000/podman/podman.sock

フォルダ階層を進みます。ここまでは進めました。/run/userまでです。

パーミッションを確認すると、700のため、user.user以外のユーザは入れない状態です。

パーミッションとオーナーを変更してみましたが。

chmod go+rx 1000
chown root.root 1000

パーミッションを変更しても、アクセスできません。

オーナーの変更はエラーでできません。

少し調べたところ。

https://github.com/microsoft/WSL/issues/5718

WSL側の問題のようですが、解決していない状況のようです。

正確な情報ではない可能性が御座いますが、何かLxssManagerまわりの問題の可能性があるそうです。


このような感じで、Windows側からPodmanのRESTful APIを直接コールするのは、まだ難しい状況かもしれません。※22.11.29現在

このあたりは、Podmanの完成度の向上を待たせて頂く状況かもしれません。

Windowsに関しましては、コンテナシステムの選択肢は、macOS・Linuxよりも少なめな状況かと思います。

Podman本体の完成度に加えまして、WSLの完成度の向上にも期待したいと思います。

え?Windows 11ですか?

スポンサーリンク

フォローする

スポンサーリンク