Docker-Compose – 服务器公开了几个端口,但只有一个端口在客户端不可访问

Docker新手

我有两个容器,我通过docker合成链接。 我们称之为服务器和客户端。 服务器公开了几个端口。

当我执行docker-compose up并通过docker exec访问客户端时 ,我可以访问除1之外的所有端口。

这个特定的端口是一个IPC端口(据我所知它是基于TCP的)。

当我通过docker exec访问服务器时 ,我看到端口已启动并正在运行,并且底层服务正在监听和响应来自端口的请求。

我甚至可以看到端口正在从主机运行(在主机上,我可以运行nc -zv localhost 8020 – >成功[请注意,由于端口8020正在映射到8020我可以使用本地主机8020])。

 client image: my/client links: - server server: image: my/server ports: - "8020:8020" - "50070:50070" - "50075:50075" - "50030:50030" expose: - "8020" - "50070" - "50075" - "50030" 

我唯一无法访问的端口是8020.在客户端执行nmap时,我得到:

 [root@ecc57bcc52b7 /]# nmap -p 8020 server Starting Nmap 6.40 ( http://nmap.org ) at 2015-12-28 07:03 UTC Nmap scan report for server (172.17.0.187) Host is up (0.000058s latency). rDNS record for 172.17.0.187: server PORT STATE SERVICE 8020/tcp closed unknown MAC Address: 02:42:AC:11:00:BB (Unknown) Nmap done: 1 IP address (1 host up) scanned in 0.09 seconds 

但所有其他港口报告为开放。

重申一下,我100%肯定端口8020正在监听服务器。

有一些方法可以检查这些问题:

  1. 在主机上使用: telnet 172.17.42.1 8020以确保端口8020在主机上打开。
  2. 在docker服务器容器: telnet 127.0.0.1 8020 ,确保docker容器中的端口8020打开。
  3. 检查主机上的防火墙(如果您使用的是Linux机器,则使用iptables -L)。
  4. 确保在主机上,没有正在侦听端口8020的服务。