![暴露的 Docker 端口正在监听但在 Ubuntu 14.04 上已关闭](https://linux22.com/image/688602/%E6%9A%B4%E9%9C%B2%E7%9A%84%20Docker%20%E7%AB%AF%E5%8F%A3%E6%AD%A3%E5%9C%A8%E7%9B%91%E5%90%AC%E4%BD%86%E5%9C%A8%20Ubuntu%2014.04%20%E4%B8%8A%E5%B7%B2%E5%85%B3%E9%97%AD.png)
我刚刚安装了 Ubuntu 14,04,并且安装了 Docker。我已经做了一些事情来解决这个问题,所以首先让我向你展示一些配置。
首先,我禁用了 IPv6。我还对 Docker Opts 命令进行了一些更改
DOCKER_OPTS="
-H tcp://intnode1:2376
-H unix:///var/run/docker.sock
--storage-driver aufs
--tlsverify
--tlscacert /etc/certs/ca.pem
--tlscert /etc/certs/cert.pem
--tlskey /etc/certs/key.pem
--dns 8.8.8.8
--dns 8.8.4.4
--ip=192.168.120.11
--bip=10.202.202.1/24
"
正如你所见,我已经为docker指定了一个监听的IP。
现在,我正在尝试在端口 3376 上运行 Swarm 管理器。这是我用来启动 Swarm 管理器的命令。
sudo docker run -d -p 3376:3376 -v /etc/certs:/certs:ro --name=SwarmManager --restart=always swarm:1.1.0 manage --replication --advertise 192.168.120.11:3376 --tlsverify --tlscacert=/certs/ca.pem --tlscert=/certs/cert.pem --tlskey=/certs/key.pem --discovery-opt kv.cacertfile=/certs/ca.pem --discovery-opt kv.certfile=/certs/cert.pem --discovery-opt kv.keyfile=/certs/key.pem --host=0.0.0.0:3376 nodes://192.168.120.[11:20]:2376
我没有指定 -p 参数的主机部分(尽管我曾尝试使用它),并且 --host flat 设置为监听所有 IP
这是 netstat 的输出
administrator@IntNode1:~$ netstat -l
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 *:4524 *:* LISTEN
tcp 0 0 192.168.120.11:3376 *:* LISTEN
tcp 0 0 *:ssh *:* LISTEN
tcp 0 0 192.168.120.11:2376 *:* LISTEN
tcp 0 0 *:4523 *:* LISTEN
tcp6 0 0 [::]:ssh [::]:* LISTEN
Active UNIX domain sockets (only servers)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ACC ] STREAM LISTENING 313807 /var/run/docker.sock
unix 2 [ ACC ] STREAM LISTENING 313813 /var/run/docker/libcontainerd/docker-containerd.sock
unix 2 [ ACC ] STREAM LISTENING 10415 /var/run/acpid.socket
unix 2 [ ACC ] STREAM LISTENING 8473 @/com/ubuntu/upstart
unix 2 [ ACC ] STREAM LISTENING 9757 /var/run/dbus/system_bus_socket
unix 2 [ ACC ] STREAM LISTENING 312956 /var/lib/docker/network/files/fa183e7b40f875024aba092e3c47cfa9c8d58fb6f58399aca747b1b84750d74b.sock
unix 2 [ ACC ] SEQPACKET LISTENING 9680 /run/udev/control
因此,端口 3376 正在监听正确的 IP,但现在如果我运行 nmap 来检查端口是否打开,我会看到以下信息
administrator@IntNode1:~$ nmap -p 3376 192.168.120.11
Starting Nmap 6.40 ( http://nmap.org ) at 2016-08-23 13:12 BST
Nmap scan report for 192.168.120.11
Host is up (0.000086s latency).
PORT STATE SERVICE
3376/tcp closed cdbroker
Nmap done: 1 IP address (1 host up) scanned in 0.08 seconds
我不知道发生了什么。ufw 状态为不活动。Docker 版本为 1.11.2,构建版本为 b9f10c9。
我不太了解 IP 表,但如果有帮助的话,这里是输出
administrator@IntNode1:~$ sudo iptables --list
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
DOCKER-ISOLATION all -- anywhere anywhere
DOCKER all -- anywhere anywhere
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain DOCKER (1 references)
target prot opt source destination
ACCEPT tcp -- anywhere 10.202.202.3 tcp dpt:3376
Chain DOCKER-ISOLATION (1 references)
target prot opt source destination
RETURN all -- anywhere anywhere
我现在真的被这个问题难住了。我错过了什么?
答案1
所以结果是容器中的服务出现故障,这就是为什么我无法连接到端口,尽管主机说它正在监听。