SQLState [HY000] 连接拒绝 Laravel 与 docker

Posted

技术标签:

【中文标题】SQLState [HY000] 连接拒绝 Laravel 与 docker【英文标题】:SQLState[HY000] Connection refused Laravel with docker 【发布时间】:2021-04-17 15:30:22 【问题描述】:

我正在使用 Docker 在我的本地机器上设置一个现有的 Laravel 项目。我意识到类似的问题已经被问过很多次了,常见的重复是“将DB_HOST 更改为127.0.0.1,但是,我的项目已经有了这个设置。

每当我尝试运行:docker-compose exec app php artisan migrate:install 来设置数据库时,我都会收到此错误:

In Connection.php line 664:

  SQLSTATE[HY000] [2002] Connection refused (SQL: create table `migrations` (`id` int unsigned not null auto_increment prima
  ry key, `migration` varchar(255) not null, `batch` int not null) default character set utf8mb4 collate utf8mb4_unicode_ci)


In Connector.php line 67:

  SQLSTATE[HY000] [2002] Connection refused

.env:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3385*
DB_DATABASE=project
DB_USERNAME=user
DB_PASSWORD=password

docker-compose.yml:

services: 
...
  mysql:
    image: mysql:5.5
    ports:
      - 3385:3306
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=project
      - MYSQL_USER=user
      - MYSQL_PASSWORD=password
    volumes:
      - data:/var/lib/mysql

使用上述凭据,我可以通过 SQLPro 或 docker-compose exec mysql bash 等工具成功连接到数据库。我知道这可能是配置问题,但我不确定问题出在哪里,Laravel 和 PHP 世界都不是我的强项。

*这不是默认端口,默认端口也不起作用,我更改了端口号,以免与我在本地运行的 MySQL 实例冲突。

【问题讨论】:

你试过DB_HOST=mysql吗?否则,您正在使 php contianer 连接到自身,而不是您的实际数据库服务器 【参考方案1】:

您的app 容器服务需要连接到mysql:3306,所以

DB_HOST=mysql
DB_PORT=3306

如果您不需要从主机连接到 MySQL,那么您根本不需要 ports 部分。

【讨论】:

谢谢!所以在docker-compose.yml 中端口的顺序是什么。因为我有3385:33063385 Docker 端口,而 3306 是 MySQL 端口?还是我不在那儿? 这是一个从 Docker 网络转发到您的主机网络接口的端口 - 格式为 host:container

以上是关于SQLState [HY000] 连接拒绝 Laravel 与 docker的主要内容,如果未能解决你的问题,请参考以下文章

Symfony 2 SQLSTATE [HY000] [2002] 连接被拒绝错误

Laravel 7 SQLSTATE [HY000] [2002] 连接被拒绝

PHP + MYSQL + Laravel - “SQLSTATE [HY000] [2002] 连接被拒绝” [重复]

SQLSTATE[HY000] [2002] 连接被拒绝 Laravel 5.8.35

SQLSTATE [HY000] [2002] 连接被拒绝 - 原因:PDOException [重复]

拉拉维尔; “SQLSTATE [HY000] [2002] 连接被拒绝”