Laravel with Docker issue connecting MySQL(Laravel与Docker连接MySQL的问题)
问题描述
我使用Docker安装Laravel所遵循的步骤:在我的本地系统中,我没有安装PHP、Composer、Apache、MySQL、phpMyAdmin等。我的系统中只安装了Git和Docker。
git克隆https://github.com/laravel/laravel.git
在项目根上创建docker-Composer.yml文件。
version: "3" services: db: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: pass MYSQL_DATABASE: db MYSQL_USER: root MYSQL_PASSWORD: pass ports: - "3306:3306" web: image: php:7.2.2-apache container_name: web_laravel depends_on: - db volumes: - ./:/var/www/html/ ports: - "4000:80" stdin_open: true tty: true phpmyadmin: image: phpmyadmin/phpmyadmin depends_on: - db external_links: - db:mysql ports: - "9191:80" environment: MYSQL_USER: root MYSQL_PASSWORD: pass MYSQL_ROOT_PASSWORD: pass PMA_HOST: db
从项目根运行命令。
docker-compose up
此命令将从本地缓存或Docker Hub获取所有镜像(php:7.2.2-apache,phpmyadmin/phpmyadmin,mysql:5.7),并启动这些镜像的三个容器。
现在我需要与php:7.2.2-Apache镜像的容器web_laravel交互(参见YML文件),这样我就可以添加PHP扩展和编写器来运行Laravel项目。
运行此命令。
docker exec -it web_laravel /bin/bash
现在我可以在运行web_laravel容器时运行任何命令,因此我安装了Composer和PHP扩展,如mbstring、pdo、pdo_mysql等。
然后使用Composer Install安装Laravel依赖项,设置存储和引导/缓存文件夹的权限,并运行php artisan key:GENERATE。
打开localhost:4000,我可以看到Laravel主页:
在这一点上,一切都很好。问题现在在我连接到数据库时开始。
要运行的下一个命令(我仍在容器内):
php artisan migrate
错误为:
IlluminateDatabaseQueryException : SQLSTATE[HY000] [2002] No such file or directory (SQL: select * from information_schema.tables where table_schema = blog and table_name = migrations)
IlluminateDatabaseQueryException : could not find driver (SQL: select * from information_schema.tables where table_schema = blog and table_name = migrations)
我可以打开phpMyAdmin(http://localhost:9191),可以创建数据库、表和操作相关的数据库。我的数据库名为博客。
MySQL环境变量:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=blog
DB_USERNAME=root
DB_PASSWORD=pass
推荐答案
我认为您有几个问题,第一个问题是laravel.env配置应该指向mysql容器,而不是localhost
DB_HOST=127.0.0.1
应为
DB_HOST=db
和您提到的另一个错误与Docker无关
IlllightateDatabaseQueryException:SQLSTATE[HY000][2002]无此类 文件或目录(SQL:SELECT*FROM INFORMATION_schema.tables,其中 table_schema=博客和table_name=迁移) IlllightateDatabaseQueryException:找不到驱动程序(SQL: SELECT*FROM INFORMATION_schema.tables where table_schema=blog和 table_name=迁移)
可能与缺少的依赖项有关,您应该运行
composer require doctrine/dbal
另外,您还说:
现在我可以在运行web_laravel容器时运行任何命令 所以我安装了Composer和php扩展,如mbstring、pdo pdo_mysql等您应该在PHP7/Apache映像之上构建映像,并将其添加到构建dockerfile中,因为您的更改(php扩展、配置等)不是持久的。我建议您使用Laradock或任何其他现有的Laravel/docker环境。
这篇关于Laravel与Docker连接MySQL的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Laravel与Docker连接MySQL的问题
- PHP - if 语句中的倒序 2021-01-01
- openssl_digest vs hash vs hash_hmac?盐与盐的区别HMAC? 2022-01-01
- 如何使用 Google API 在团队云端硬盘中创建文件夹? 2022-01-01
- 覆盖 Magento 社区模块控制器的问题 2022-01-01
- 使用 GD 和 libjpeg 支持编译 PHP 2022-01-01
- PHP foreach() 与数组中的数组? 2022-01-01
- 如何从数据库中获取数据以在 laravel 中查看页面? 2022-01-01
- 如何在 Symfony2 中正确使用 webSockets 2021-01-01
- Oracle 即时客户端 DYLD_LIBRARY_PATH 错误 2022-01-01
- Laravel 5:Model.php 中的 MassAssignmentException 2021-01-01