为什么Hasura Docker容器无法访问本地机器运行的API服务端口
Hasura容器无法访问本地API问题解决步骤
1. 修改本地API的监听配置
你当前的express服务默认只监听本地回环地址127.0.0.1,Docker容器无法直接访问,需要修改监听地址为所有网卡:
// 将原listen代码替换为以下内容 app.listen(process.env.PORT || 5000, '0.0.0.0', () => { console.log('App is ready running'); })
同时你的API只配置了urlencoded格式的请求解析,Hasura触发器发送的是JSON格式请求,需要补充JSON解析中间件:
// 放在所有路由定义之前 app.use(bodyParser.json())
2. 适配Docker宿主机访问规则
不同操作系统的Docker对host.docker.internal的支持规则不同:
- Windows/macOS:新版Docker默认支持该地址解析,若仍无法访问,启动容器时添加参数
--add-host=host.docker.internal:host-gateway即可 - Linux:Docker默认无该地址映射,启动Hasura容器时必须添加上述参数,若使用docker-compose部署,在Hasura服务配置下添加以下内容:
extra_hosts: - "host.docker.internal:host-gateway"
3. 连通性验证
修改配置后进入Hasura容器执行测试命令,验证连通性:
docker exec -it <替换为你的Hasura容器ID/名称> curl http://host.docker.internal:5000/notify -X POST -H "Content-Type: application/json" -d '{"test":1}'
正常会返回你定义的JSON响应,说明连通性正常,触发器即可正常调用。
内容的提问来源于stack exchange,提问作者geraktOfRivia
相关产品推荐
相关产品推荐

