📝

Testcontainers for .NETをpodmanで動かす

2024/05/29に公開

最近リリースされたAspirePodmanで動作します。

https://learn.microsoft.com/en-us/dotnet/aspire/fundamentals/setup-tooling?tabs=windows&pivots=visual-studio#container-runtime

これは、結構うれしい話でやっぱりDocker Desktopのライセンスを会社が出してくれないってところはそれなりにあるんですよね。

で、そうならば全部Podmanですませたい。Testcontainers for .NETは動くのか??ってことになるのです。

公式には

It is possible to configure Testcontainers to work for other Docker setups, such as a remote Docker host or Docker alternatives. However, these are not actively tested in the main development workflow, so not all Testcontainers features might be available and additional manual configuration might be necessary.

って話で、つまりは、「Docker for windows以外でも動くように作ってるけど、しっかり確認してないから保証はせーへんでー」って感じらしいです。

とりあえず、試しに設定してみようってことで、設定はどこに書くかというと、以下。

https://dotnet.testcontainers.org/custom_configuration/

.testcontainers.propertiesってのをユーザーディレクトリの直下に置くらしい。

いろんなプロパティがあってよくわからんけども、少なくともdocker.hostの値は設定しなあかんっぽい匂いがするので、設定することにするけど、じゃ、値は何を設定するのかなと思って「podman DOCKER_HOST」でググると以下だとのこと。

https://podman-desktop.io/docs/migrating-from-docker/using-the-docker_host-environment-variable

自分の環境では、

\\.\pipe\podman-machine-default

になった。どうやら、Podmanが動いているWSL2のインスタンス名の前にお決まりのものをつける感じの模様。ドキュメントでは、バックスラッシュをスラッシュに変えて、頭にnpipe://をつけろってなってるから、.testcontainers.propertiesは以下のように設定した。

docker.host=npipe:////./pipe/podman-machine-default

なんか、スラッシュが4連続してるが非常に気持ち悪い。。。。まぁ、でもそうしろってドキュメントに書かれてるのでシカタナイ。

動かしてみると、、、

エラー

System.AggregateException : One or more errors occurred. (The type initializer for 'DotNet.Testcontainers.Configurations.TestcontainersSettings' threw an exception.) (The following constructor parameters did not have matching fixture data: AzureStorageContainerFixture fixture)
---- System.TypeInitializationException : The type initializer for 'DotNet.Testcontainers.Configurations.TestcontainersSettings' threw an exception.
-------- System.ArgumentException : npipe:////pipe/podman-machine-default is not a valid npipe URI
---- The following constructor parameters did not have matching fixture data: AzureStorageContainerFixture fixture

ってエラーがでる。docker.hostの値がおかしいぞって怒られてますね。あっ、ここではAzuriteを立ち上げてみてます。

そんなん言われても、、、と思いますが、気を取り直して気持ち悪かったスラッシュ4連続を、よくある2連続に変えてみる。

docker.host=npipe://./pipe/podman-machine-default

成功

すんなり動いた。

今のところは、AzuriteとSQL Edgeのコンテナしか動かしてないので、他のものも同様にすんなり動くかはわからんけども、なんとなく脱Docker Desktopが見えてきた気がする。

Discussion