为docker容器提供可路由的ip地址

rob*_*ert 25 ip iptables docker boot2docker

我在ubuntu 14.04上运行它并设置docker0为静态IP,然后通过防火墙从公共IP路由到.我正在尝试将我的后端API设置为在docker容器中运行,并且被一些事情搞糊涂了.

1.)我如何将docker0ip 映射到容器的ip,以便docker0知道将传入的数据包发送到容器(如果可能,动态地).

2.)如果还没有以这种方式完成,我怎么能这样做,以便每当我重新运行该docker容器时我都不必设置它?

提前致谢!

nuc*_*tus 39

我假设您希望将一个IP分配给docker之外的docker容器.

首先,创建一个新的IP并将其分配给主机的接口(我们假设您的接口名为eth0.

$> ip addr add 10.0.0.99/8 dev eth0
Run Code Online (Sandbox Code Playgroud)

现在,当您启动容器时,请指定该地址并将其链接到docker容器:

$> docker run -i -t --rm -p 10.0.0.99:80:8080 base
Run Code Online (Sandbox Code Playgroud)

-p参数将使docker创建一个iptables NAT规则,该规则将所有与目标10.0.0.99:80匹配的流量与端口8080上的docker容器相对应.

如果您需要自动化该过程并将其扩展出来,请参考以下资源:https://github.com/jpetazzo/pipework

docker文档是一个很好的开始:https://docker.github.io/engine/userguide/networking/

  • 是的,但是如何将容器传出端口映射到主机IP? (2认同)

Jer*_*ers 9

最近我遇到了同样的问题并使用网络容器解决了它:

  • 启动我希望在公共IP上可用的"服务"容器
  • 创建一个与服务容器链接的新"网络"容器,并路由到服务容器公开的端口.该容器将具有与主机桥接的额外网络接口,因此它可以从DHCP获取IP.
  • 使用jpetazzo的Pipework(https://github.com/jpetazzo/pipework)创建从Docker主机到容器的网桥
  • 网络容器从DHCP获取地址.

从这一点开始,网络容器在网络上可用,并将端口路由到服务容器.主要优点是'服务'容器不必知道公共IP,DHCP等.这样,每个正在运行的容器都可以在网络上公开.

为方便起见,我创建了一个可以同时完成所有这些操作的脚本.使公共IP上的运行容器可用如下:

create-network-container.sh webserver ens32
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您需要有一个名为"webserver"的运行容器,以及主机"ens32"上的网络接口.需要该接口才能创建到网络容器的桥.

脚本,更详细的信息和示例可在以下网址获得:https: //github.com/jeroenpeeters/docker-network-containers