绑定辅助IP地址的泊坞窗容器端口不工作

我必须在这里做一些完全错误的事情,但我试图testing绑定到机器上特定IP的docker容器的简单设置。 这是用例:

在主机上:

ifconfig eno1:1 192.168.3.222 netmask 255.255.255.0 up docker network create --subnet=172.18.0.0/16 mynet123 docker run --net mynet123 --privileged -p 192.168.3.222:4444:4444 --name test -t -i ubuntu:xenial /bin/bash 

在现在正在运行的bash会话中:

 apt-get update apt-get install netcat netcat -l 4444 

现在回到主机上的另一个shell(或networking上的任何其他计算机)上:

 netcat 192.168.3.222 4444 

这被拒绝的连接。

我一定是做错了,因为即使我用默认networking和-p 4444:4444或者使用--net=host来使用主机的原始IP而不是.222,也会发生同样的情况。

这看起来很简单,基于我在线阅读的所有内容,但出于某种原因,我无法让其他机器通过主机访问容器。

我不知道为什么你要创build一个不同的IP子网的networking。

我可以在不创buildnetworking的情况下实现您的目标。 这里<target-ip>是你想绑定的接口上的IP地址。

 core@coreos6 ~ $ docker run -it --privileged -p <target-ip>:4444:4444 alpine:edge /bin/sh / # nc -l 4444 hola mundo! 

然后,从互联网上的任何地方(我的目标IP是一个公共IP)

 user@otherhost ~ # netcat <target-ip>:4444 hola mundo! 

我可以看到“嗨! 在容器上。

我认为你的问题是, --net mynet123更改接口的IP,因为它看到的容器。 看这个:

 core@coreos6 ~ $ docker run -it --privileged -p <target-ip>:4444:4444 alpine:edge /bin/sh / # ip addr 11: eth0@if12: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff inet 172.17.0.2/16 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::42:acff:fe11:2/64 scope link valid_lft forever preferred_lft forever / # ^D core@coreos6 ~ $ docker network create --subnet=172.18.0.0/16 mynet123 30cab3dff92248d0fab5a1c70362fdc6da9399393def0571fe1b903d4fcab8cf core@coreos6 ~ $ docker run --net mynet123 -it --privileged -p <target-ip>:4444:4444 alpine:edge /bin/sh / # ip addr 14: eth0@if15: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP link/ether 02:42:ac:12:00:02 brd ff:ff:ff:ff:ff:ff inet 172.18.0.2/16 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::42:acff:fe12:2/64 scope link valid_lft forever preferred_lft forever 

这可能会扰乱docker为启用端口转发所做的iptables处理。