Windows版Podman.exeのPodmanマシンのIPアドレスを得るには

先日、Windows版のPodman.exeでポッドを起動してみました。

ポッドで動かしているWebアプリにアクセスするには、podmanのネットワークを使用する必要があると思いますが。

Windows版の場合、WSLを通じてアクセスする必要があるため、ベアメタルであるPodmanマシンのIPアドレスを調べる必要がある感じです。(他の方法は未調査

まあ勉強も兼ねて、PodmanマシンのIPアドレスを調べる方法を記録したいと思います。


Podmanマシンのコンソールで調べる場合

ベアメタルとして、Fedora Version 36が動いているのは、前回確認済みです。※22.10.27現在

Podmanマシンのコンソールに接続

podman machine ssh

Fedoraということで、ipコマンドで調べられそうですが。

どうもインストールされていないようです。

dnfでnet-toolsをインストールすれば、ifconfigコマンドで調べられそうです。

sudo dnf update
sudo dnf install -y net-tools 
ifconfig

こちらの実行例では、eth0のIPアドレスとして、172.18.200.46が割り当てられていることがわかります。

Podmanマシンはその名の通り、Podmanが管理する仮想マシンということで、削除して作り直したり、動的に生成する場合があります。よって、手動でツールをインストールするのは、手間がかかり、問題があります。

またIPアドレスの抽出を自動化したい場合、オーバーヘッドが生じてしまいます。

独自に、何か別の手を考えてみました。


/proc/net/fib_trieファイルからIPアドレスを得る

ifconfigコマンドを使用して、正解のIPアドレスがわかりましたので。

net-toolsをインストールしなくても、なんとかIPアドレスを取る方法を考えてみたいと思います。

Linuxカーネルの状態が格納された、procファイルシステムから、IPアドレスが得られないかどうか、試してみました。

cat /proc/net/fib_trie

ふむふむ。この中に、IPアドレスが隠れていそうです。

WSLで使用するIPアドレスは、第1オクテットが172で始まるプライベートアドレス

という特徴があります。この特徴を利用して、fib_trieテキストの各行をパターンマッチングして、IPアドレスを抽出するコマンドを作ってみようかと。

・・・・

すこし違うかも

・・・・

結果的に私が作成したコマンドは、このような感じです

cat /proc/net/fib_trie | sed -e 's/^[ \-\|\+]*[ \-]*//' | grep '[\d]*\.' |grep -v -e '0.0.0.0' -e '^127\.[\d]*' -e '\/' -e '\.0$' -e '\.255$'

※22.11.25修正:IPアドレスを取り出す構文に不具合がありましたので修正しました。不具合の内容:IPアドレスが0で終わる場合、正しく取り出せませんでした。構文に\.を追加しました。

パイプで連結してあるため長いですが。ざっとご説明しますと

  • sedコマンドで、行頭の +– や|–を除去
  • grepコマンドで、数字のみ抽出
  • grep -vコマンドで、ネットワークアドレス(~.0)とブロードキャストアドレス(~.255)を除外

というわけで3つのコマンドで構成されています。

正解の値が抽出されていますが、2行あるのは、MainとLocalの2つのセクションに、それぞれ入っているためだと思います。

値が同一ですので、問題ないものとして、最後に抽出されたものを正解の値として使用したいと思います。


Windows側からPodmanマシンのIPアドレスを得るには

Podmanの仕様上、inspectコマンドでIPアドレスを得られるらしいのですが。Windows版は実装されていない感じでした。

よって、実装されるまでの間のつなぎとして、別の方法を考えてみます。

先程の手段で、Podmanマシンのコンソール内でIPアドレスを取り出す事ができました。次のステップとして、Windowsのコマンドラインで取り出してみます。

コマンドプロンプトを実行
cmd.exe

FOR構文を使って、コマンドの実行結果を抽出しようと思います。

podman machineコマンドでsshを起動し、先程作成したIPアドレスの抽出コマンドを実行、環境変数にセットします。

FOR /F %i in ('podman.exe machine ssh "cat /proc/net/fib_trie  | sed -e 's/^[ \-\|\+]*[ \-]*//' | grep '[\d]*\.' |grep -v -e '0.0.0.0' -e '^127\.[\d]*' -e '\/' -e '\.0$' -e '\.255$'"') DO set IPADR=%i

FOR構文を使用する都合上、podman.exeコマンドのパスは、環境変数PATHに追加しておく必要があります。

Podman Ver.4.3.0をインストールした場合、自動的にPATHが追加されるため、特になにかする必要はありません。

実行結果を見ますと、ベアメタルのコンソールで実行した時と同様、MainとLocal分の2回、IPアドレスが抽出されて、環境変数IPADRにセットされました。

ふう。

とりあえずこれで完成とさせて頂きます。

お疲れ様でした!


Windows版のPodman.exeにて、ベアメタルであるPodmanマシンのIPアドレスを抽出してみました。

inspectコマンドで調べられない状況のため、苦肉の策ですが。

procファイルシステムからIPアドレスを取り出したため、Linuxカーネルの仕様が変わらない限り、ベアメタルであるFedoraのバーションが今後変わっても、抽出できると思います。

またWSLでは172から始まるプライベートアドレスが使用されていますが、作成したスクリプトは、ネットワークアドレスとブロードキャストアドレスを除外することで、結果的に172で始まるIPアドレスを取り出せている感じです。

次回は、取り出したIPアドレスを使用して。

WSL越しに、スマートフォンからPodmanのWebアプリケーションにアクセスできるようにしてみたいと思います。

ではまた!

※22.10.27追記:

記事の続きが御座います。

こちらのバッチファイルで、ポッドの起動・ポートフォワード・ファイアウォールの開放が可能になりました。

スポンサーリンク

フォローする

スポンサーリンク