簡體   English   中英

Docker容器在Macvlan網絡中丟失數據包

[英]Docker container loses packets in macvlan network

我正在嘗試對包括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的服務無法使用DHCP,也無法為它們分配靜態IP地址( https://forums.docker.com/t/docker-swarm-1-13-static-ips-for-容器/ 28060/4

因此,我寫了一個bash腳本來單獨啟動容器。 現在一切正常,但是我失去了群集模式的額外功能。

希望這可以為面臨類似問題的每個人節省時間。

這就是我解決問題的方式(Docker-CE 18.06)。 我有3個管理器節點: host1host2host3

我在每個節點上創建了不同的僅配置網絡

host1

$ 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

host2

$ 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",

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM