【问题标题】:docker-compose macvlan can't access internetdocker-compose macvlan 无法访问互联网
【发布时间】:2019-08-23 19:39:12
【问题描述】:

我在一个虚拟机中运行 ubuntu 桌面(我的主机是 mac),在这个虚拟机中我正在用 docker-compose 试验macvlan docker 网络驱动程序。

这是我的docker-compose.yml 文件:

version: '3.7'
services:
  trader:
    build: ./
    image: giuliotrader
    container_name: giuliotrader
    networks: 
      trading:
        ipv4_address: 172.16.86.33
    depends_on: 
      - tws  

  tws:
    build: ./ib-docker
    image: ibconnect
    container_name: ibconnect
    ports:
      - "4001:4001"
      - "4003:4003"
      - "5901:5901"
    volumes:
      - ./ib-docker/config.ini:/root/ibc/config.ini
      - ./ib-docker/gatewaystart.sh:/opt/ibc/gatewaystart.sh
    networks: 
      trading:
        ipv4_address: 172.16.86.22

networks: 
  trading: 
    driver: macvlan
    driver_opts:
      parent: enp0s3.10
    ipam:
      config:
        - subnet: 172.16.86.0/24
          #gateway: 172.16.86.1

我在使用这两个容器访问互联网时遇到问题。

我可以通过docker exec -it ibconnect /bin/bash访问机器,但是他们无法访问网络,如果我apt-get install iputils-ping我得到:

   Temporary failure resolving 'archive.ubuntu.com'

如果我在一个容器上nc -l 5047 而在另一个容器上nc 172.16.86.22 5047 我得到Connection refused

如果我取消注释最后一行 (gateway) docker-compose 会报错:

ERROR: The Compose file './docker-compose.yml' is invalid because:
networks.trading.ipam.config value Additional properties are not allowed ('gateway' was unexpected), 

我不确定在配置网关的配置中缺少什么。如何在此设置中正确配置网络?我找不到任何像样的文档。

谢谢,

【问题讨论】:

  • 是否有充分的理由进行此网络设置?通常容器在 docker 网络中运行,在这个级别不需要干预。
  • 我在运行在 ibconnect 容器上的 IBGateway 服务器上出现了奇怪的行为,当它在普通容器上运行而客户端直接在主机上运行时,我没有这种行为,所以我猜测问题可能取决于 docker 的 bridge,我正在尝试让这两个容器获得一个 mac 地址并正确使用 eth 接口
  • github.com/blampe/IbPy/issues/57我在这里总结了问题,但是那个repo似乎无人看管
  • 通过 docker-compose 案例适用于所有 macvlan 的有效问题。没有答案 =) 当我找到解决方案时,我会在这里发布一个。

标签: docker networking docker-compose docker-networking


【解决方案1】:
networks:
bridge:
     driver: macvlan
     driver_opts:
         com.docker.network.enable_ipv4: "true"
         parent: mac0
     ipam:
         config:
             - subnet: xxx.xxx.xxx.xxx/xx
               ip-range: xxx.xxx.xxx.xxx/xx
               gateway: xxx.xxx.xxx.xxx

在码头主机中

ip link add mac0 link vmbr0 type macvlan mode bridge

【讨论】:

    【解决方案2】:

    我在 MacBook Pro 上遇到了同样的问题。原因可能是macvlan 子接口被无线接口屏蔽了。当我将 LAN 电缆连接到计算机并将 VM 的网络适配器从 en0: WiFi 更改为 enX: USB 10/100/1000 LAN 时,一切都开始按预期工作。

    另一种解决方案是使用ipvlan 而不是macvlan

    我的设置:

    • G: 172.16.1.1/16 - 网关(物理)
    • M: 172.16.1.20/16 - Macbook Pro, [en0: Wifi(物理), en7:LAN (物理)]
    • V: 172.16.1.180/16 - Virtualbox + Ubuntu Server 20.04 [enp0s3(虚拟)]
    • C1: 172.16.180.53/16 - home_macvlan 中的 Docker 容器
    • C2: 172.16.180.80/16 - home_macvlan 中的 Docker 容器

    什么不起作用

    1- 将VM的网络适配器en0:WiFi设置为Bridged Adapter,使用V中的docker创建macvlan

    状态:
    M V [OK]
    C1 C2 [OK]
    V C1 [NOK] (如预期)
    M C1 [NOK](问题)
    C1 G [NOK](问题)

    什么有效

    1- 使用ipvlan 而不是macvlan

    • 将VM的网络适配器en0:WiFi设置为Bridged Adapter
    • 使用V中的docker创建ipvlan

    我运行创建ipvlan的命令:

    docker network create -d ipvlan \
      --subnet 172.16.0.0/16 \
      -o ipvlan_mode=l2 -o parent=enp0s3 home_ipvlan
    

    然后运行 ​​Docker 容器:

    docker run \
      --net=home_ipvlan \
      --ip=172.16.180.53 \
      --name=C1
      <image name>
    

    2- 在非 802.11 接口上使用macvlan

    • 设置VM的网络适配器enX: USB 10/100/1000 LAN(或其他非802.11接口)为Bridged Adapter
    • 在高级部分选择 PCnet-Fast III (Am79C973) 作为适配器类型
    • 在高级部分将 promious 模式设置为“全部允许”

    创建macvlan的命令

    docker network create -d macvlan \
      --subnet 172.16.0.0/16 \
      --ip-range 172.16.180.0/24 \
      --gateway 172.16.1.1 \
      -o parent=enp0s3 home_macvlan
    

    运行容器的命令:

    docker run \
      --net=home_macvlan \
      --ip=172.16.180.53 \
      --name=C1
      <image name>
    

    相关答案:https://stackoverflow.com/a/56918457/860189
    更多信息:https://hicu.be/macvlan-vs-ipvlan

    【讨论】:

      猜你喜欢
      • 2017-06-24
      • 2020-10-18
      • 2019-02-25
      • 1970-01-01
      • 2014-11-16
      • 2016-02-20
      • 1970-01-01
      • 2018-05-01
      • 1970-01-01
      相关资源
      最近更新 更多