我在 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