先说目前的结论:
docker-swarm部署的应用,在阿里云内网上无法访问。

之前都是在自己的云主机上,用docker-swarm部署,映射端口后,通过公网ip可以访问服务。

昨天要转到公司提供的服务器上,由于同一区域还有其他服务要交互,准备通过内网地址提供服务,内网网速快,也没有流量限制。

但是部署以后,发现无论如何内网ip访问端口都不通。
但是通过外网ip访问这些端口,都能正常使用。

首先排除服务问题,因为外网功能正常。
其次内网也是连通的,ping得通,而且不通过docker启动的服务端口,也能通。

通过netstat查看,docker启动的是tcp6监听。所以怀疑与内网+ipv6有关,折腾了比较久,也请阿里技术人员帮忙看过,结合网上搜索的一些文章,得到几点信息:

  1. docker启动的都是监听tcp6协议,即使主机禁用ipv6
  2. 通过tcpdump可以抓到内网发来到docker-swarm端口的tcp起始包,但是docker服务没有响应
  3. 通过iptables监听不到内网ip发来到docker-swarm端口的tcp包
  4. docker不通过swarm部署的应用,mapping出来的端口,通过内网ip也能访问

鉴于此,最终改用docker-compose进行部署,起始已经不算是集群了,仅仅是可以和docker swarm复用配置文件而已。

最后的问题可能是在阿里云或者docker swarm上,但是无法确认了。