You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何从Docker容器外部连接其中的PostgreSQL数据库?

如何从Docker容器外部连接其中的PostgreSQL数据库?

别担心,你的问题一点都不傻——很多刚开始接触Docker的朋友都会踩类似的配置坑!我来帮你一步步排查解决:

首先看你的docker-compose配置,这里有个关键错误:PostgreSQL的默认端口是5432,但你在ports里写的是33306:3306,而3306是MySQL的默认端口,容器里的PostgreSQL根本没在3306端口运行,这就导致你本地API连过去的时候找不到服务!

第一步:修正Docker端口映射

修改你的docker-compose.yml里的db服务端口配置:

ports:
  - 33306:5432

这样就把本地的33306端口,映射到容器内PostgreSQL实际使用的5432端口了。

第二步:重启Docker容器

先停掉当前运行的容器,再重新启动:

docker-compose down
docker-compose up -d

第三步:确认API的数据源配置

你的数据源URL端口是对的(33306),现在端口映射修正后,这个配置应该可以正常连接了:

spring.datasource.url=jdbc:postgresql://127.0.0.1:33306/sa

顺便确认下数据源的用户名(postgres)和密码(root)是否和docker-compose里的环境变量配置一致。

额外排查点(如果还是连不上)

  • 检查本地33306端口有没有被其他程序占用:
    • Mac/Linux用命令:lsof -i :33306
    • Windows用命令:netstat -ano | findstr :33306
  • 用Adminer验证容器内数据库状态:访问http://127.0.0.1:8081,选择PostgreSQL,服务器填db(因为Adminer和数据库容器在同一个Docker网络),输入用户名postgres、密码root、数据库名sa,看看能不能正常登录。
  • 确认本地防火墙没有阻止33306端口的访问。

备注:内容来源于stack exchange,提问作者Yass

火山引擎 最新活动