需求:希望外部可以直接通过不同IP地址访问宿主机上的Docker容器,而不需要端口映射(同一个IP不同的端口与外部通讯),这通常涉及到在宿主机的网络层面进行更高级的配置,比如使用IP伪装(IP masquerading)、设置路由规则或者使用MACVLAN网络等。但在标准的Docker网络配置下,直接为每个容器分配公网IP或让外部直接访问容器的私有IP通常是不可行的,因为Docker容器的IP地址仅在宿主机的虚拟网络桥接范围内有效。解决办法:MACVLAN
学习Macvlan:
- Docker 网络模型之 macvlan 详解,图解,实验完整-腾讯云开发者社区-腾讯云 (tencent.com)
使用MACVLAN网络
一、查询信息
查询宿主机的一个物理网络接口名称,比如这里我的是enp1s0
。
ip addr show #查看所有网络接口的详细信息
宿主机子网:192.168.0.0/24 网关:192.168.0.60
二、创建MACVLAN网络
sudo docker network create \
--driver macvlan \
--subnet=<你的宿主机子网,如192.168.1.0/24> \
--gateway=<你的宿主机网关> \
-o parent=物理接口名称,如enp1s0 \
myMacVlanNet
三、启动容器并分配IP
接下来,启动容器时指定这个MACVLAN网络,并为容器分配一个在宿主机网络中的静态IP地址:
sudo docker run -itd \
--name container1 \
--network=myMacVlanNet \
--ip=<为container1分配的IP,确保该IP未被其他设备占用,如192.168.1.100> \
ubuntu