将不同的 public IP 分配给同一 Docker 容器的多个实例
Assign different public IPs to several instances of same Docker container
我制作了一个 docker 容器,其中设置了 python 3.6 和一些特定的软件包。在那里,我 运行 一个连接到远程 API 服务的应用程序具有每个 IP 调用比率限制(即 IP 不可能每分钟向 API 服务,否则会被阻塞)。因此,我想使用同一个容器的多个副本,每个副本都连接到不同的 IP,这样我就可以绕过这个问题。
问题
是否可以将 public IP 分配给 linux 容器?如何对 docker 容器完成?也许通过代理?
为了将 public IP 分配给 docker 容器,您需要使用 Macvlan network driver 例如:
Macvlan network driver can be used to assign a MAC address to each container’s virtual network interface, making it appear to be a physical network interface directly connected to the physical network.
此命令将创建一个与给定物理网络接口桥接的 Macvlan 网络
docker network create -d macvlan -o macvlan_mode=bridge --subnet=172.16.86.0/24 --gateway=172.16.86.1 -o parent=eth0 pub_net
然后创建将使用上述网络的容器:
docker run --name web_container --net=pub_net --ip=172.16.86.2 --mac-address 25-EE-4E-B5-21-48 -itd nginx
现在你在 172.16.86.2
上有一个 public 面向容器 运行 并且确保从同一个 docker 图像你可以 运行 多个 docker 容器并为每个容器分配一个 public IP。
我制作了一个 docker 容器,其中设置了 python 3.6 和一些特定的软件包。在那里,我 运行 一个连接到远程 API 服务的应用程序具有每个 IP 调用比率限制(即 IP 不可能每分钟向 API 服务,否则会被阻塞)。因此,我想使用同一个容器的多个副本,每个副本都连接到不同的 IP,这样我就可以绕过这个问题。
问题
是否可以将 public IP 分配给 linux 容器?如何对 docker 容器完成?也许通过代理?
为了将 public IP 分配给 docker 容器,您需要使用 Macvlan network driver 例如:
Macvlan network driver can be used to assign a MAC address to each container’s virtual network interface, making it appear to be a physical network interface directly connected to the physical network.
此命令将创建一个与给定物理网络接口桥接的 Macvlan 网络
docker network create -d macvlan -o macvlan_mode=bridge --subnet=172.16.86.0/24 --gateway=172.16.86.1 -o parent=eth0 pub_net
然后创建将使用上述网络的容器:
docker run --name web_container --net=pub_net --ip=172.16.86.2 --mac-address 25-EE-4E-B5-21-48 -itd nginx
现在你在 172.16.86.2
上有一个 public 面向容器 运行 并且确保从同一个 docker 图像你可以 运行 多个 docker 容器并为每个容器分配一个 public IP。