SQLSTATE[HY000] [2002] 连接被拒绝 (SQL: select * from information_schema.tables where table_schema = ms_a

Posted

技术标签:

【中文标题】SQLSTATE[HY000] [2002] 连接被拒绝 (SQL: select * from information_schema.tables where table_schema = ms_api_shop【英文标题】:SQLSTATE[HY000] [2002] Connection refused (SQL: select * from information_schema.tables where table_schema = ms_api_shop 【发布时间】:2021-04-21 03:51:21 【问题描述】:

我正在使用 Lumen 和 Docker 来创建简单的 API 进行身份验证。安装 LumenPassport 后,我​​无法迁移数据库。我可以使用 Dbeaver 轻松连接到 mysql 数据库。 我已经为同样的目的创建了一个 Lumen Docker 项目,它是第二个。第一个工作没有问题。此外,我检查了 MySQL 数据库,ms_api_shop 在那里

错误:

这是我的 docker-compose


services:
  nginx:
    build:
      context: .
      dockerfile: docker/Nginx.Dockerfile
    image: nginx
    ports:
      - 8092:80
    depends_on:
      - fpm
    volumes:
      - ./:/var/www/lumen-docker
    links:
      - mysql

  fpm:
    build:
      context: .
      dockerfile: docker/fpm.Dockerfile
    volumes:
      - ./:/var/www/lumen-docker
    depends_on:
      - mysql
    links:
      - mysql


  mysql:
    image: mysql:5.7
    ports:
      - 33006:3306
    environment:
      - MYSQL_ROOT_PASSWORD=
      - MYSQL_DATABASE=ms_api_shop
      - MYSQL_ROOT_USER=
    volumes:
      - mysql-data:/var/lib/mysql
volumes:
  mysql-data:


和环境:

DB_HOST=mysql
DB_PORT=33006
DB_DATABASE=ms_api_shop
DB_USERNAME=
DB_PASSWORD=

【问题讨论】:

【参考方案1】:

在您的 docker 文件中,您将 33006 容器端口绑定到主机端口的 3306。如果你想访问 MySQL,你应该使用 3306 而不是 33006,就像你在 .env 中所做的那样

【讨论】:

【参考方案2】:

我有一个在 Docker 中运行的 Laravel 应用程序,我的 docker 配置的一部分如下所示:

但我个人觉得他们应该在一个docker网络内,看下面我docker-compose.yml的最后两行代码:

mysql:
    image: mysql:5.7.29
    container_name: mysql
    restart: unless-stopped
    tty: true
    ports:
      - "3306:3306"
    environment:
      MYSQL_DATABASE: homestead
      MYSQL_USER: homestead
      MYSQL_PASSWORD: secret
      MYSQL_ROOT_PASSWORD: secret
      SERVICE_TAGS: dev
      SERVICE_NAME: mysql
    volumes:
      - ./mysql:/var/lib/mysql
    networks:
      - laravel    

【讨论】:

我试过了,还是出现同样的错误:( 拒绝容器并重新构建 我已经做了,我花了4个多小时,甚至删除了项目并重新创建但没有帮助( 您能否发布您的整个docker-compose.yml.env 文件内容?或者可以分享 git repo 的链接?【参考方案3】:

据我所知,docker容器在同一个网络上是可以相互通信的。您似乎还没有在docker-compose 中连接这两个 docker。要从容器中获取网络信息,可以使用以下命令。

$ docker inspect --format='json .NetworkSettings.Networks'  <docker_container_name>

如果您需要连接这两个容器,请按照以下步骤操作:

首先,您创建一个网络

$ docker network create my-net

其次,将容器连接到网络。

$ docker network connect my-net <docker_container_name>

不要忘记将这两个容器连接到网络。

【讨论】:

我完全按照你说的做了,创建了网络流明,将它们与容器连接起来,当我检查时我看到了它。但是迁移时我又遇到了同样的错误(

以上是关于SQLSTATE[HY000] [2002] 连接被拒绝 (SQL: select * from information_schema.tables where table_schema = ms_a的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

gcloud app SQLSTATE[HY000] [2002] 连接超时

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

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