ネットワークに起因するトラブル調べようとすると最終的にパケットキャプチャしないといけないことがしばしばあります。通常はWiresharkなどを使うのでしょうが、Docker内ではそのまま使えないので、tcpdumpでキャプチャすることになりますが、イメージに入っているとは限らないしというか、多分入っていないし、余計なものを追加したくもない。
ということで、tcpdumpが入っているイメージを作って、特定のコンテナにアタッチすればいいようです。
FROM alpine RUN apk add --no-cache tcpdump
docker build -t debugtcpdump .
これでdebugtcpdumpというイメージができるので、キャプチャすると。ただし、このままだとコンテナ内でキャプチャしたファイルが揮発してしまうので、ボリュームマウントしておきます。
docker run -it -v /mnt/c/temp/:/tmp --rm --net container:対象コンテナ名 debugtcpdump tcpdump -nn -X port 80 -w /tmp/web_dump.output
(WSL2で実行しています)
これでコンテナ内の80/tcpに対してキャプチャができて、c:\temp\web_dump.output
というファイルができます。今回はパケットキャプチャだけなのでtcpdumpだけでいいですが、各種調査用のツールが入ったイメージが公開されています。
どこの調査で何使えばいいか載っていてすごい。