好吧,我有一个带有 PostgreSQL 的容器,我从 Laravel 连接到该容器,在屏幕上显示记录。Laravel 容器可以正常访问 PostgreSQL 数据。这是结果:
object(Illuminate\Support\Collection)#463 (2) {
["items":protected]=>
array(2) {
[0]=>
object(stdClass)#466 (3) {
["pru_id"]=>
int(1)
["pru_name"]=>
string(5) "george"
["pru_years"]=>
int(45)
}
[1]=>
object(stdClass)#467 (3) {
["pru_id"]=>
int(2)
["pru_name"]=>
string(5) "paul"
["pru_years"]=>
int(30)
}
}
}
Run Code Online (Sandbox Code Playgroud)
到目前为止非常好!
但是当我尝试运行迁移时,php artisan migrate我得到:
SQLSTATE[08006] [7] 无法将主机名“pgcontainer”转换为地址:名称或服务未知
检查连接,db_host : ( pgcontainer)
'pgsql' => [
'driver' => 'pgsql',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', 'pgcontainer'),
'port' => env('DB_PORT', '5432'),
'database' => env('DB_DATABASE', 'mydatabase'),
'username' => env('DB_USERNAME', 'myuser'),
'password' => env('DB_PASSWORD', 'mypass'),
'charset' => 'utf8',
'prefix' => '',
'prefix_indexes' => true,
'schema' => 'public',
'sslmode' => 'prefer',
],
Run Code Online (Sandbox Code Playgroud)
我尝试修改主机,因为我了解它无法识别的内容,更改pgcontainer为127.0.0.1,但是在执行此操作时发生了两件有趣的事情:
SQLSTATE[08006] [7] 无法连接到服务器:连接被拒绝 服务器是否在主机“127.0.0.1”上运行并接受端口 5432 上的 TCP/IP 连接
SQLSTATE[08006] [7] 致命:用户“mydatabase”的密码身份验证失败
任何想法?
如果我理解正确的话,您有一个包含 Postgres 的容器,以及另一个包含 Laravel 的容器。Laravel -> Postgres 容器的连接工作正常。
您看到的错误表明您正在php artisan migrate主机上运行,而不是在容器中运行。但你的主机不知道这pgcontainer意味着什么 - Docker 通过名称解析容器,但你的主机不能。
您应该php artisan <anything>从 PHP/Laravel 所在的容器内部运行,例如:
docker exec your_laravel_container_name php artisan migrate
Run Code Online (Sandbox Code Playgroud)
这种方式在容器内部artisan运行,主机名解析的工作方式与 Laravel 相同。不要更改您的或 配置,它是 Laravel 的一部分,需要与 Laravel 应用程序本身相同的配置。.envartisan
| 归档时间: |
|
| 查看次数: |
4237 次 |
| 最近记录: |