Как я могу изменить пароль root в контейнере докера, так как контейнер автоматически останавливается после остановки службы mysql.
Должен ли я остановить контейнер mysql и развернуть новый?
Как я могу изменить пароль root в контейнере докера, так как контейнер автоматически останавливается после остановки службы mysql.
Должен ли я остановить контейнер mysql и развернуть новый?
Вы можете изменить его из запущенного контейнера, используя сеанс docker exec
, как описано в разделе "Подключение к MySQL Server из контейнера"
Как только сервер будет готов, вы можете запустить клиент mysql в контейнере MySQL Server, который вы только что запустили, и подключить его к MySQL Server.
Используйте командуdocker exec -it
, чтобы запустить клиентаmysql
в контейнере Docker, который вы запустили, например:docker exec -it mysql1 mysql -uroot -p
При появлении запроса введите сгенерированный пароль root (см. инструкции выше, как его найти). Поскольку опция
MYSQL_ONETIME_PASSWORD
по умолчанию имеет значение true, после того, как вы запустили контейнер сервера с примером команды выше и подключили клиент mysql к серверу, вы должны сбросить корневой пароль сервера, выполнив этот оператор для MySQL 5.7 и выше:mysql> update user set authentication_string=password('new_password') where user='root';
или альтернативно запустить,
mysql> SET PASSWORD FOR 'root' = PASSWORD('new_password');
Для MySQL 5.7 и более ранних версий запустите
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpassword';
Замените
newpassword
паролем на ваш выбор. После сброса пароля сервер готов к использованию.
Обратите внимание, что приведенная выше команда изменит пароль только для пользователя root, подключающегося с хоста localhost. Вы можете проверить это с помощью команды:
select * from mysql.user;
Чтобы изменить пароль для пользователя root со всех хостов, используйте:
ALTER USER 'root'@'%' IDENTIFIED BY 'newpassword';
Затем, как описано вhub.docker.com/mysql
, не забывайте секреты докера:
В качестве альтернативы передаче конфиденциальной информации через переменные среды
_FILE
может быть добавлен к ранее перечисленным переменным среды, в результате чего скрипт инициализации загружает значения этих переменных из файлов, присутствующих в контейнере.
В частности, это можно использовать для загрузки паролей из секретов Docker, хранящихся в файлах/run/secrets/<secret_name>
.
Например:$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD_FILE=/run/secrets/mysql-root -d mysql:tag