【问题标题】:Laravel fails to connect to database while in Docker containerLaravel 在 Docker 容器中无法连接到数据库
【发布时间】:2022-01-13 20:16:48
【问题描述】:

当我运行 (Laravel 6) php artisan migrate 时,我似乎无法连接到数据库并出现错误:

 Illuminate\Database\QueryException  : SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: nodename nor servname provided, or not known (SQL: select * from information_schema.tables where table_schema = finance_app and table_name = migrations and table_type = 'BASE TABLE')

  at /Users/robertrocha/Documents/finance_app/system/finance_app/vendor/laravel/framework/src/Illuminate/Database/Connection.php:665

.... 异常跟踪:

  1   PDOException::("PDO::__construct(): php_network_getaddresses: getaddrinfo failed: nodename nor servname provided, or not known")
      /Users/robertrocha/Documents/finance_app/system/finance_app/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70

  2   PDO::__construct("mysql:host=db;port=3306;dbname=finance_app", "root", "password", [])
      /Users/robertrocha/Documents/finance_app/system/finance_app/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70

  Please use the argument -v to see more details.

我的设置: yaml:

version: '3.3'

services:
    backend:
        build:
          context: laravel
        depends_on:
          - db
        image: php-apache-laravel
        ports:
            - "10000:80"
        restart: unless-stopped
        volumes:
          - ./system:/var/www/html
        environment:
          DB_HOST: db
          DB_PORT: 3306
          DB_USERNAME: root
          DB_PASSWORD: password
          DB_DATABASE: finance_app
    db:
        image: mysql:5.7
        environment:
            MYSQL_ROOT_PASSWORD : password
            MYSQL_DATABASE: finance_app
            MYSQL_USER: root
            MYSQL_PASSWORD: password
        volumes:
          - db_data:/var/lib/mysql
        restart: unless-stopped
volumes:
    db_data: {}

起初,我阅读了有关将主机更改为您的 yaml 文件所具有的其他答案并做到了。但似乎并没有解决问题。 Laravel .env

DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=finance_app
DB_USERNAME=root
DB_PASSWORD=password

通过命令行我没有问题连接:

Roberts-Air:finance_app robertrocha$ docker ps
CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS              PORTS                   NAMES
1bb6f2d30d8a        php-apache-laravel   "docker-php-entrypoi…"   4 minutes ago       Up 2 minutes        0.0.0.0:10000->80/tcp   finance_app_backend_1
8b6c33d4a74f        mysql:5.7            "docker-entrypoint.s…"   4 minutes ago       Up 2 minutes        3306/tcp, 33060/tcp     finance_app_db_1


Roberts-Air:finance_app robertrocha$ docker exec -it finance_app_db_1 bash
root@8b6c33d4a74f:/# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.28 MySQL Community Server (GPL)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| LaravelPOS         |
| finance_app        |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
6 rows in set (0.01 sec)

mysql> 

任何理解和解决问题的帮助将不胜感激。

【问题讨论】:

  • 尝试删除 MYSQL_USER 和 MYSQL_PASSWORD。这些变量是可选的,所以现在只需使用 root 用户详细信息。您也可以尝试 docker-compose exec backend php artisan migrate 以获得更好的错误消息。
  • 如果不是,请尝试添加 ``` 端口: - '3306:3306' ```

标签: laravel docker


【解决方案1】:

经过一番研究和思考,问题是我不是从容器内部运行迁移命令,而是从外部运行。

这是我所做的:

  1. (在 VS 代码中)docker ps
  2. docker exec -it finance_app_backend_1 bash,结果:root@1bb6f2d30d8a:/var/www/html#
  3. cd 财务应用程序/
  4. root@1bb6f2d30d8a:/var/www/html/finance_app# php artisan migrate

成功了

Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated:  2014_10_12_000000_create_users_table (0.07 seconds)
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated:  2014_10_12_100000_create_password_resets_table (0.06 seconds)
Migrating: 2019_08_19_000000_create_failed_jobs_table
Migrated:  2019_08_19_000000_create_failed_jobs_table (0.03 seconds)
Migrating: 2019_11_25_012607_create_cateagories_table
Migrated:  2019_11_25_012607_create_cateagories_table (0.04 seconds)
root@1bb6f2d30d8a:/var/www/html/finance_app# 

【讨论】:

  • 我犯了同样的错误:P
【解决方案2】:

对我有用的是在我的.env 文件中更改DB_HOST=host.docker.internal

【讨论】:

    猜你喜欢
    • 2016-04-17
    • 1970-01-01
    • 2021-05-03
    • 2021-11-10
    • 2020-03-12
    • 2021-04-05
    • 2022-02-22
    • 2019-11-11
    • 2020-10-25
    相关资源
    最近更新 更多