docker - Docker容器在macvlan网络中丢失数据包
问题描述
我正在尝试对接一个项目,包括需要与本地网络上的多个设备通信的 python 服务器。为此,我正在使用用户定义的 macvlan 网络。项目还包括通过默认覆盖网络进行通信的 postgresql 数据库和 Web 应用程序。
我使用以下命令创建了 macvlan 网络:
docker network create --config-only --subnet 10.10.10.0/24 --gateway 10.10.10.1 -o parent=eth0 macvlan_conf
docker network create --config-from macvlan_conf --scope swarm -d macvlan public
然后我使用这个 .yml 文件部署了我们的项目
version: '3'
services:
db:
image: db_image
environment:
POSTGRES_PASSWORD: postgres
POSTGRES_USER: postgres
POSTGRES_DB: mt
networks:
- default
ports:
- 9432:5432
mtwa:
image: mtwa_image
networks:
- default
ports:
- 9090:8090
mtrest:
image: mtrest_image
networks:
- default
ports:
- 9091:8091
mtss:
image: mtss_image
networks:
- default
- public
ports:
- 55555:55555
nginx:
image: nginx_image
networks:
- default
ports:
- 9080:80
networks:
public:
external:
name: public
问题是,当我尝试 ping 本地网络上的任何设备时,从带有 python 服务器(mtss)的容器中,我遇到了极端的数据包丢失(超过 90%)。
其他容器之间或本地网络上的设备之间的其余通信都很好。
最奇怪的部分是,如果我用 python 服务器重新启动容器:
docker restart <Container ID>
Docker 停止了一个容器,但随后启动了两个 python 服务器副本,其中一个仍然连接不良,但第二个工作完美。
我正在使用 Ubuntu 16.04 和 Docker 版本 18.05.0-ce 的机器上工作
任何想法可能导致问题?
解决方案
好的,所以我发现问题是IP地址冲突。连接到 macvlan 的 swarm 模式下的服务不能使用 DHCP,也不能分配静态 IP 地址(https://forums.docker.com/t/docker-swarm-1-13-static-ips-for-容器/28060/4 )
所以我写了一个单独启动容器的 bash 脚本。现在一切正常,但我失去了群模式的额外功能。
希望这可以为面临类似问题的每个人节省时间。
推荐阅读
- javascript - range.setStart 后新字符出现在前一个节点中
- javascript - Spring message in javascript file
- python - TypeError: unorderable types: Tree() < int() (这在 Python 2 中运行良好)
- python - 如何使用 Stack Exchange API 获取答案的正文?
- php - 脚本 selenium python 总是被检测为 flashseats 上的 bot :(
- c# - WPF:将 TextBlock 与顶部的不同字体大小对齐
- c# - 如何使用 MongoDB C# 客户端驱动程序将复杂的嵌套 JSON 数据结构保存到 MongoDB?
- r - 避免重新计算时数据表变灰
- caching - Service Worker 未创建 networkFirst Cache
- rest - Magento 2.2.7 REST API 发布图像失败并显示 500