使用Docker Sail的Laravel 10连接PostgreSQL容器失败求助
Laravel Sail + PostgreSQL 连接失败问题解决
问题诊断
从配置和日志中可以定位三个核心问题:
- 容器间连接地址错误:Laravel容器内使用
127.0.0.1无法访问PostgreSQL容器,Docker跨容器通信需使用服务名而非本地回环地址。 - 端口配置不一致:
.env中设置DB_PORT=5632,但错误日志显示尝试连接5432端口,容器内部通信需使用PostgreSQL默认的5432端口,宿主机映射端口不影响容器间交互。 - PostgreSQL未完成初始化:日志提示
PostgreSQL Database directory appears to contain a database; Skipping initialization,导致目标数据库sail未被创建。
解决步骤
1. 修正.env数据库配置
将数据库主机地址改为Docker服务名,统一端口配置:
DB_CONNECTION=pgsql DB_HOST=pgsql # 替换127.0.0.1为docker-compose中PostgreSQL的服务名 DB_PORT=5432 # 容器内部PostgreSQL默认端口,宿主机映射端口可保留5632 DB_DATABASE=sail DB_USERNAME=root DB_PASSWORD=secret
2. 重置PostgreSQL数据卷
旧数据卷导致初始化脚本被跳过,需删除重建:
# 停止所有容器 sail down # 删除PostgreSQL数据卷 docker volume rm laravel_test_sail-pgsql # 重启容器,触发初始化流程 sail up -d
3. 执行迁移命令
等待PostgreSQL容器完全就绪后,执行迁移:
sail artisan migrate:fresh --seed
额外验证点
- 确认
docker-compose.yml中PostgreSQL的环境变量正确引用.env值,当前配置已满足:environment: PGPASSWORD: '${DB_PASSWORD:-secret}' POSTGRES_DB: '${DB_DATABASE}' POSTGRES_USER: '${DB_USERNAME}' POSTGRES_PASSWORD: '${DB_PASSWORD:-secret}' - 所有容器已加入同一网络
laravel_test_sail,当前配置无需调整。
内容的提问来源于stack exchange,提问作者TheRealPapa
相关产品推荐
相关产品推荐

