我在ubuntu 14.04上运行它并将docker0
设置为静态IP,然后通过防火墙从公共IP路由到。我正在尝试将我的后端API设置为在docker容器中运行,并且被一些事情搞糊涂了。
1.。)我如何将docker0
的ip映射到容器的ip,以便docker0
知道将传入的数据包发送到容器(如果可能,动态地) )。
2。)如果还没有以这种方式完成,我怎么能这样做,以便每当我重新运行该docker容器时我都不必设置它?
提前致谢!
答案 0 :(得分:39)
我假设您希望将一个IP分配给docker之外的docker容器。
首先,创建一个新的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匹配的流量与端口8080上的docker容器相对应。
如果您需要自动化流程并将其扩展,请参阅以下资源:https://github.com/jpetazzo/pipework
docker文档是一个良好的开端:https://docker.github.io/engine/userguide/networking/
答案 1 :(得分:9)
最近我遇到了同样的问题,并使用网络容器解决了这个问题:
从此时起,网络容器在网络上可用,并将端口路由到服务容器。 主要优点是服务'容器不必知道公共IP,DHCP等。这样每个正在运行的容器都可以在网络上公开。
为方便起见,我创建了一个可以同时完成所有这些操作的脚本。使公共IP上的运行容器可用如下:
create-network-container.sh webserver ens32
在这种情况下,您需要有一个名为' webserver'的运行容器,以及主机上的网络接口' ens32'。需要该接口才能创建到网络容器的桥接。
脚本,更详细的信息和示例可用于: https://github.com/jeroenpeeters/docker-network-containers