docker-compose部署Spring Cloud Gateway访问下游微服务报500连接错误
微服务网关Docker-Compose部署连接报错修复方案
核心问题排查修复步骤
- 修正容器通信的端口认知错误
容器间互访不使用宿主机映射端口,仅使用容器内部监听的端口。当前配置里api_1的端口映射为"8083:8081",即宿主机的8083端口转发到api_1容器内的8081端口,因此网关访问api_1时,端口必须写容器内部的8081,不能写宿主机映射的8083。此前替换服务地址时如果使用了8083端口,必然会出现连接拒绝。 - 确认网关配置已实际生效
现有报错日志显示网关仍在尝试访问localhost/127.0.0.1:8083,说明修改后的路由配置没有加载到运行的网关实例中。由于网关使用的是预构建镜像cloudapi,修改本地配置后如果没有重新打包构建新镜像、没有重新启动容器拉取新镜像,运行的还是旧配置。可执行如下命令校验配置:
确认配置中路由地址已修改为# 进入网关容器查看路由配置 docker exec -it 网关容器名称/ID sh # 直接读取jar包内的配置文件校验路由URI unzip -p /应用jar包路径 BOOT-INF/classes/application.yml | grep urihttp://api_1:8081格式,而非旧的localhost地址。 - 验证容器网络连通性
同一docker-compose文件下的服务会自动加入默认bridge网络,可直接通过服务名互相访问。可进入网关容器手动测试连通性:
如果上述命令能正常返回数据,说明网络、端口、服务状态均无问题,仅需修正网关的路由配置即可;如果仍连接失败,需要进入docker exec -it 网关容器名称/ID sh # 容器内执行访问api_1的请求 curl http://api_1:8081/Publish/messageapi_1容器执行netstat -ntlp,确认服务是否在8081端口绑定了0.0.0.0地址(如果绑定了127.0.0.1,同网络下的其他容器无法访问)。 - 修正docker-compose.yml的配置格式问题
现有配置存在拼写错误:端口映射的键应为ports而非port;同时依赖关系的逻辑冗余:微服务不需要依赖网关启动,可移除api_1、api_2对网关的depends_on配置,避免不必要的启动顺序阻塞。
内容的提问来源于stack exchange,提问作者user15693717
相关产品推荐
相关产品推荐

