Laravel 在 Docker 容器中无法连接到数据库

Rob*_*cha 1 laravel docker

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

\n\n
 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\')\n\n  at /Users/robertrocha/Documents/finance_app/system/finance_app/vendor/laravel/framework/src/Illuminate/Database/Connection.php:665\n
Run Code Online (Sandbox Code Playgroud)\n\n

....\n 异常跟踪:

\n\n
  1   PDOException::("PDO::__construct(): php_network_getaddresses: getaddrinfo failed: nodename nor servname provided, or not known")\n      /Users/robertrocha/Documents/finance_app/system/finance_app/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70\n\n  2   PDO::__construct("mysql:host=db;port=3306;dbname=finance_app", "root", "password", [])\n      /Users/robertrocha/Documents/finance_app/system/finance_app/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70\n\n  Please use the argument -v to see more details.\n
Run Code Online (Sandbox Code Playgroud)\n\n

我的设置:\nYaml:

\n\n
version: \'3.3\'\n\nservices:\n    backend:\n        build:\n          context: laravel\n        depends_on:\n          - db\n        image: php-apache-laravel\n        ports:\n            - "10000:80"\n        restart: unless-stopped\n        volumes:\n          - ./system:/var/www/html\n        environment:\n          DB_HOST: db\n          DB_PORT: 3306\n          DB_USERNAME: root\n          DB_PASSWORD: password\n          DB_DATABASE: finance_app\n    db:\n        image: mysql:5.7\n        environment:\n            MYSQL_ROOT_PASSWORD : password\n            MYSQL_DATABASE: finance_app\n            MYSQL_USER: root\n            MYSQL_PASSWORD: password\n        volumes:\n          - db_data:/var/lib/mysql\n        restart: unless-stopped\nvolumes:\n    db_data: {}\n
Run Code Online (Sandbox Code Playgroud)\n\n

首先,我阅读了有关将主机更改为 yaml 文件所具有的主机的其他答案,并执行了该操作。但似乎并没有解决问题。\nLaravel .env

\n\n
DB_CONNECTION=mysql\nDB_HOST=db\nDB_PORT=3306\nDB_DATABASE=finance_app\nDB_USERNAME=root\nDB_PASSWORD=password\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
Roberts-Air:finance_app robertrocha$ docker ps\nCONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS              PORTS                   NAMES\n1bb6f2d30d8a        php-apache-laravel   "docker-php-entrypoi\xe2\x80\xa6"   4 minutes ago       Up 2 minutes        0.0.0.0:10000->80/tcp   finance_app_backend_1\n8b6c33d4a74f        mysql:5.7            "docker-entrypoint.s\xe2\x80\xa6"   4 minutes ago       Up 2 minutes        3306/tcp, 33060/tcp     finance_app_db_1\n\n\nRoberts-Air:finance_app robertrocha$ docker exec -it finance_app_db_1 bash\nroot@8b6c33d4a74f:/# mysql -u root -p\nEnter password: \nWelcome to the MySQL monitor.  Commands end with ; or \\g.\nYour MySQL connection id is 2\nServer version: 5.7.28 MySQL Community Server (GPL)\n\nCopyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.\n\nOracle is a registered trademark of Oracle Corporation and/or its\naffiliates. Other names may be trademarks of their respective\nowners.\n\nType \'help;\' or \'\\h\' for help. Type \'\\c\' to clear the current input statement.\n\nmysql> show databases;\n+--------------------+\n| Database           |\n+--------------------+\n| information_schema |\n| LaravelPOS         |\n| finance_app        |\n| mysql              |\n| performance_schema |\n| sys                |\n+--------------------+\n6 rows in set (0.01 sec)\n\nmysql> \n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n

Rob*_*cha 5

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

这是我所做的:

  1. (在 VS Code 中)docker ps
  2. docker exec -it Finance_app_backend_1 bash,结果:root@1bb6f2d30d8a:/var/www/html#
  3. cd Finance_app/
  4. root@1bb6f2d30d8a:/var/www/html/finance_app# php artisan 迁移

它起作用了

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# 
Run Code Online (Sandbox Code Playgroud)