好吧,我有一個裝有 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)
}
}
}
到目前為止非常好!
但是當我嘗試運行遷移時,使用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',
],
我試圖修改主機,因為我了解它無法識別的內容,更改pgcontainer為127.0.0.1,但是在這樣做時會發生兩件有趣的事情:
- 在螢屏上:它不再在螢屏上顯示記錄,因為 Laravel 容器不再訪問 PostgreSQL:
SQLSTATE[08006] [7] 無法連接到服務器:連接被拒絕 服務器是否在主機“127.0.0.1”上運行并接受埠 5432 上的 TCP/IP 連接
- SSH - PHP ARTISAN MIGRATE:現在 Laravel 可以看到 PostgreSQL 容器,但無法進行身份驗證(密碼是正確的,因為在螢屏上顯示記錄之前):
SQLSTATE[08006] [7] 致命:用戶“mydatabase”的密碼驗證失敗
任何的想法?
uj5u.com熱心網友回復:
如果我理解正確,您有一個帶有 Postgres 的容器,另一個帶有 Laravel 的容器。來自 Laravel -> Postgres 容器的連接作業正常。
您看到的錯誤表明您正在php artisan migrate主機上運行,而不是在容器中。但是您的主機不知道是什么pgcontainer意思 - Docker 按名稱決議容器,但您的主機不能。
您應該php artisan <anything>從 PHP/Laravel 所在的容器內部運行,例如:
docker exec your_laravel_container_name php artisan migrate
這種方式在容器內部artisan運行,主機名決議的作業方式與 Laravel 相同。不要更改您的或配置,它是 Laravel 的一部分,需要與 Laravel 應用程式本身相同的配置。.envartisan
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/399432.html
