date
related_level
slug
type
relate_date
summary
status
tags
category
last_updated
Nov 10, 2025 10:02 PM
是否已更新
orginal_page
是否推荐
- 假设已经初始化 Swarm
Docker Swarm 自定义网络集群测试
创建自定义 overlay 网络
docker network create \ --driver=overlay \ --attachable \ --opt encrypted \--ipv6 \--subnet=fd00:dead:beef::/64 \ overlay-openwrt--ipv6(可选)提供 ipv6 网段,默认 ipv4--subnet(可选)子网网段
docker network inspect overlay-openwrt
docker network inspect docker_gwbridge
diff <(docker network inspect overlay-openwrt) <(docker network inspect ingress)- 差异比较
创建测试服务
docker service create --name helloworld1 \ --replicas=1 \ --network overlay-openwrt \ alpine sleep infinity
docker service create --name helloworld2 \ --replicas=1 \ --network overlay-openwrt \ alpine ping www.baidu.com- 用于比较
查看容器网络设置
docker container inspect --format '{{json .NetworkSettings}}' $(docker ps -f name=helloworld1 --format '{{.ID}}') | python -m json.tool
测试自定义网络连通情况
docker exec -it $(docker ps -f name=helloworld1 --format '{{.ID}}') /bin/sh -c "apk update && apk add busybox-extras"- 安装依赖以使用 telnet
docker exec -it $(docker ps -f name=helloworld1 --format '{{.ID}}') telnet <ip> <port>- 测试内部端口连通情况
docker exec -it $(docker ps -f name=helloworld1 --format '{{.ID}}') ping www.baidu.com- 测试外部连通情况
比较两个容器
diff <(docker container inspect --format '{{json .NetworkSettings}}' $(docker ps -f name=helloworld2 --format '{{.ID}}') | python -m json.tool) <(docker container inspect --format '{{json .NetworkSettings}}' $(docker ps -f name=helloworld1 --format '{{.ID}}') | python -m json.tool)
清理试验数据
docker service rm helloworld1
docker service rm helloworld2
docker network rm overlay-openwrt
Docker Swarm 部分网络问题及解决办法
swarm 未监听 4389 端口
lsof -i :2377,7946,4789- 2377 端口在Docker Swarm中用于管理节点之间以及与管理节点的通信
- 7946 端口用于Docker Swarm中的 overlay 网络节点发现
- 4789 端口用于支持Docker的 overlay 网络,使得集群中的容器能够相互通信
- 可以配置
iptables -S | grep 4789
- 重建集群调整端口
docker swarm leave --forcedocker swarm init --data-path-port=7789lsof -i :2377,7946,7789
- 防火墙放行对应端口
iptables -I INPUT -m udp --dport 4789 -m policy --dir in --pol none -j DROP
重建 swarm 集群
docker swarm leave --force
ip link set docker_gwbridge down
ip link del dev docker_gwbridge
service dockerd stop
rm -rf /var/lib/docker
service dockerd start
docker swarm init --data-path-port=7789
修改 swarm 虚拟桥接 docker_gwbridge
ethtool -K docker_gwbridge tx off
修复 WARNING: bridge-nf-call-iptables is disabled
docker info报错WARNING: bridge-nf-call-iptables is disabledWARNING: bridge-nf-call-ip6tables is disabled
vim /etc/sysctl.d/99-docker-iptables.conf
sysctl -p /etc/sysctl.d/99-docker-iptables.conf
modprobe br_netfilter
禁用 worker 上特定端口的流量
由于 docker 在 nat 表的 PREROUTING 链有规则 ,ufw 无法生效
vim /etc/ufw/applications.d/code-server.ini
ufw deny CodeServer
ufw allow CodeServerHTTPS
ufw enable
iptables -t mangle -I PREROUTING ! -i lo -p tcp --dport <port> -j DROP- 在
mangle表的PREROUTING链中插入规则 ! -i lo排除环回地址-p tcp --dport <port>匹配 tcp 协议且目标端口为 <port> 的流量-j DROP丢弃数据包
- Author:白鸟3
- URL:https://blog.kun2peng.top/operation/docker_swarm_network_debug
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
