我正在虚拟盒子中运行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),
我不确定配置网关的配置中缺少什么。如何在此设置中正确配置网络?我找不到任何合适的文档。
谢谢
答案 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](问题)
ipvlan
而不是 macvlan
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>
macvlan
enX: USB 10/100/1000 LAN
(或其他非 802.11 接口)设置为 Bridged Adapter
PCnet-Fast III (Am79C973)
作为适配器类型创建 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