Docker网络中ArangoDB Foxx无法调用Spring Boot接口求助
问题分析与解决方案:ArangoDB Foxx无法调用Spring Boot服务
问题概述
在Linux环境下部署了两个Docker容器服务:
- 基于ArangoDB 3.5.7的Foxx应用
- 带有REST接口的Spring Boot应用
两者已加入共享Docker网络rtm-network,Spring Boot应用可正常调用ArangoDB Foxx接口,但反向调用失败:
- ArangoDB Foxx调用Spring Boot接口时返回
Connection refused错误 - Spring Boot应用端未收到任何请求
容器端口信息:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 463bd83993fc rtm-service:latest "java -jar rtmapp.jar" 15 hours ago Up 15 hours 0.0.0.0:8085->9096/tcp, :::8085->9096/tcp rtm-service-container 54ff37336885 arangodb:3.5.7 "/entrypoint.sh aran…" 18 months ago Up 15 hours 0.0.0.0:8529->8529/tcp, :::8529->8529/tcp arangodb_1
Foxx调用代码:
const request = require("@arangodb/request"); const response = request.get( "http://rtm-service-container:8085/rtm/request-management/products-list" ); console.log(response)
错误信息:
[IncomingResponse 500 Could not connect to 'http+tcp://rtm-service-container:8085' 'connect() failed with #111 - Connection refused' empty]
核心问题
Docker容器间通信时,必须使用容器内部暴露的端口,而非宿主机的端口映射。
从容器端口信息可以看到:
- Spring Boot容器的宿主机端口
8085是映射到容器内部的9096端口 - Foxx代码中错误地使用了宿主机映射端口
8085,而非容器内部的9096端口
而Spring Boot能正常调用Foxx是因为ArangoDB容器的内部端口和宿主机映射端口都是8529,端口一致所以没有问题。
解决方案
修改Foxx调用代码中的端口为Spring Boot容器内部的9096:
const request = require("@arangodb/request"); const response = request.get( "http://rtm-service-container:9096/rtm/request-management/products-list" ); console.log(response)
验证步骤
- 进入ArangoDB容器,测试DNS解析是否正常:
docker exec -it arangodb_1 ping rtm-service-container
- 在ArangoDB容器内用curl测试接口连通性:
docker exec -it arangodb_1 curl http://rtm-service-container:9096/rtm/request-management/products-list
如果能正常返回数据,说明修改生效。
内容的提问来源于stack exchange,提问作者TechMaster
相关产品推荐
相关产品推荐

