SQLSTATE[08006] [7] could not translate host name "pgsql" to address: Temporary failure in name resolutionエラー
teratailでも質問していたのですが解決しなかったのでこちらでも質問させていただきます。
https://teratail.com/questions/jhi4d9xmzdr5n8
解決したいこと
画面を表示した際にエラーが出ていますのでエラーを解消したいです。
前提
現在、Windows10のWSL上でPHP/Laravelのtodoリストを作成しています。
・postgresql起動→sudo service postgresql start
・docker起動
・Laravel sail起動→./vendor/bin/sail up
・ローカル表示→http://127.0.0.1:80/
ローカル画面を表示したときにDBに接続できていないと思われるようなエラーが表示されます。
※エラーの場所:app/Http/Controllers/MainController.php: 11
$items = DB::select('select * from todolist');でエラー
発生している問題・エラー
SQLSTATE[08006] [7] connection to server at "127.0.0.1", port 5432 failed: Connection refused Is the server running on that host and accepting TCP/IP connections?
該当するソースコード
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;
class MainController extends Controller
{
public function index() {
$items = DB::select('select * from todolist');
return view('todo', ['items' => $items]);
}
}
.env
DB_CONNECTION=pgsql
DB_HOST=127.0.0.1
DB_PORT=5432
DB_DATABASE=todo
DB_USERNAME=postgres
DB_PASSWORD=pass01
docker-compose.yml
services:
laravel.test:
build:
context: ./vendor/laravel/sail/runtimes/8.2
dockerfile: Dockerfile
args:
WWWGROUP: '${WWWGROUP}'
image: sail-8.2/app
extra_hosts:
- 'host.docker.internal:host-gateway'
ports:
- '${APP_PORT:-80}:80'
- '${VITE_PORT:-5173}:${VITE_PORT:-5173}'
environment:
WWWUSER: '${WWWUSER}'
LARAVEL_SAIL: 1
XDEBUG_MODE: '${SAIL_XDEBUG_MODE:-off}'
XDEBUG_CONFIG: '${SAIL_XDEBUG_CONFIG:-client_host=host.docker.internal}'
IGNITION_LOCAL_SITES_PATH: '${PWD}'
volumes:
- '.:/var/www/html'
networks:
- sail
depends_on:
- pgsql
pgsql:
image: 'postgres:15'
ports:
- '${FORWARD_DB_PORT:-5432}:5432'
environment:
PGPASSWORD: '${DB_PASSWORD:-secret}'
POSTGRES_DB: '${DB_DATABASE}'
POSTGRES_USER: '${DB_USERNAME}'
POSTGRES_PASSWORD: '${DB_PASSWORD:-secret}'
volumes:
- 'sail-pgsql:/var/lib/postgresql/data'
- './vendor/laravel/sail/database/pgsql/create-testing-database.sql:/docker-entrypoint-initdb.d/10-create-testing-database.sql'
networks:
- sail
healthcheck:
test:
- CMD
- pg_isready
- '-q'
- '-d'
- '${DB_DATABASE}'
- '-U'
- '${DB_USERNAME}'
retries: 3
timeout: 5s
networks:
sail:
driver: bridge
volumes:
sail-pgsql:
driver: local
DB情報(php artisan tinker)確認
> DB::connection()->getconfig();
= [
"driver" => "pgsql",
"host" => "127.0.0.1",
"port" => "5432",
"database" => "todo",
"username" => "postgres",
"password" => "pass01",
"charset" => "utf8",
"prefix" => "",
"prefix_indexes" => true,
"search_path" => "public",
"sslmode" => "prefer",
"name" => "pgsql",
]
>
自分で試したこと
下記コメントをいただきましたので、
postgresqlを停止して再起動(sail up)しましたが同じエラーでした。
「ここのdocker-compose.ymlのservicesにvuesplash_databaseという名前でpostgresがあります。
あなたのdocker-compose.ymlにはservicesにpgsqlという名前でpostgresがあります。
postgresql起動→sudo service postgresql start
docker-compose.ymlに書いてるpgsqlを使用するならWSLのlinuxに入っているpostgresは不要と思います。
sail upしたときのコンソールログでpostgresが起動しているのがわかると思います。」
下記のURLのコメントは関係ないでしょうか?
dockerに詳しくないので分かりません。https://teratail.com/questions/242563
<コメント>
「Dockerコンテナ内ではなく、自分のローカルで実行してませんか?
Dockerで環境構築しているのならDockerコンテナ内で実行しないと名前解決できないと思います。」