如何将 docker 个容器绑定到特定的 IP 别名

how to bind docker containers to specific IP aliases

我有一个虚拟机

我想通过专用网络从另一个 VM 上的反向代理 运行 将流量路由到我的 docker 容器。

我希望所有容器都使用主机网络,但我希望每个容器只监听一个私有 IP 地址。例如,每个容器都应该能够侦听绑定到其自己的私有 IP 地址的端口 80。

我的计划是在 public IP 上设置防火墙规则,以防止任何流量通过 public 互联网进入或离开 VM。

首先,这可能吗?如果可以,我该如何完成?

这个可以,需要创建macvlan网络https://docs.docker.com/network/macvlan/ 并将您的容器分配给它各自的 ip 地址。

Docker 可以做到这一点,开箱即用,无需特殊配置,无需禁用 Docker 的网络层。

docker run -p option (and, equivalently, Compose ports:) 采用可选的主机 IP 地址。因此,在主机已经配置了多个 IP 地址的设置中,您只需要告诉 Docker 哪个与哪个容器对应:

docker run -d --name server1 \
  -p 10.0.0.2:80:8000 \
  image1

docker run -d --name server2 \
  -p 10.0.0.3:80:8000 \
  image2

I want all containers to use host networking....

如果这样做,将完全禁用 Docker 的网络层。每个容器都可以看到每个主机接口,并且由容器内的特定应用程序 运行 绑定到正确的接口,使用特定于应用程序的设置。除非在特殊情况下,否则我不推荐主机网络。