Laravel与连接MySQL的Docker问题有关

时间:2018-12-25 10:15:25

标签: php mysql docker laravel-5 docker-compose

我遵循的使用Docker设置Laravel的步骤:在我的本地系统中,我没有安装PHP,Composer,Apache,MySQL,phpMyAdmin等。在我的系统中,我只安装了Git和Docker。

  1. git clone https://github.com/laravel/laravel.git

  2. 在项目根目录下创建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
    
  3. 从项目根目录运行命令。

    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项目。

  4. 运行此命令。

    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主页:

    enter image description here

这时一切都很好。现在,当我连接到数据库时,问题开始了。

下一个要运行的命令(我仍在容器中):

  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)

enter image description here

enter image description here

我能够打开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

1 个答案:

答案 0 :(得分:3)

我认为您有几个问题,首先是laravel .env配置应指向MySQL容器,而不是本地主机

DB_HOST=127.0.0.1

应该是

DB_HOST=db

您谈论的另一个错误与Docker不相关

  

Illuminate \ Database \ QueryException:SQLSTATE [HY000] [2002]否这样   文件或目录(SQL:从information_schema.tables中选择*,其中   table_schema =博客,table_name =迁移)

     

Illuminate \ Database \ QueryException:找不到驱动程序(SQL:   从information_schema.tables中选择*,其中table_schema =博客,   table_name =迁移)

这可能与缺少依赖项有关,应该运行

composer require doctrine/dbal

您还说过:

  

现在我可以在运行web_laravel容器中运行任何命令   所以我已经安装了作曲家和php扩展,例如mbstrings,pdo,   pdo_mysql等。

您应该在PHP 7 / Apache映像之上构建映像,并将其添加到构建dockerfile中,因为您的更改(php扩展,配置...等)不是持久性的。我建议您使用Laradock或任何其他现有的Laravel / docker环境。