我使用 Docker 设置 Laravel 的步骤:在我的本地系统中,我没有安装 PHP、Composer、Apache、MySQL、phpMyAdmin 等。我的系统中只安装了 Git 和 Docker。
克隆https://github.com/laravel/laravel.git
-
在项目根目录下创建 docker-compose.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 扩展和 Composer 来运行 Laravel 项目。
-
运行这个命令。
docker exec -it web_laravel /bin/bash
现在我可以在运行 web_laravel 容器中运行任何命令,因此我安装了 Composer 和 PHP 扩展,如 mbstrings、pdo、pdo_mysql 等。
然后使用 Composer install 安装 Laravel 依赖项,设置存储和 bootstrap/cache 文件夹的权限并运行 php artisan key:generate。
打开 localhost:4000 我可以看到 Laravel 主页:
此时一切都很好。当我连接到数据库时,问题就开始了。
下一个要运行的命令(我仍在容器内):
php artisan migrate
错误是:
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)
我可以打开 phpMyAdmin (http://本地主机:9191)并可以创建DB、表以及相关DB的操作。我已经给DB打电话了blog.
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 无关
Illuminate\Database\QueryException : SQLSTATE[HY000] [2002] 没有这样的
文件或目录(SQL:select * from information_schema.tables where
table_schema = 博客和 table_name = 迁移)
Illuminate\Database\QueryException :找不到驱动程序(SQL:
select * from information_schema.tables 其中 table_schema = blog 和
表名 = 迁移)
它可能与缺少依赖项有关,您应该运行
composer require doctrine/dbal
另外,你还说:
现在我可以在运行 web_laravel 容器中运行任何命令
所以我安装了 Composer 和 php 扩展,例如 mbstrings、pdo、
pdo_mysql 等
您应该在 PHP 7/Apache 映像之上构建映像,并将它们添加到构建 dockerfile 中,因为您的更改(php 扩展、配置...等)不会持久。我建议你使用Laradock或任何其他现有的 Laravel/docker 环境。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)