docker-compose macvlan无法访问互联网

h4cxqtbf  于 2023-01-01  发布在  Docker
关注(0)|答案(3)|浏览(836)

我在一个虚拟机中运行ubuntu桌面(我的主机是mac),在这个虚拟机中我正在试验macvlan docker网络驱动程序和docker-compose。
下面是我的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),

我不确定我在配置网关时遗漏了什么。我怎样才能在这个设置中正确地配置网络?我找不到任何像样的文档。
谢谢你,

hsvhsicv

hsvhsicv1#

我遇到了同样的问题与MacBook Pro。原因可能是一个macvlan子接口被无线接口阻止。当我连接到计算机的LAN电缆,并更改VM的网络适配器从en0: WiFienX: USB 10/100/1000 LAN,一切都开始按预期工作。
另一个解决方案是使用ipvlan而不是macvlan
我的设置:

  • G : 172.16.1.1/16 - Gateway(Physical)
  • M : 172.16.1.20/16 - Macbook Pro, [en0: Wifi(Physical), en7:LAN (Phsical)]
  • V : 172.16.1.180/16 - Virtualbox + Ubuntu Server 20.04 [enp0s3 (Virtual)]
  • C1 : 172.16.180.53/16 - Docker container in home_macvlan
  • C2 : 172.16.180.80/16 - Docker container in home_macvlan

哪些不起作用

1-将虚拟机的网络适配器en0:WiFi设置为Bridged Adapter,在V中使用Docker创建macvlan
状态:
M <-> V [OK]
C1 <-> C2 [OK]
V <-> C1 [NOK] (As expected)
M <-> C1 [NOK] (The issue)
C1 <-> G [NOK] (The issue)

什么有效

1-使用ipvlan代替macvlan

  • 将虚拟机的网络适配器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)作为适配器类型
  • 在高级部分中,将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

1sbrub3j

1sbrub3j2#

networks: 
  16-254: 
    driver: macvlan
    driver_opts:
      parent: ens192
      macvlan_mode: bridge
    ipam:
      config:
        - subnet: 172.16.16.0/24
          gateway: 172.16.16.254
vh0rcniy

vh0rcniy3#

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

相关问题