Docker Swarm创建服务后映射端口无法访问、无端口映射问题咨询
Docker Swarm服务端口无法访问排查方案
Swarm模式的端口发布采用服务级别的ingress网络实现,不会把端口直接映射到单个容器上,因此docker ps看不到端口映射属于正常现象,不是操作错误。无法访问8080端口可按以下步骤逐一排查:
- 检查集群端口放行规则
确保所有集群节点的防火墙开放以下端口:- 2377/tcp:集群管理通信
- 7946/tcp/udp:节点状态gossip同步
- 4789/udp:Overlay网络VXLAN流量传输
- 8080/tcp:业务发布端口
- 验证服务端口配置是否生效
执行命令docker service inspect my_service_nginx --format '{{.Endpoint.Ports}}',正常输出会包含{8080 80 tcp}的映射记录。如果无对应记录,可重新创建服务,使用--publish published=8080,target=80,protocol=tcp参数明确指定端口规则。 - 检查服务运行状态
执行命令docker service ps my_service_nginx,确认服务副本处于running状态,无异常重启记录。如果副本状态异常,执行docker logs <容器ID>查看容器运行日志,排查服务本身启动错误。 - 排查端口占用冲突
执行命令ss -tulpn | grep 8080,确认宿主机8080端口未被其他进程占用。 - 重建异常Ingress网络
上述步骤排查均无问题时,大概率是Swarm默认Ingress网络异常,可按以下步骤修复:- 执行
docker network rm ingress删除现有Ingress网络 - 执行
docker network create --driver overlay --ingress --subnet=10.255.0.0/16 --gateway=10.255.0.1 ingress重建Ingress网络 - 重启对应服务即可恢复访问
- 执行
注意:Swarm服务发布的端口支持集群内任意节点IP+端口访问,无需仅访问服务副本所在节点。
内容的提问来源于stack exchange,提问作者Jan
相关产品推荐
相关产品推荐

