Laravel с Docker проблемой подключения MySQL - PullRequest
0 голосов
/ 25 декабря 2018

Шаги, которые я выполняю для настройки Laravel с помощью Docker: в моей локальной системе у меня не установлены 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
    

    Эта команда извлекает все изображения (php: 7.2.2-apache, phpmyadmin / phpmyadmin, mysql: 5.7) из локального кэша или Docker Hub и запускает три контейнера для этих изображений.

    Теперь мне нужно взаимодействовать с контейнером изображения 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 и т. д.

    Затемустановить зависимость Laravel, используя установку composer, установить разрешение для папок хранилища и начальной загрузки / кэша и запустить 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) и может создавать БД, таблицы и операции, связанные с БД. У меня есть БД с именем blog .

MySQL env:

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

1 Ответ

0 голосов
/ 25 декабря 2018

Я думаю, у вас есть пара проблем, во-первых, конфигурация 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 = migrations)

Осветить \ 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 и добавьте их в сборочный файл сборки, потому что ваши изменения (расширения php, конфигурации и т. д.) не являются постоянными.Я бы предложил вам использовать Laradock или любую другую существующую среду Laravel / docker.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...