我试图将包含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
问题是来自带有python服务器的容器(mtss)当我尝试ping本地网络上的任何设备时,我有极端的数据包丢失(超过90%)。
其他容器之间或本地网络上的设备之间的其余通信都很好。
最奇怪的是,如果我用python服务器重新启动容器:
docker restart <Container ID>
Docker停止一个容器,但随后它启动了两个python服务器副本,其中一个仍然连接不良,但第二个工作完美无瑕。
我在使用Ubuntu 16.04和Docker版本18.05.0-ce的机器上工作
任何可能导致问题的想法?
答案 0 :(得分:0)
好的,所以我发现问题出在IP地址冲突。连接到macvlan的群集模式下的服务无法使用DHCP,也无法为它们分配静态IP地址(https://forums.docker.com/t/docker-swarm-1-13-static-ips-for-containers/28060/4)
所以我写了一个bash脚本来单独启动容器。现在一切正常,但是我失去了群集模式的额外功能。
希望这可以为遇到类似问题的每个人节省时间。
答案 1 :(得分:0)
这就是我解决问题的方式(Docker-CE 18.06)。 我有3个管理器节点: host1 , host2 和 host3
我在每个节点上创建了不同的仅配置网络
主机1 :
$ docker network create --opt parent=ens18 --subnet=10.19.10.0/23 --gateway=10.19.11.1 --ip-range=19.19.10.0/29 --config-only macvlan_conf
主机2 :
$ docker network create --opt parent=ens18 --subnet=10.19.10.0/23 --gateway=10.19.11.1 --ip-range=19.19.10.8/29 --config-only macvlan_conf
host3 :
$ docker network create --opt parent=ens18 --subnet=10.19.10.0/23 --gateway=10.19.11.1 --ip-range=19.19.10.16/29 --config-only macvlan_conf
然后,我在host1上创建了一个群体网络:
$ docker network create --config-from=macvlan_conf --driver=macvlan --scope=swarm macvlan_net
因此,现在docker IPAM驱动程序不再被三个节点上的相同ip范围所混淆:
host2 | SUCCESS | rc=0 >>
d78f4fba4fcc
"IPAddress": "10.19.10.8",
host3 | SUCCESS | rc=0 >>
9ee40555f1c8
"IPAddress": "10.19.10.16",
host1 | SUCCESS | rc=0 >>
be76266d7180
"IPAddress": "10.19.10.2",
1052f0a8de1e
"IPAddress": "10.19.10.1",