You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Docker Sail的Laravel 10连接PostgreSQL容器失败求助

Laravel Sail + PostgreSQL 连接失败问题解决

问题诊断

从配置和日志中可以定位三个核心问题:

  1. 容器间连接地址错误:Laravel容器内使用127.0.0.1无法访问PostgreSQL容器,Docker跨容器通信需使用服务名而非本地回环地址。
  2. 端口配置不一致:.env中设置DB_PORT=5632,但错误日志显示尝试连接5432端口,容器内部通信需使用PostgreSQL默认的5432端口,宿主机映射端口不影响容器间交互。
  3. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 01:12:42