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的映射保持一致:
- 打开项目根目录的
.env文件,修改以下两个变量:
HOST=0.0.0.0 PORT=3333
- 如果项目未使用
.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:重新部署并验证
- 停止现有容器:
docker-compose down - 重新构建并启动:
docker-compose up --build - 此时查看adonis-api的日志,应该会显示:
info: serving app on http://0.0.0.0:3333 - 现在尝试访问
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
相关产品推荐
相关产品推荐

