【问题标题】:Laravel docker either artisan or model display connection refusedLaravel docker 工匠或模型显示连接被拒绝
【发布时间】:2023-02-26 09:00:55
【问题描述】:

当我在应用程序上工作时,该应用程序托管在我机器上本地的 docker 容器中。 php artisan migrate 命令运行良好。当我尝试使用任何模型将内容加载到网页时会出现问题。

解释如下:

环境内容:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=my_db
DB_USERNAME=root
DB_PASSWORD=

迁移命令有效。

php artisan migrate

但是,当我尝试在页面上显示数据时:

public function index(){
    return App\Models\User::all();
}

Laravel 说:

SQLSTATE[HY000] [2002] Connection refused

我的 mysql 的 docker-compose.yml 内容:

services:
    mysql:
        image: 'mysql/mysql-server:8.0'
        ports:
            - '${FORWARD_DB_PORT:-3306}:3306'
        environment:
            MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
            MYSQL_ROOT_HOST: "%"
            MYSQL_DATABASE: '${DB_DATABASE}'
            MYSQL_USER: '${DB_USERNAME}'
            MYSQL_PASSWORD: '${DB_PASSWORD}'
            MYSQL_ALLOW_EMPTY_PASSWORD: 1
        volumes:
            - 'sail-mysql:/var/lib/mysql'
            - './vendor/laravel/sail/database/mysql/create-testing-database.sh:/docker-entrypoint-initdb.d/10-create-testing-database.sh'
        networks:
            - sail
        healthcheck:
            test: ["CMD", "mysqladmin", "ping", "-p${DB_PASSWORD}"]
            retries: 3
            timeout: 5s

当我将 DB_HOST 更改为容器的名称时;

DB_HOST=mysql

Laravel 开始显示数据,但是php artisan migrate 不起作用。 它如何尝试连接到它:

PDO::__construct("mysql:host=mysql;port=3306;dbname=my_db", "root", "", [])

然后失败:

SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo for mysql failed: No such host is known.  (SQL: SHOW FULL TABLES WHERE table_type = 'BASE TABLE')

我需要了解它为什么这样做,以及如何解决这个问题。 我还想知道当我在生产环境中部署应用程序时是否会遇到同样的问题。

谢谢。

【问题讨论】:

  • DB_HOST=localhost 或 127.0.0.1,你试过了吗?
  • 是的,我试了DB_HOST=localhost,它显示找不到主机。我试过DB_HOST=127.0.0.1,只有迁移开始工作,但数据仍然无法加载到网页上。
  • 所以 DB_HOST=127.0.0.1 正在为您服务。对于网页上没有显示的数据,你需要在Lavarel中检查一些其他的东西
  • 迁移完成后页面上看不到数据吗??
  • 如果我更改DB_HOST=mysql然后php artisan migrateConnection refused会显示数据

标签: laravel docker laravel-9 laravel-sail


【解决方案1】:

我发现 .env 文件中的解决方案发生了变化:

DB_PORT=mysql

到:

DB_PORT=host.docker.internal

来源:Laravel Sail Refusing MySQL connection

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-14
    • 2019-07-09
    • 2014-06-28
    • 2017-05-26
    相关资源
    最近更新 更多