Ошибка миграции базы данных Laravel с использованием laradock

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

[Illuminate\Database\QueryException]                                                                                                                 
  SQLSTATE[HY000] [2002] Connection refused (SQL: select * from information_schema.tables where table_schema = testdb and table_name = migrations)

когда я бегу -

php artisan migrate

Я запускаю эту команду в рабочей области laradock. Я вошел в рабочую область, используя следующую команду.

docker-compose exec workspace bash

Я использую laravel 5.5. У меня есть ларадок в папке моего проекта следующим образом.

 +testproject
              -Laradock

Файл моего проекта .env (testproject / .env) содержит следующие настройки для mysql.

DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=33060
DB_DATABASE=testdb
DB_USERNAME=root
DB_PASSWORD=root

Мой файл laradock .env (testproject / laradock / .env) содержит следующие настройки для mysql.

MYSQL_VERSION=8.0
MYSQL_DATABASE=testdb
MYSQL_USER=default
MYSQL_PASSWORD=secret
MYSQL_PORT=33060
MYSQL_ROOT_PASSWORD=root
MYSQL_ENTRYPOINT_INITDB=./mysql/docker-entrypoint-initdb.d

Мой docker-compose.yml содержит следующие настройки для контейнера Mysql

mysql:
      build:
        context: ./mysql
        args:
          - MYSQL_VERSION=${MYSQL_VERSION}
      environment:
        - MYSQL_DATABASE={MYSQL_DATABASE}
        - MYSQL_USER={MYSQL_USER}
        - MYSQL_PASSWORD={MYSQL_PASSWORD}
        - MYSQL_ROOT_PASSWORD={MYSQL_ROOT_PASSWORD}
        - TZ=${WORKSPACE_TIMEZONE}
      volumes:
        - ${DATA_SAVE_PATH}/mysql:/var/lib/mysql
        - ${MYSQL_ENTRYPOINT_INITDB}:/docker-entrypoint-initdb.d
      ports:
        - "${MYSQL_PORT}:3306"
      networks:
        - backend

Mysql в докере установлен в порт 33060. Я впервые пробую laradock. Попробовав несколько конфигураций, я вызываю Мстителей !!!


person Ahnaf    schedule 25.10.2017    source источник
comment
Как вы начали свои контейнеры?   -  person lchachurski    schedule 25.10.2017
comment
Вы запустили свой контейнер mysql docker-compose up -d mysql?   -  person JérémyCasper    schedule 25.10.2017
comment
да .. контейнер mysql запущен .. @veNuker   -  person Ahnaf    schedule 25.10.2017
comment
Попробуйте подключиться и войти в myslq docker-compose exec mysql bash + mysql -u root -p и проверить, существует ли ваша база данных.   -  person lchachurski    schedule 25.10.2017
comment
база данных с именем testdb существует на сервере. @veNuker   -  person Ahnaf    schedule 25.10.2017


Ответы (1)


решил проблему, установив следующие настройки mysql.

testproject / .env:

DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=testdb
DB_USERNAME=root
DB_PASSWORD=root

тестпроект / ларадок / .env:

MYSQL_VERSION=8.0
MYSQL_DATABASE=default
MYSQL_USER=default
MYSQL_PASSWORD=secret
MYSQL_PORT=33060
MYSQL_ROOT_PASSWORD=root
MYSQL_ENTRYPOINT_INITDB=./mysql/docker-entrypoint-initdb.d

тестпроект / ларадок / докер-compose.yml

mysql:
      build:
        context: ./mysql
        args:
          - MYSQL_VERSION=${MYSQL_VERSION}
      environment:
        - MYSQL_DATABASE=${MYSQL_DATABASE}
        - MYSQL_USER=${MYSQL_USER}
        - MYSQL_PASSWORD=${MYSQL_PASSWORD}
        - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
        - TZ=${WORKSPACE_TIMEZONE}
      volumes:
        - ${DATA_SAVE_PATH}/mysql:/var/lib/mysql
        - ${MYSQL_ENTRYPOINT_INITDB}:/docker-entrypoint-initdb.d
      ports:
        - "${MYSQL_PORT}:3306"
      networks:
        - backend

Я также выполнил следующие две команды в папке laradock

docker-compose down

docker-compose up -d mysql
person Ahnaf    schedule 25.10.2017
comment
Молодец :) Значит, это все-таки проблема с доступом к базе данных? - person lchachurski; 25.10.2017
comment
Спасибо. Ключевым моментом здесь является то, что номер порта 3306 остается неизменным во внутренней сети laradock, а пользовательский номер порта 33060 актуален только тогда, когда контейнер mysql открыт для хост-машины. Внутри он по-прежнему использует 3306, так что это порт, который нужно использовать вашему приложению laravel, поскольку оно работает внутри laradock. - person Spudley; 21.10.2019