🌊

Testcontainers を利用したテストが急に動かなくなってハマった件について

2024/08/30に公開

ある日突然 Testcontainers を利用しているユニットテストが動かなくなった。

動かなくなったのはリポジトリ周りのユニットテストだったが、周辺を直していたこともありローカル環境に問題があることに気がつくのが遅れ、半日以上を溶かしてしまった。
同様の事象が発生している人が Issue 上では見られたので、回避方法を残しておく。

Rancher Desktop で Testcontainers を利用したテストを動かす場合には以下の設定をすると思うが、今回はどうやらこのあたりがおかしくなったようだ。

https://golang.testcontainers.org/system_requirements/rancher/

ちなみに、OS や Rancher Desktop のアップデートは行っていないのでなぜ急にこうなったかは不明だ。

さっそく結論だが、以下の環境変数がうまく設定できなくなっていたことが原因だった。

export TESTCONTAINERS_HOST_OVERRIDE=$(rdctl shell ip a show vznat | awk '/inet / {sub("/.*",""); print $2}')

試しに以下のコマンドを実行してみたところIPv4 アドレスがないないため、環境変数に値が設定されなかった模様。

$ rdctl shell ip a show vznat
3: vznat: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:55:55:c7:a2:84 brd ff:ff:ff:ff:ff:ff
    inet6 ...

以下のIssue でも何人か同様の事象が起きている人がいるので私だけではなさそうだが、回避方法は明記されていない。

https://github.com/rancher-sandbox/rancher-desktop/issues/2609#issuecomment-1759100199

https://github.com/rancher-sandbox/rancher-desktop/issues/2609#issuecomment-1966665399

色々試したが、以下の方法で回避可能(根本的な解決方法ではないかもしれない)。

Rancher Desktop を管理者権限で実行するように変更する。

環境変数を以下のように変更する。

#export TESTCONTAINERS_HOST_OVERRIDE=$(rdctl shell ip a show vznat | awk '/inet / {sub("/.*",""); print $2}')
export TESTCONTAINERS_HOST_OVERRIDE=$(rdctl shell ip a show rd0 | awk '/inet / {sub("/.*",""); print $2}')

設定後、Rancher Desktop が再起動されるので Testcontainers を利用したユニットテストを実行して動作を確認してください。

Discussion