Docker Compose中TypeScript服务无法接收主机请求的排查问询
问题分析与解决
核心原因是你的Fastify服务仅监听了容器内部的localhost(127.0.0.1),而非所有可用网卡地址(0.0.0.0)。Docker端口映射是将主机端口转发到容器的外部网卡地址,服务没监听这个地址的话,主机请求就无法被响应。
为什么会出现这种差异?
- 容器内
curl localhost:8080能访问:容器内部的localhost指向自身回环地址,服务监听该地址时,容器内部请求可正常到达。 - 换
npx http-server能访问:http-server默认监听0.0.0.0,主机可通过端口映射直接触达服务。
解决步骤
- 修改Fastify启动代码,强制指定监听地址为
0.0.0.0:
import Fastify from 'fastify' const fastify = Fastify() // 明确配置监听所有网卡地址 fastify.listen({ port: Number(process.env.PORT) || 8080, host: '0.0.0.0' }, (err) => { if (err) { fastify.log.error(err) process.exit(1) } })
- 验证服务监听地址
进入API容器执行以下命令,确认服务监听的是0.0.0.0:8080而非127.0.0.1:8080:
netstat -tulpn | grep 8080
- 重启服务
修改代码后重新构建并启动容器:
docker-compose down && docker-compose up --build
此时主机执行curl localhost:8080即可正常访问API服务。
内容的提问来源于stack exchange,提问作者Liam Schauerman
相关产品推荐
相关产品推荐

