Yii2 продвинутый на докере

У меня на докере расширенное приложение yii2, не работает mysql db.

Мой докер-сочинитель:

db:
image: 'mysql:latest'
volumes:
- ./database:/var/lib/mysql
ports:
- '3306:3306'
restart: always
environment:
MYSQL_ROOT_PASSWORD: pass
MYSQL_DATABASE: database

БД в yii2:

return => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=127.0.0.1;port=3306;dbname=database',
'username' => 'root',
'password' => 'pass',
'charset' => 'utf8',
],

Когда я захожу в свою локальную папку с yii2 и иду php yii migrate я вижу Exception 'yii\db\Exception' with message 'SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client'

Как исправить мою проблему?

Весь код https://github.com/k0v4back/docker-yii2

1

Решение

Я создал этот ответ на основе вашего файл docker-compose.yml

Создайте новую мостовую сеть в файле docker-compose.yml:

networks:
my-new-network:
driver: bridge

Важно подключить все ваши контейнеры к одной сети (мосту), чтобы обеспечить связь между ними.

Добавьте каждый свой контейнер в новую сеть:

db:
image: 'mysql:latest'
volumes:
- ./database:/var/lib/mysql
ports:
- '3306:3306'
restart: always
environment:
MYSQL_ROOT_PASSWORD: pass
MYSQL_DATABASE: database
networks:
- my-new-network

После этих изменений проверьте, могут ли контейнеры взаимодействовать (отправьте эхо-запрос от одного к другому — используйте имена контейнеров):

Из контейнера nginx:

ping db

если у вас нет ping введите команду iputils:

apt-get update
apt-get install iputils-ping

Если все работает хорошо — измените конфигурацию соединения с Yii DB:

return => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=db;port=3306;dbname=database', // change IP here to database container name
'username' => 'root',
'password' => 'pass',
'charset' => 'utf8',
],

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


Также убедитесь, что база данных может принимать внешние соединения. Конфигурация mysql по умолчанию блокирует внешние соединения, поэтому вам следует проверить конфигурацию mysql и добавить нового пользователя на котором вы можете войти «извне» (с внешних хостов / сетей):

CREATE USER 'newuser'@'%' IDENTIFIED BY 'password';

Пользователь root MySQL отключил удаленные подключения по умолчанию. Подробнее вы можете прочитать здесь

Логи расскажут вам гораздо больше 🙂 https://docs.docker.com/engine/reference/commandline/logs/


Я разветвил ваш репозиторий: https://github.com/raciniewski/docker-yii2

  1. Сборка и запуск всех контейнеров docker-compose up --build

введите описание изображения здесь

введите описание изображения здесь

  1. Отправить пинг на db контейнер из другого контейнера в вашем новом my-new-network сеть:

введите описание изображения здесь
введите описание изображения здесь

  1. Готово — контейнеры могут общаться
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector