Docker Compose启动Mathesar服务时PostgreSQL连接超时求助
解决Mathesar开发服务启动时容器间数据库连接超时问题
问题现象
执行sudo docker compose --profile dev up启动Mathesar开发服务时,反复出现超时失败:
Timeout after 30s waiting on dependencies to become available: [tcp://mathesar_db:5432]
日志确认mathesar_db容器已正常启动并监听5432端口,但mathesar_service_dev容器始终无法连接该端口。延长连接超时时间后,出现新错误:
拨号出现问题:拨号 tcp 172.18.0.3:5432:连接:连接超时。等待1秒
已尝试重启Docker服务(仅首次有效)、清理5432端口进程、切换docker-compose命令、重装Docker,但更新代码后问题复现。
操作系统:Ubuntu 22.10 (Kinetic Kudu)
排查与解决步骤
1. 检查Docker网络一致性
- 查看Mathesar服务关联的Docker网络:
docker network ls | grep mathesar - 确认
mathesar_db和mathesar_service_dev在同一网络内:docker inspect mathesar_db | grep Networks docker inspect mathesar_service_dev | grep Networks - 若不在同一网络,手动将服务容器加入数据库所在网络:
docker network connect [目标网络名称] mathesar_service_dev
2. 验证数据库的外部连接权限
- 进入
mathesar_db容器,检查端口监听状态:docker exec -it mathesar_db bash netstat -tulpn | grep 5432 - 修改PostgreSQL配置允许同网段连接:
编辑容器内/var/lib/postgresql/data/postgresql.conf,设置listen_addresses = '*';
编辑pg_hba.conf添加规则:
重启数据库容器:host all all 172.18.0.0/16 trustdocker restart mathesar_db
3. 彻底清理Docker残留资源
- 清除Mathesar相关的容器、卷和网络:
sudo docker compose --profile dev down -v --rmi all --remove-orphans - 清理Docker系统缓存:
docker system prune -af - 重新拉取镜像并启动服务:
sudo docker compose --profile dev pull sudo docker compose --profile dev up
4. 检查宿主机防火墙规则
- 临时关闭防火墙测试:
若问题解决,为Docker网络添加放行规则后重启防火墙:sudo ufw disablesudo ufw allow in on docker0 sudo ufw allow in on br-* sudo ufw enable
5. 配置精准的健康检查依赖
在docker-compose.yml中为服务添加基于健康检查的依赖,替代默认超时等待:
services: mathesar_service_dev: # 原有配置 depends_on: mathesar_db: condition: service_healthy mathesar_db: # 原有配置 healthcheck: test: ["CMD-SHELL", "pg_isready -U mathesar -d mathesar"] interval: 5s timeout: 5s retries: 10
内容的提问来源于stack exchange,提问作者Aritra Majumder
相关产品推荐
相关产品推荐

