将docker container ip设置为global ip

时间:2017-09-08 18:40:49

标签: docker networking

我目前正在尝试将ip设置为容器,该容器可以被网络中的任何其他计算机访问。我的docker-host机器的网络是9.158.143.0/24,网关为9.158.143.254。 尝试在子网9.158.143.0/24内设置ip(任意免费),网络类型为bridge.It不起作用(甚至无法在docker主机内ping容器)。 然后创建一个用户定义的网络,子网为9.10.10.0/24,网络驱动程序为网桥。创建的容器是可ping的,但只能在docker主机中。 有没有办法从网络中的所有机器(不仅仅是泊坞主机)访问此容器。 PS:我不想公开这个端口。(改变路线是否有用..我知道网络很少)

我尝试使用macvlan驱动程序的用户定义网络。在这种情况下,我能够从其他机器ping容器,但不能从容器存在的docker主机上ping

1 个答案:

答案 0 :(得分:0)

为此,您需要:

1-在本地网络上为此容器指定一个新地址;

2-将此地址配置为docker引擎主机上的辅助地址;

3-启用docker引擎主机上本地接口之间的路由;

4-使用iptables将这个新地址的连接重定向到你的容器。

以下是一个例子:

我们假设:

  • 您的容器实例名为myinstance

  • 您的LAN网络接口名为eth0

  • 您已选择LAN上的可用网络地址192.168.1.178

因此,您需要执行以下操作:

  • 启动容器(在本例中,我们启动一个Web服务器):

    docker run --rm -t -i --name=mycontainer httpd:2.2-alpine

  • 启用本地IP路由:

    sysctl -w net.ipv4.ip_forward=1

  • 为您的容器添加辅助地址:

    ip addr add 192.168.1.178/24 dev eth0

  • 将此地址的连接重定向到您的容器:

    首先,找到您的容器本地地址:

    %docker inspect --format =' {{range .NetworkSettings.Networks}} {{。IPAddress}} {{end}}' myContainer中

    172.17.0.2

    现在,将此本地地址与iptables

    一起使用

    iptables -t nat -A PREROUTING -i eth0 -d 192.168.1.178/32 -j DNAT --to 172.17.0.2

最后,您可以通过从LAN上的任何其他主机访问http://192.168.1.178/来检查它是否有效。