#chiroito ’s blog

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

Windows + Podman でQuarkusのDevサービスを使おうとしたら心が折れたけど、いつの間にか対応されてた

Quarkus は、開発モードで動かすと、使用しているミドルウェアをコンテナで起動してくれる Dev サービスという機能があります。開発環境に環境を構築しないで良いのはとても楽です。

Dev サービス は、その中で Testcontainers を使用しており、Testcontainers は podman と docker の両方に対応してます。

結果

Windows で podman を使っているとダメでした。

追記

2023年12月1日時点で試したところ、動くようになってました!

原因

ログは以下です。

2023-05-23 17:12:01,954 WARN  [org.tes.doc.DockerClientProviderStrategy] (build-45) Unknown DOCKER_HOST scheme ssh, skipping the strategy test...
2023-05-23 17:12:01,998 INFO  [org.tes.doc.DockerMachineClientProviderStrategy] (build-45) docker-machine executable was not found on PATH ([略])
2023-05-23 17:12:01,999 ERROR [org.tes.doc.DockerClientProviderStrategy] (build-45) Could not find a valid Docker environment. Please check configuration. Attempted configurations were:
    EnvironmentAndSystemPropertyClientProviderStrategy: failed with exception IllegalArgumentException (Unsupported protocol scheme: ssh://root@localhost:50725/run/podman/podman.sock)As no valid configuration was found, execution cannot continue.
See https://www.testcontainers.org/on_failure.html for more details.
2023-05-23 17:12:02,009 WARN  [io.qua.dep.IsDockerWorking] (build-45) Unable to connect to DOCKER_HOST URI ssh://root@localhost:50725/run/podman/podman.sock, make sure Docker is running on the specified host
2023-05-23 17:12:02,553 INFO  [io.qua.dep.dev.IsolatedDevModeMain] (main) Attempting to start live reload endpoint to recover from previous Quarkus startup failure

podman は SSH を使用してリモートからの接続を受けるけるため、DOCKER_HOST に該当する物が ssh:// で始まります。Testcontainers はこれをサポートしてないらしく失敗しました。

追記(2023年12月1日)

Podman が /run/podman/podman.sock で接続を受けるようになっていました。

対処法

何もしなくても動きます!

以下のどれかの方法で Dev サービスが使えるようになります。

  • Podman Desktop で作成された Linux に Java をインストールして、Mavenを実行しましょう。
  • Windows に docker を入れましょう。
  • リモートの docker を使いましょう。
  • Mac か Linux 上で開発する。

Windows に docker を入れる方法は以下にあります。

b.chiroito.dev

Testcontainers でリモートの docker を使うには環境変数 DOCKER_HOSTを設定するか、 ~/.testcontainers.propertiesファイルで以下を設定します。

docker.host=tcp://<リモートのIP>:<ポート>