前提・実現したいこと
コンテナ間の通信をキャプチャしたいです
docker-composeを利用して以下の2つのコンテナを作成します
- Webサーバ(ベース: php:7.4-rc-apache)
- クライアント(ベース: ubuntu:latest)
クライアントからcurlで適当なリクエストを発生させ,その際の通信をtcpdumpでキャプチャしたいです.
現状として,下に示すようなリクエストを送信する前にtcpdump
を起動し,送り終わったらkill
するシェルスクリプトを書いて実現しようと思っています.
ただし問題があって,クライアント側のコンテナを起動してdocker exec -it <コンテナ名> bash
で中に入って./script.sh
と実行すると期待通りすべてのリクエストを記録したdump.pcap
が得られるんですが,
DockerfileでENTRYPOINTに["./script.sh"]
としてコンテナを起動すると最初の2つのリクエストのみ記録された不完全なpcapファイルが出力されてしまいます.
可能であればコンテナの起動から通信のキャプチャまで自動で行いたいので後者の方法がうまくいくといいなと考えています.
正直Dockerも最近覚えたばかりで,tcpdumpの使い方が間違っているのか,Dockerがわかっていないのかすらわかっていません.
よろしくお願いします.
ちなみにDocker for Macを使っているのでdocker0
インターフェースを利用したキャプチャはできません.
該当のソースコード
sh
1#!/usr/bin/env bash 2sleep 5 3 4echo "tcpdump -n -v -w /root/dump.pcap &" 5tcpdump -w /root/dump.pcap & 6pid=$! 7 8sleep 5 9 10echo "[*] curl http://server/" 11curl http://server/ 12sleep 2 13 14echo "[*] curl -u admin:password http://server/" 15curl -u admin:password http://server/ 16sleep 2 17 18echo "[*] curl http://server/" 19curl http://server/ 20sleep 2 21 22echo "[*] curl -u admin:password http://server/" 23curl -u admin:password http://server/ 24sleep 2 25 26sleep 5 27kill $pid
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。