【问题标题】:Unable to connect to DB in laravellaravel 无法连接数据库
【发布时间】:2021-10-14 03:13:11
【问题描述】:

php artisan migrate 工作,但是 我可以迁移,但是当我尝试使用 eloquent 检索记录时,出现以下错误 环境是docker。

SQLSTATE[08006] [7] could not connect to server: Connection refused Is the server running on host "127.0.0.1" and accepting TCP/IP connections on port 5433? (SQL: select * from "reservaions")

.env

DB_CONNECTION=pgsql
DB_HOST=127.0.0.1
DB_PORT=5433
DB_DATABASE=root
DB_USERNAME=root
DB_PASSWORD=pass

docker-compose.yml

  # PostgreSQL
  db:
    image: postgres:9.6
    container_name: myapp-db
    environment:
      POSTGRES_DB: root
      POSTGRES_USER: root
      POSTGRES_PASSWORD: pass
    ports:
      - "5433:5432"
    volumes:
      - ./docker/db/:/docker-entrypoint-initdb.d

控制器

 public function getReservations()
    {
        $reservations = Reservaion::all();
        return $reservations;
    }

型号

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Reservaion extends Model
{
}

奇怪的是,数据库客户端工具和迁移已经成功。 为什么通过模型从控制器访问数据库时会失败? 谢谢。

【问题讨论】:

    标签: laravel postgresql eloquent


    【解决方案1】:

    在 docker-compose 中,您可以通过服务名称访问服务。比,在你的情况下, DB_HOST=db

    为什么工作?

    因为您的计算机(不是 docker)上安装了 Postgres,并且当您从控制台迁移时 - 您的数据库主机可以连接到 127.0.0.1

    未来 - 与来自 d​​ocker php 服务的工匠合作: docker-compose exec {PHP_SERVICE} bash

    【讨论】:

    • 哦,抱歉,已编辑 - 主机不是 pgsql,它是 db,复制粘贴是邪恶的 :)
    • 谢谢。我通过在 .env 中写入 docker-db 的容器名称解决了这个问题。
    • 是的,服务名或容器名
    猜你喜欢
    • 2013-12-18
    • 2017-11-21
    • 2021-04-21
    • 2014-07-28
    • 2017-01-27
    • 1970-01-01
    • 2020-02-28
    • 2019-08-17
    • 1970-01-01
    相关资源
    最近更新 更多