设置docker容器IP到全局IP

我目前正试图设置一个IP到容器,可以访问networking内的任何其他机器。 我的docker主机9.158.143.0/24的networking,网关9.158.143.254。 尝试设置子网9.158.143.0/24中的IP(任何免费),networkingtypes为bridge.It没有工作(甚至无法ping通docker主机中的容器)。 然后创build一个用户定义的networking与子网9.10.10.0/24和networking驱动程序桥梁。 创build的容器是可ping通的,但只在docker主机内。 有什么办法可以从networking中的所有机器(不只是docker主机)访问这个容器。 PS:我不想公开这个港口(改变路线有用..我知道很less联网)

我aso试图用macvlan驱动程序用户定义的networking。 在这种情况下,我能够从其他机器ping容器,但不能从容器所在的docker主机

要做到这一点,你需要:

1-在您的本地networking上为这个容器指定一个新的地址;

2-将此地址configuration为泊坞站引擎主机上的辅助地址;

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

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

这里是一个例子:

我们假设:

  • 你的容器实例被命名为myinstance

  • 您的LANnetworking接口被命名为eth0

  • 您select了您的局域网上的可用networking地址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

  • 将此地址的连接redirect到您的容器:

    首先find你的容器本地地址:

    %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 – 到172.17.0.2

最后,你可以从局域网上的任何其他主机访问http://192.168.1.178/来检查它的工作原理。