#chiroito ’s blog

Java を中心とした趣味の技術について

WindowsにPodman Desktopを入れた後にIntelliJ IDEAと他のWSLから実行できるようにする

Windows に Podman Desktop を入れると、コマンドプロンプトやGUI上でコンテナを使えるようになります。

それだけだと不便なので、使用しているIDEとWSLからも使えるように設定をした備忘録です。

Podman Desktop を入れると WSL 上に podman-machine-default という Linux が入ります。

> wsl -l
Linux 用 Windows サブシステム ディストリビューション:
Ubuntu-20.04 (既定)
podman-machine-default
Ubuntu-22.04

Windows 側の Podman の設定は、SSH を使って podman-machine-defaultへ接続するようになっています。

> podman context list
Name                         URI                                                          Identity                                    Default
podman-machine-default       ssh://user@localhost:50725/run/user/1000/podman/podman.sock  C:\Users\c_hir\.ssh\podman-machine-default  true
podman-machine-default-root  ssh://root@localhost:50725/run/podman/podman.sock            C:\Users\c_hir\.ssh\podman-machine-default  false

ある日、急に繋がらなくなったのでいろいろ試した結果、ホスト名をlocalhostからpodman-machine-defaultのIPにしたらアクセスできるようになった。netsh.exe interface portproxy add v4tov4 で同IPにフォワードしているので不思議。

podman system connection remove podman-machine-default 
podman system connection add podman-machine-default --identity C:\Users\c_hir\.ssh\podman-machine-default ssh://user@172.26.130.33:50725/run/user/1000/podman/podman.sock

IntelliJ IDEA

IntelliJ IDEAのコンテナの設定は Services で行います。

「+」を選択するとメニューが出るので、Docker Connection を選択します。

Docker ダイアログが表示され、特に変更は必要ありません。分かりやすいように名前だけ変えると良いでしょう。ダイアログの下側に Connection Successful と表示されてればOKです。

この設定方法以外にも podman context list で表示された情報を使って、Podman Desktop が作成した WSL へ SSH で接続する方法も可能です。

OK を選択すると、 Services に追加されます。

WSL

SSHの鍵をWindowsからWSLへコピーして、権限を設定

sudo mkdir /root/.ssh
sudo chmod 700 /root/.ssh
sudo cp /mnt/c/Users/c_hir/.ssh/podman-machine-default /root/.ssh/podman-machine-default
sudo chmod 600 /root/.ssh/podman-machine-default

鍵を使って接続できることを確認

> sudo ssh -i ~/.ssh/podman-machine-default user@localhost -p 50725 exit

podman にリモートホストの情報を登録

> sudo podman system connection add -d --identity /root/.ssh/podman-machine-default --socket-path /run/user/1000/podman/podman.sock podman ssh://user@localhost:50725

情報が登録されたことを確認

> sudo podman system connection list
Name        Identity                           URI
podman*     /root/.ssh/podman-machine-default  ssh://user@localhost:50725/run/user/1000/podman/podman.sock

イメージとコンテナの状況を見てみてもなぜか見えない・・・

> sudo podman image list
REPOSITORY  TAG         IMAGE ID    CREATED     SIZE
> sudo podman container list
CONTAINER ID  IMAGE       COMMAND     CREATED     STATUS      PORTS       NAMES

なぜか実行はできる

> sudo podman -r run quay.io/podman/hello
Trying to pull quay.io/podman/hello:latest...
Getting image source signatures
Copying blob sha256:e748d51595bc62e996d56ccaa873a5f520ab314d5c63aca3b53b4110129d42d1
Copying config sha256:54c80734fe405a23783a26881d74c5842f6b047f021b029c0b672565101fef76
Writing manifest to image destination
Storing signatures
!... Hello Podman World ...!

         .--"--.
       / -     - \
      / (O)   (O) \
   ~~~| -=(,Y,)=- |
    .---. /`  \   |~~
 ~/  o  o \~~~~.----. ~~
  | =(X)= |~  / (O (O) \
   ~~~~~~~  ~| =(Y_)=-  |
  ~~~~    ~~~|   U      |~~

Project:   https://github.com/containers/podman
Website:   https://podman.io
Documents: https://docs.podman.io
Twitter:   @Podman_io

再びイメージとコンテナの状況を見てみてもやはり見えない・・・

> sudo podman image list
REPOSITORY  TAG         IMAGE ID    CREATED     SIZE
> sudo podman container list
CONTAINER ID  IMAGE       COMMAND     CREATED     STATUS      PORTS       NAMES

Podman DesktopだとこのWSL上で扱ったイメージとコンテナは見られます。