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

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

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

У меня расширенное приложение yii2 на Docker, MySQL DB не работает.

Мой docker-compose:

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

DB в 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 Ответ

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

Я создал этот ответ на основе вашего 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

enter image description here

enter image description here

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

enter image description here enter image description here

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