如何解决docker-compose服务远程调试5005端口连接被拒绝的问题
Docker 容器Java远程调试连接失败修复方案
核心问题:Dockerfile CMD 指令配置错误
你当前的CMD写法存在两处致命问题,会导致容器启动失败、调试端口根本未开启:
- 数组格式的
CMD要求每个启动参数独立作为数组元素,你将所有参数拼接在同一个字符串中,容器无法识别为合法的执行命令 - 命令开头误写为
-java,正确的Java启动命令前缀为java,无需添加短横线
修正后的graphql-serviceDockerfile 如下:
FROM graphql-service # 移除冗余的重复EXPOSE声明 EXPOSE 8080 5005 ADD app/target/service-*-exec.jar /app/spring-boot-service.jar # 拆分参数为独立数组项,修正启动命令 CMD ["java", "-agentlib:jdwp=transport=dt_socket,address=*:5005,server=y,suspend=n", "-jar", "/app/spring-boot-service.jar"]
附加排查项
如果修复后仍无法连接,按以下步骤排查:
- 检查本地5005端口是否被其他进程占用,执行命令:
lsof -i:5005。如果存在占用,可修改docker-compose.yml中的端口映射为"5006:5005",调试时连接本地5006端口即可。 - 确认容器正常运行:执行
docker ps查看graphql-service容器状态为Up。 - 进入容器内部确认调试端口已监听:执行
docker exec -it graphql-service bash进入容器,再执行netstat -tulpn | grep 5005,能看到端口处于监听状态即为正常。
内容的提问来源于stack exchange,提问作者Michiel
相关产品推荐
相关产品推荐

