Docker Compose部署AdonisJS+Postgres+Mongo报ECONNREFUSED 127.0.0.1:3333错误
问题排查与解决步骤
- 首先确认AdonisJS服务启动端口匹配问题:AdonisJS 默认监听端口为 3333,你当前的配置存在两处端口不匹配问题:
- Dockerfile 中 EXPOSE 声明的是 3000,但启动命令
node ace serve没有指定端口,会默认监听3333,导致容器实际暴露端口和声明不一致 - docker-compose.yml 中 app 服务的端口映射配置为
3000:3000,和容器内实际监听的3333端口没有对应,无论外部访问还是内部服务连接都会触发连接拒绝
- Dockerfile 中 EXPOSE 声明的是 3000,但启动命令
- 优先修复端口配置,两种方案选其一即可:
- 方案1:将启动端口指定为3000,把Dockerfile里的CMD指令修改为
CMD ["node", "ace", "serve", "--port=3000", "--host=0.0.0.0"],注意必须添加--host=0.0.0.0参数,否则Adonis默认仅监听容器内部的127.0.0.1,容器外部无法访问 - 方案2:保留Adonis默认3333端口,把Dockerfile的EXPOSE值修改为3333,同时将docker-compose.yml中app服务的端口映射改成
3333:3333
- 方案1:将启动端口指定为3000,把Dockerfile里的CMD指令修改为
- 排查数据库连接配置问题:如果你的Adonis
.env配置文件中,数据库连接地址填写的是127.0.0.1也会触发连接错误,Docker容器内部访问同网络下的其他服务必须使用服务名作为域名:- Postgres连接地址填
db,对应docker-compose里postgres的服务名,端口填5432 - Mongo连接地址填
mongo,对应docker-compose里mongo的服务名,端口填27017
- Postgres连接地址填
- 补充服务启动依赖配置:Docker Compose默认不会等数据库完全初始化完成再启动app服务,可能出现app先启动、连接数据库失败的问题,可以在app服务配置中添加
depends_on字段,指定先启动数据库服务:app: build: . ports: - 3000:3000 volumes: - .:/usr/app depends_on: - db - mongo - 配置修改完成后,执行命令重新构建启动服务:
docker-compose up --build - 如果仍有报错,可以进入app容器内部排查端口监听情况:执行
docker-compose exec app netstat -tulpn查看是否有进程在监听对应端口,也可以通过docker-compose logs app查看服务运行日志,定位具体报错原因。
内容的提问来源于stack exchange,提问作者Lucas Antonio
相关产品推荐
相关产品推荐

