【发布时间】:2025-11-27 16:05:02
【问题描述】:
过去,我们已经成功使用nicolaka/netshoot 来捕获使用docker-compose 运行的Docker 容器的网络流量:
$ cat docker-compose.yml
version: "3.6"
services:
tcpdump:
image: nicolaka/netshoot
depends_on:
- nginx
command: tcpdump -i any -w /data/nginx.pcap
network_mode: service:nginx
volumes:
- $PWD/data:/data
nginx:
image: nginx:alpine
ports:
- 80:80
$ docker-compose up
WARNING: The Docker Engine you're using is running in swarm mode.
Compose does not use swarm mode to deploy services to multiple nodes in a swarm. All containers will be scheduled on the current node.
To deploy your application across the swarm, use `docker stack deploy`.
Creating network "netshoot_default" with the default driver
Creating netshoot_nginx_1 ... done
Creating netshoot_tcpdump_1 ... done
$ curl -s -o /dev/null http://localhost
$ docker-compose down
Stopping netshoot_tcpdump_1 ... done
Stopping netshoot_nginx_1 ... done
Removing netshoot_tcpdump_1 ... done
Removing netshoot_nginx_1 ... done
Removing network netshoot_default
$ tshark -2 -r data/nginx.pcap http
13 4.760638 172.25.0.1 → 172.25.0.2 HTTP 145 GET / HTTP/1.1
17 4.760866 172.25.0.2 → 172.25.0.1 HTTP 684 HTTP/1.1 200 OK (text/html)
$
不幸的是,如果容器以docker stack create 启动,这似乎不起作用,因为不支持network_mode:
$ docker stack deploy -c docker-compose.yml netshoot
Ignoring unsupported options: network_mode
Creating network netshoot_default
Creating service netshoot_tcpdump
Creating service netshoot_nginx
$ curl -s -o /dev/null http://localhost
$ docker stack rm netshoot
Removing service netshoot_nginx
Removing service netshoot_tcpdump
Removing network netshoot_default
$ tshark -2 -r data/nginx.pcap http
$ tshark -2 -r data/nginx.pcap tcp
6 4.221820 172.18.0.1 → 172.18.0.2 TCP 80 63798 → 80 [SYN] Seq=0 Win=65495 Len=0 MSS=65495 SACK_PERM=1 TSval=191764735 TSecr=0 WS=128
$
我们如何在 docker-compose.yml 中配置我们的 netshoot 容器,以便它们共享其他容器的网络接口,即使它们是通过 docker stack create 启动的?
【问题讨论】:
-
在 docker compose 中您指定:“network_mode: service:nginx” 是错字吗?好的,不。有用。我不知道那个表格。
-
如果你能做到,请写一个可重现的例子,因为这看起来真的很有趣
-
可以在每个服务上提供“network:xxx”来强制网络链接
标签: docker networking docker-compose docker-swarm