Как заставить PHPMyAdmin видеть MySQL в двух разных экземплярах докера - PullRequest
0 голосов
/ 01 октября 2019

Я пытаюсь запустить экземпляр докера MySQL и хочу подключиться к этому серверу с помощью PHPMyAdmin.

Имя хоста моего сервера, с которого запускается Docker: <<strong> Имя_сервера >

Я использую следующую команду для запуска моего Docker-контейнера MySQL

docker run -P --name mysql-test -v storage-test:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=MyDataBase -e MYSQL_USER=me -e MYSQL_PASSWORD=mepass -d mysql:latest

И кажется, что правильно запустить и создать базу данных после этого я запускаю контейнер PHPmyAdmin

docker run --name myadmin -d -e MYSQL_ROOT_PASSWORD=root -e PMA_HOST=ServerName -e PMA_VERBOSE=MyDataBase -e PMA_USER=me -e PMA_PASSWORD=mepass  -p 8080:80 phpmyadmin/phpmyadmin

Я получаю этот журнал из контейнера mySql

MySQL init process done. Ready for start up.

2019-10-01T11:36:35.909758Z 0 [Warning] [MY-011070] [Server] 'Disabling symbolic links using --skip-symbolic-links (or equivalent) is the default. Consider not using this option as it' is deprecated and will be removed in a future release.
2019-10-01T11:36:35.909856Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.17) starting as process 1
2019-10-01T11:36:37.735204Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
2019-10-01T11:36:37.761004Z 0 [Warning] [MY-011810] [Server] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory.
2019-10-01T11:36:37.776949Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.17'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  MySQL Community Server - GPL.
2019-10-01T11:36:37.887863Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Socket: '/var/run/mysqld/mysqlx.sock' bind-address: '::' port: 33060

Однако, когда я получаю доступ к веб-журналу PHPMyAdminЯ получаю следующее сообщение об ошибке:

  • MySQL сказал: Документация не может подключиться: неверные настройки.
  • mysqli_real_connect (): (HY000 / 2002): соединение отклонено
  • phpMyAdmin попытался подключиться к серверу MySQL, и сервер отклонил соединение. Вы должны проверить хост, имя пользователя и пароль в вашей конфигурации и убедиться, что они соответствуют информации, предоставленной администратором сервера MySQL.

Если я удаляю -e PMA_USER=me -e PMA_PASSWORD=mepass из команды запускаЯ получаю логин, где я могу ввести свои учетные данные, однако, пытаясь это сделать, я просто получаю

  • mysqli_real_connect (): (HY000 / 2002): соединение отклонено

Кто-нибудь может увидеть, что я делаю здесь не так?

Вот ссылка на два контейнера докеров, которые я использую

https://hub.docker.com/_/mysql

https://hub.docker.com/r/phpmyadmin/phpmyadmin/

С уважением

1 Ответ

1 голос
/ 01 октября 2019

Прежде всего, не используйте -P при запуске контейнера MySQL . -P (или --publish-all) опубликует порты контейнера MySQL, что означает MySQL будет доступен публично . Скорее всего, это не то, что вам нужно.

Контейнеры могут соединяться друг с другом через сеть контейнеров-контейнеров;если оба контейнера подключены к одной и той же сети, они могут соединяться друг с другом по этой сети без необходимости делать порты общедоступными. Используйте только -p (или -P), чтобы сделать порты доступными, которые должны быть общедоступными.

Например;

1. Создайте пользовательскую сеть;

docker network create myprivatenetwork

2. Запустите контейнер mysql

Запустите контейнер mysql и подключите его к myprivatenetwork. Я удалил опцию -P, что означает, что контейнер недоступен публично, но доступен из сети, к которой он подключен. (Я обернул команды, чтобы их было легче читать)

docker run \
  --name mysql-test \
  --network myprivatenetwork \
  -v storage-test:/var/lib/mysql \
  -e MYSQL_ROOT_PASSWORD=root \
  -e MYSQL_DATABASE=MyDataBase \
  -e MYSQL_USER=me \
  -e MYSQL_PASSWORD=mepass \
  -d \
  mysql:5.7

Примечание : я использовал mysql:5.7, потому что mysql:latest (в настоящее время MySQL 8) требуетнекоторая дополнительная конфигурация;см. PHP с MySQL 8.0+ ошибка: сервер запросил метод аутентификации, неизвестный клиенту В общем, рекомендуется указывать конкретную версию, которую вы хотите запустить, и не запускать :latest, так какможет измениться на более новые версии, что может привести к сбою настроек.

3. Запустите контейнер PhpMyAdmin

Запустите контейнер PhpMyAdmin и подключите его к той же сети;phpmyadmin может соединиться с контейнером mysql, используя его name (mysql-test) в качестве имени хоста и используя порт mysql по умолчанию (3306). Для контейнера phpmyadmin я сохранил -p, чтобы разрешить доступ к нему публично (хотя вы можете захотеть запустить его с TLS / SSL)

docker run \
  --name myadmin \
  --network myprivatenetwork \
  -d \
  -e MYSQL_ROOT_PASSWORD=root \
  -e PMA_HOST=mysql-test \
  -e PMA_PORT=3306 \
  -e PMA_VERBOSE=mysql-test \
  -e PMA_USER=me \
  -e PMA_PASSWORD=mepass  \
  -p 8080:80 \
  phpmyadmin/phpmyadmin

4. Посетите http://localhost:8080 в вашем браузере

Теперь вы сможете посетить PhpMyAdmin в своем браузере и просмотреть базу данных MySQL.

Обратите внимание, что PhpMyAdmin не настроен спароль или TLS / SSL, поэтому, если ваша машина общедоступна (интернет или ваша локальная сеть), это позволит другим пользователям получать доступ к вашей базе данных через phpmyadmin

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