mysql - Docker Mysql:是什么原因导致SQLSTATE [HY000] [2002]连接超时?

标签 mysql laravel docker docker-compose dockerfile

例如,在Docker中运行查询时,出现此错误

php artisan clear-compiled
In Connection.php line 664:

  SQLSTATE[HY000] [2002] Connection timed out (SQL: select `id`, `name` from
   `users` where `profile_is_public` = 1 and `status` = 1 order by `created_at
 ` desc limit 6) 

连接超时错误的常见情况是什么?我的配置有什么问题?也许与mysql套接字有关?如何找出?

我想我输入了正确的用户名和密码。
docker-compose.yml
version: '3'

services:
  web:
    build: ./webserver
    ports:
      - "80:80"
      - "443:443"
    volumes:

      - //docker/dockertest/webserver/app:/var/www/vhosts/app
    links:
      - db:db

    command:
       - /usr/local/bin/apache2_install_composer_dependencies.sh

  db:
    image: mysql:8.0
    container_name: db
    ports:
      - "3306:3306"
    command: --default-authentication-plugin=mysql_native_password
    environment:

      MYSQL_DATABASE: myDb
      MYSQL_USER: test
      MYSQL_PASSWORD: test
      MYSQL_ROOT_PASSWORD: test
    volumes:
      - //docker/dockertest/install/db_dump:/docker-entrypoint-initdb.d
      - persistent:/var/lib/mysql
    networks:
      - default

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    links:
      - db:db
    ports:
      - 8000:80
    environment:
      MYSQL_USER: test
      MYSQL_PASSWORD: test
      MYSQL_ROOT_PASSWORD: test



volumes:
  persistent:

Laravel .env
DB_CONNECTION=mysql
#host points to Docker container
DB_HOST=db
DB_PORT=3306
DB_DATABASE=myDb
DB_USERNAME=root
DB_PASSWORD=test

更新

像这样的简单PHP脚本有效,但是Laravel不能(仍然相同的错误)
$servername = "db"; $username = "root"; $password = "test"; $dbname = "myDb";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$sql = "SELECT * FROM Person";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        echo "id: " . $row["id"]. " - Name: " . $row["name"]. "<br>";
    }
} 
$conn->close();

最佳答案

原来我在config/database.php中为DB_HOST输入了错误的环境变量名称(就像'host'=> env('DB_HOST_1', 'some ip')一样)...起初没有注意到。现在可以了

关于mysql - Docker Mysql:是什么原因导致SQLSTATE [HY000] [2002]连接超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56762993/

相关文章:

Laravel 4 的 nginx 配置

php - Laravel 验证需要用户是否登录

php - 在 Laravel 4 中使用 Cookie

docker - 如何保存 Docker 容器状态

java - 预先注册可调用参数错误

mysql - 更改 Django ORM 中的默认 SQL 列名称转换规则

mysql - 无法连接到docker上的mysql

docker - nginx无法将请求转发到在其他容器中运行的服务

mysql - 表和列的 mysql 字符集可以不同吗?

asp.net - 将自动增量插入数据库 ASP.net