laravel与docker问题连接mysql

zbsbpyhn  于 2021-06-17  发布在  Mysql
关注(0)|答案(1)|浏览(292)

我使用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

此命令将获取所有图像(php:7.2.2-apache,phpmyadmin/phpmyadmin,mysql:5.7)从本地缓存或docker hub启动这些图像的三个容器。
现在我需要和php:7.2.2-apache image的容器称为weblavel(请参阅yml文件中的),这样我就可以添加php扩展和composer来运行laravel项目。
运行此命令。

docker exec -it web_laravel /bin/bash

现在我可以在运行weblavel容器时运行任何命令,所以我安装了composer和php扩展,比如mbstrings、pdo、pdo\umysql等等。
然后使用composer install安装laravel依赖项,设置存储和引导/缓存文件夹的权限,并运行php artisankey:generate.
打开localhost:4000 and 我可以看到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://localhost:9191),可以创建数据库、表和操作相关的数据库。我给博客打过电话。
mysql环境变量:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=blog
DB_USERNAME=root
DB_PASSWORD=pass
jtoj6r0c

jtoj6r0c1#

我认为您有两个问题,第一个是laravel.env配置应该指向mysql容器,而不是localhost DB_HOST=127.0.0.1 应该是 DB_HOST=db 你说的另一个错误,和docker无关
illuminate\database\queryexception:sqlstate[hy000][2002]没有这样的文件或目录(sql:selectfrom information\u schema.tables,其中table\u schema=blog和table\u name=migrations)
illuminate\database\queryexception:找不到驱动程序(sql:select
from information_schema.tables,其中table_schema=blog和table_name=migrations)
它可能与缺少依赖项有关,您应该运行 composer require doctrine/dbal 你还说:
现在我可以在运行weblavel容器时运行任何命令,所以我安装了composer和php扩展,比如mbstrings、pdo、pdo\umysql等等。
您应该在php7/apache映像之上构建映像,并将它们添加到builddockerfile中,因为您的更改(php扩展、配置等)不是持久的。我建议您使用laradock或任何其他现有的laravel/docker环境。

相关问题