У меня на докере расширенное приложение 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'
Как исправить мою проблему?
Я создал этот ответ на основе вашего файл 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
docker-compose up --build
db
контейнер из другого контейнера в вашем новом my-new-network
сеть:Других решений пока нет …