docker-compose macvlan无法访问互联网

时间:2019-04-02 12:59:29

标签: docker networking docker-compose docker-networking

我正在虚拟盒子中运行ubuntu桌面(我的主机是mac),在这个虚拟机中,我正在尝试macvlan带有docker-compose的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), 

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

谢谢

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我在 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,在 macvlan 中使用 docker 创建 V

状态:
M <-> V [确定]
C1 <-> C2 [确定]
V <-> C1 [NOK](如预期)
M <-> C1 [NOK](问题)
C1 <-> G [NOK](问题)

什么有效

1- 使用 ipvlan 而不是 macvlan

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

我用来创建 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) 作为适配器类型
  • 在高级部分将 promicious 模式设置为“全部允许”

创建 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