我在 ubuntu 14.04 上运行它并设置docker0为静态 ip,然后通过防火墙从公共 ip 路由到该静态 ip。我正在尝试将我的后端 API 设置为在 docker 容器中运行,并且对一些事情感到困惑。
1.) 我将如何将docker0的 ip 映射到容器的 ip,以便docker0知道将传入的数据包发送到容器(如果可能,动态地)。
2.)如果还没有以这种方式完成,我怎么能做到这样我就不必在每次重新运行该 docker 容器时都进行设置?
提前致谢!
我在 ubuntu 14.04 上运行它并设置docker0为静态 ip,然后通过防火墙从公共 ip 路由到该静态 ip。我正在尝试将我的后端 API 设置为在 docker 容器中运行,并且对一些事情感到困惑。
1.) 我将如何将docker0的 ip 映射到容器的 ip,以便docker0知道将传入的数据包发送到容器(如果可能,动态地)。
2.)如果还没有以这种方式完成,我怎么能做到这样我就不必在每次重新运行该 docker 容器时都进行设置?
提前致谢!
我假设您希望在 docker 之外为您的 docker 容器分配一个 IP。
首先,创建一个新 IP 并将其分配给您主机的接口(我们假设您的接口称为 eth0.
$> ip addr add 10.0.0.99/8 dev eth0
现在,当您启动容器时,指定该地址并将其链接到您的 docker 容器:
$> docker run -i -t --rm -p 10.0.0.99:80:8080 base
-p 参数将使 docker 创建一个 iptables NAT 规则,该规则会将与目标 10.0.0.99:80 匹配的所有流量 nat 到端口 8080 上的 docker 容器。
如果您需要自动化该过程并将其扩展,请查阅此资源:https ://github.com/jpetazzo/pipework
docker 文档是一个好的开始:https ://docker.github.io/engine/userguide/networking/
最近我遇到了同样的问题并使用Network Containers解决了它:
从此时起,网络容器在网络上可用,并将端口路由到服务容器。主要优点是“服务”容器不必知道公共 IP、DHCP 等。这样每个运行的容器都可以在网络上公开。
为方便起见,我创建了一个脚本来一次性完成所有这些工作。使一个正在运行的容器在公共 IP 上可用很简单:
create-network-container.sh webserver ens32
在这种情况下,您需要有一个名为“webserver”的运行容器,以及主机“ens32”上的网络接口。需要该接口才能在网络容器中创建网桥。
脚本、更详细的信息和示例可在以下位置获得: https ://github.com/jeroenpeeters/docker-network-containers