Docker容器在macvlan网络中丢失数据包

Docker容器在macvlan网络中丢失数据包,docker,Docker,我正在尝试对一个项目进行dockerize,该项目包括需要与本地网络上的多个设备通信的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

我正在尝试对一个项目进行dockerize,该项目包括需要与本地网络上的多个设备通信的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重启
Docker停止了一个容器,但随后它启动了python服务器的两个副本,其中一个仍然连接不良,但第二个工作正常

我正在使用Ubuntu 16.04和Docker版本18.05.0-ce的机器上工作


你知道是什么导致了这个问题吗?

好的,所以我发现问题是IP地址冲突。连接到MAVLAN的swarm模式下的服务无法使用DHCP,也无法为其分配静态IP地址()

所以我编写了一个bash脚本,分别启动容器。现在一切正常,但我失去了swarm模式的额外功能


希望这能为每个面临类似问题的人节省时间。

这就是我解决问题的方法(Docker CE 18.06)。 我有3个管理器节点:host1host2host3

我在每个节点上创建了不同的仅配置网络

主机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

主机3

$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

然后我在主机1上创建了一个swarm scope网络:

$docker network create--config from=macvlan\u conf--driver=macvlan--scope=swarm macvlan\u 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",