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

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

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

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

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


検証環境はWindows 10

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

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

https://denor.jp/windows%E7%89%88podman-exe%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E6%89%8B%E9%A0%86-2022%E5%B9%B410%E6%9C%88%E7%89%88

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

https://denor.jp/docker%e3%81%8b%e3%82%89podman-exe%e3%81%b8%e3%81%ae%e3%82%b3%e3%83%b3%e3%83%86%e3%83%8a%e7%a7%bb%e8%a1%8c%e6%89%8b%e9%a0%86-mongodb%e7%b7%a8

https://denor.jp/docker%e3%81%8b%e3%82%89podman-exe%e3%81%b8%e3%81%ae%e3%82%b3%e3%83%b3%e3%83%86%e3%83%8a%e7%a7%bb%e8%a1%8c%e6%89%8b%e9%a0%86-postgresql%e7%b7%a8

こちらのポッドの情報を、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を使用してアクセスしているようです。

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

https://denor.jp/podman%E3%81%AE%E3%83%87%E3%83%90%E3%83%83%E3%82%B0%E3%83%AD%E3%82%B0%E3%82%92%E5%87%BA%E5%8A%9B%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF

ここでは、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ですか?[amazonjs asin=”B09VSXGG5V” locale=”JP” title=”Windows 11 Pro 日本語版”]

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です