linux - 传入流量未转发到正确的 docker 容器
问题描述
从 Server-A 到 Server-B 有一个端口为 1111/UDP 的传入流量,Server-B 有多个容器启动并运行,其中一个容器(udp-listener)正在侦听端口 1111/udp,它的 IP 是( 172.17.0.2),问题是:
- 使用 ip 172.17.0.2停止容器“udp-listener”
- 启动像 Nginx 这样的新容器,所以现在 Nginx 的 ip 为172.17.0.2
- 启动具有下一个可用 IP 172.17.0.3的“udp-listener”
- 现在,来自 Server-A 的传入流量仍在尝试访问172.17.0.2,这是输出
$ tcpdump port 1111
17:30:09.875982 IP Server-A-IP.pvsw > 172.17.0.2.pvsw: UDP, length 49
现在,如果我给“ udp-listener ”容器 IP 172.17.0.2
,那么它将再次工作。
我可以在哪里查找的任何提示,顺便说一句,Server-A 不可访问,它只是设置为将事件发送到 server-B 的公共 IP。
调试的最佳实践是什么?有什么工具或教程吗?
我还检查了 IP 表是否有任何规则,但我找不到任何东西,结果如下:
Chain PREROUTING (policy ACCEPT 2178 packets, 155K bytes)
pkts bytes target prot opt in out source destination
12M 805M PREROUTING_direct all -- * * 0.0.0.0/0 0.0.0.0/0
12M 805M PREROUTING_ZONES_SOURCE all -- * * 0.0.0.0/0 0.0.0.0/0
12M 805M PREROUTING_ZONES all -- * * 0.0.0.0/0 0.0.0.0/0
3408K 204M DOCKER all -- * * 0.0.0.0/0 0.0.0.0/0 ADDRTYPE match dst-type LOCAL
Chain INPUT (policy ACCEPT 780 packets, 46800 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 789 packets, 47332 bytes)
pkts bytes target prot opt in out source destination
6021K 361M OUTPUT_direct all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 DOCKER all -- * * 0.0.0.0/0 !127.0.0.0/8 ADDRTYPE match dst-type LOCAL
Chain POSTROUTING (policy ACCEPT 807 packets, 48412 bytes)
pkts bytes target prot opt in out source destination
0 0 MASQUERADE udp -- * * 172.17.0.1 172.17.0.1 udp dpt:8080
0 0 MASQUERADE udp -- * * 172.17.0.2 172.17.0.1 udp dpt:1111
Chain DOCKER (2 references)
pkts bytes target prot opt in out source destination
3348K 201M RETURN all -- docker0 * 0.0.0.0/0 0.0.0.0/0
0 0 RETURN all -- br-4a68f517a271 * 0.0.0.0/0 0.0.0.0/0
0 0 DNAT udp -- !docker0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:8080to:172.17.0.1:8080
0 0 DNAT udp -- !docker0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:1111 to:172.17.0.2:1111
解决方案
推荐阅读
- docker - 如何在 Selenoid 浏览器上运行脚本
- amazon-web-services - RDS 从 VPC 内解析到公共 IP
- php - 如何从 CI Conroller 中的 REST API 获取数据?
- javascript - 如何在 Javascript 中管理异步鼠标事件
- python - 我收到一个 ValueError:所有边界框都应该有正的高度和宽度
- python - 通过for循环django显示两个对象
- ruby-on-rails - 在 Rails 和 Sinatra 之间通过 memcached 共享数据时,如何修复 Sinatra 不处理 ActiveSupport
- python - pytest 不会运行子目录中的测试文件
- php - 控制器的特征或服务
- python-3.x - Python + Selenium 单击叠加层中的表单按钮