Laravel Невозможно подключиться к базе данных с помощью Docker Compose - PullRequest
0 голосов
/ 21 декабря 2018

Я занимаюсь разработкой приложения Laravel, пытающегося использовать Docker в качестве среды разработки.Я использую Docker Compose для организации докера.Теперь у меня проблемы с подключением к базе данных.Вот что я сделал до сих пор.

Я создал docker-compose.yml в корневой папке проекта.

version: '3'
services:
    apache:
        container_name: easy_eat_apache
        image: webdevops/apache:ubuntu-16.04
        environment:
            WEB_DOCUMENT_ROOT: /var/www/public
            WEB_ALIAS_DOMAIN: easy-eat.localhost
            WEB_PHP_SOCKET: php-fpm:9000
        volumes: # Only shared dirs to apache (to be served)
        - ./public:/var/www/public:cached
        - ./storage:/var/www/storage:cached
        networks:
        - easy-eat-network
        ports:
        - "80:80"
        - "443:443"
    php-fpm:
        container_name: easy_eat_php
        image: jguyomard/laravel-php:7.2
        volumes:
        - ./:/var/www/
        - ./ci:/var/www/ci:cached
        - ./vendor:/var/www/vendor:delegated
        - ./storage:/var/www/storage:delegated
        - ./node_modules:/var/www/node_modules:cached
        - ~/.ssh:/root/.ssh:cached
        - ~/.composer/cache:/root/.composer/cache:delegated
        networks:
        - easy-eat-network
    db:
        container_name: easy_eat_db
        image: mariadb:10.2
        environment:
            MYSQL_ROOT_PASSWORD: root
            MYSQL_DATABASE: easy_eat
            MYSQL_USER: easy_eat
            MYSQL_PASSWORD: secret
        volumes:
        - db_data:/var/lib/mysql
        networks:
        - easy-eat-network
        ports:
        - "33060:3306"
networks:
    easy-eat-network:
        driver: "bridge"
volumes:
    db_data:
        driver: "local"

Затем я запускаю следующую команду для ускорения среды.

docker-compose up --build -d

Я изменил учетные данные базы данных в файле env следующим образом.

DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=easy_eat
DB_USERNAME=easy_eat
DB_PASSWORD=secret

Чтобы убедиться, что мое приложение laravel может подключиться к базе данных, я запустил команду миграции следующим образом.

docker-compose exec php-fpm php artisan migrate:fresh --seed

Я получил следующую ошибку.

Illuminate\Database\QueryException  : SQLSTATE[HY000] [1045] Access denied for user 'easy_eat'@'172.25.0.4' (using password: YES) (SQL: SHOW FULL TABLES WHERE table_type = 'BASE TABLE')

  at /var/www/vendor/laravel/framework/src/Illuminate/Database/Connection.php:664
    660|         // If an exception occurs when attempting to run a query, we'll format the error
    661|         // message to include the bindings with SQL, which will make this exception a
    662|         // lot more helpful to the developer instead of just the database's errors.
    663|         catch (Exception $e) {
  > 664|             throw new QueryException(
    665|                 $query, $this->prepareBindings($bindings), $e
    666|             );
    667|         }
    668| 

  Exception trace:

  1   PDOException::("SQLSTATE[HY000] [1045] Access denied for user 'easy_eat'@'172.25.0.4' (using password: YES)")
      /var/www/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70

  2   PDO::__construct("mysql:host=db;port=3306;dbname=easy_eat", "easy_eat", "secret", [])
      /var/www/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70

Что не так с настройкойи как я могу это исправить?

1 Ответ

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

Я нашел проблему.Уже есть проект, использующий Docker ранее.В файле docker-compose контейнер db использует том db_data.Так что это вызывает конфликт с существующим проектом.Итак, мне пришлось изменить свою конфигурацию следующим образом.

enter image description here

...