在辅助 IP 地址上绑定 docker 容器端口不起作用

在辅助 IP 地址上绑定 docker 容器端口不起作用

我肯定是做错了什么,但我正在尝试测试一个绑定到机器上特定 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(或者网络上的任何其他计算机):

netcat 192.168.3.222 4444

这会导致连接被拒绝。

我一定是做错了什么,因为即使我尝试使用默认网络或-p 4444:4444使用--net=host主机的原始 IP 而不是 .222,也会发生同样的事情。

根据我在网上读到的所有内容,这看起来很简单,但由于某种原因,我无法让其他机器通过主机访问容器。

答案1

我不确定您为什么要创建具有不同 IP 子网的网络。

我可以在不创建网络的情况下实现您的要求。这<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!

我还看到容器上写着“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处理。

相关内容