You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker化Adonis.js+MySQL应用后服务正常启动却无法访问的求助

解决Adonis.js容器化后无法外部访问的问题

看了你的配置和日志,问题根源很明确——你的Adonis应用绑定在了容器内部的127.0.0.1地址和80端口上,而不是允许外部访问的0.0.0.0,同时端口也和docker-compose里映射的3333不匹配,这就导致外部无法通过127.0.0.1:3333访问到应用。

步骤1:修正Adonis应用的监听配置

首先需要让Adonis监听所有可用地址,并且端口和docker-compose的映射保持一致:

  1. 打开项目根目录的.env文件,修改以下两个变量:
HOST=0.0.0.0
PORT=3333
  1. 如果项目未使用.env或配置是硬编码的,找到server.js文件,调整监听代码:
// 替换原来的监听代码
server.listen('0.0.0.0', process.env.PORT || 3333)

步骤2:验证Docker配置一致性

确保Docker相关配置和应用设置匹配:

  • docker-compose中adonis-api的端口映射"3333:3333"已经和我们设置的PORT=3333一致,无需修改;
  • Dockerfile里的CMD ["npm", "start"]会正确加载.env配置,只要你的start脚本是启动server.js的就没问题。

步骤3:重新部署并验证

  1. 停止现有容器:docker-compose down
  2. 重新构建并启动:docker-compose up --build
  3. 此时查看adonis-api的日志,应该会显示:info: serving app on http://0.0.0.0:3333
  4. 现在尝试访问http://127.0.0.1:3333,就能正常连接到应用了。

额外检查点(如果问题仍存在)

  • 进入容器验证监听状态:docker exec -it testProject-api netstat -tulpn,确认能看到0.0.0.0:3333的监听记录;
  • 检查本地防火墙是否阻止了3333端口,可以临时关闭防火墙测试;
  • 注意depends_on仅保证MySQL先启动,但Adonis启动时MySQL可能还未完全就绪——这会导致数据库连接报错,但不会引发“拒绝连接”的服务访问问题,两者是不同的故障场景。

内容的提问来源于stack exchange,提问作者Agilulfo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 13:42:56