Dha*_*val 7 php mysql docker laravel-5 docker-compose
我使用 Docker 设置 Laravel 的步骤:在我的本地系统中,我没有安装 PHP、Composer、Apache、MySQL、phpMyAdmin 等。我的系统中只安装了 Git 和 Docker。
在项目根目录下创建 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
Run Code Online (Sandbox Code Playgroud)从项目根运行命令。
docker-compose up
Run Code Online (Sandbox Code Playgroud)
此命令将从本地缓存或 Docker Hub 获取所有映像(php:7.2.2-apache、phpmyadmin/phpmyadmin、mysql:5.7),并为这些映像启动三个容器。
现在我需要与 php:7.2.2-apache 图像的名为 web_laravel 的容器进行交互(请参阅 yml 文件),以便我可以添加 PHP 扩展和 Composer 来运行 Laravel 项目。
运行这个命令。
docker exec -it web_laravel /bin/bash
Run Code Online (Sandbox Code Playgroud)
现在我可以在运行 web_laravel 容器中运行任何命令,因此我安装了 Composer 和 PHP 扩展,如 mbstrings、pdo、pdo_mysql 等。
然后使用 Composer install 安装 Laravel 依赖项,设置存储和 bootstrap/cache 文件夹的权限并运行 php artisan key:generate。
打开 localhost:4000 我可以看到 Laravel 主页:
此时一切都很好。当我连接到数据库时,问题就开始了。
下一个要运行的命令(我仍在容器内):
php artisan migrate
Run Code Online (Sandbox Code Playgroud)
错误是:
Illuminate\Database\QueryException : SQLSTATE[HY000] [2002] No such file or directory (SQL: select * from information_schema.tables where table_schema = blog and table_name = migrations)
Illuminate\Database\QueryException : could not find driver (SQL: select * from information_schema.tables where table_schema = blog and table_name = migrations)
Run Code Online (Sandbox Code Playgroud)
我可以打开 phpMyAdmin ( http://localhost:9191 ) 并可以创建数据库、表和操作相关的数据库。我的数据库称为blog。
MySQL 环境变量:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=blog
DB_USERNAME=root
DB_PASSWORD=pass
Run Code Online (Sandbox Code Playgroud)
我认为你有几个问题,第一是 laravel .env 配置应该指向 MySQL 容器,而不是 localhost
DB_HOST=127.0.0.1
应该
DB_HOST=db
你提到的另一个错误与 Docker 无关
Illuminate\Database\QueryException : SQLSTATE[HY000] [2002] 没有这样的文件或目录(SQL:从 information_schema.tables 中选择 *,其中 table_schema = blog 且 table_name = 迁移)
Illuminate\Database\QueryException :找不到驱动程序(SQL:从 information_schema.tables 中选择 *,其中 table_schema = blog 且 table_name = 迁移)
它可能与缺少依赖项有关,您应该运行
composer require doctrine/dbal
另外,你还说:
现在我可以在运行 web_laravel 容器中运行任何命令,因此我安装了 Composer 和 php 扩展,如 mbstrings、pdo、pdo_mysql 等。
您应该在 PHP 7/Apache 映像之上构建映像,并将它们添加到构建 dockerfile 中,因为您的更改(php 扩展、配置...等)不会持久。我建议您使用Laradock或任何其他现有的 Laravel/docker 环境。
小智 5
尝试 DB_HOST=host.docker.internal
里面docker-compose.yml
environment:
- DB_HOST=host.docker.internal
Run Code Online (Sandbox Code Playgroud)
作品也。
归档时间: |
|
查看次数: |
24879 次 |
最近记录: |