docker内部有多个后台tcpdump进程

docker内部有多个后台tcpdump进程,docker,tcpdump,Docker,Tcpdump,我正在docker中开发一个使用微服务的系统,我想分析在给定docker网络中运行的不同docker容器的网络流量 现在,我有一个运行supervisord并连接到主机网络以访问主机接口的容器,如下所示: Dockerfile: FROM debian ENV PCAP_READ_DIR '/data' RUN apt-get update && apt-get -y -q install \ tcpdump supervisor && \ apt

我正在docker中开发一个使用微服务的系统,我想分析在给定docker网络中运行的不同docker容器的网络流量

现在,我有一个运行supervisord并连接到主机网络以访问主机接口的容器,如下所示:

Dockerfile:

FROM debian
ENV PCAP_READ_DIR '/data'
RUN apt-get update && apt-get -y -q install \
    tcpdump supervisor && \
    apt-get clean
COPY . /app/
WORKDIR /app
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisord.conf"] 
supervisord.conf:

[supervisord]
nodaemon=true

[program:init_script]
command=/app/init.sh
numprocs=1
process_name=%(program_name)s_%(process_num)02d
redirect_stderr: true
autorestart: false
startretries=0
我的init.sh脚本最终将在后台运行数量可变的tcpdump进程

init.sh:

...etc..

while :
do
  info "Watch the wlp3s0 interface"

  tcpdump -s 0 -c 10 -w "data/pcap/default_br-1234_%Y-%m-%d_%H:%M:%S.pcap"

  sleep 3
done
容器正确执行,即使tcpdump在前台运行,也会生成pcap,但没有反映主机上发生的网络流量的数据(例如访问给定网站)

[编辑]:这是我为运行docker容器而执行的命令:

docker run --rm -it \
       -v "$PWD":/app \
       -v "$PWD"/data:/app/data \
       -v "$PWD"/supervisord.conf:/etc/supervisord.conf \
       -p 1234:80 \
       --network host \
       --name docker-watcher \
       -e MODE=development \
       docker-watcher

尝试将
--privileged
添加到您的
docker运行
命令中。我必须通过在docker文件中添加来克服一个错误:
运行mv/usr/sbin/tcpdump/usr/bin/tcpdump
,但现在看来,如果我等待足够长的时间,它只捕获了一些http流量。您是否设法记录了一些内容?我尝试使用crccheck/tcpdump docker映像对停靠的mysql容器进行tcpdump,其中我需要向tcpdump命令添加
-I any
选项。可能还可以尝试
-i all
或类似方法。另外:您在某处看到tcpdump的输出了吗?它可以提供一些提示。我通过从supervisord应用程序调用tcpdump进程来获得记录的输出,就像我在一个旧项目中所做的那样: