не удалось подключиться к mysql docker из локального
Я пытаюсь подключиться к базе данных MySQL из образа докера. Однако это бросало ошибки.
ниже приводится изображение докера, которое я использую.
https://hub.docker.com/_/mysql/
И следующая команда, которую я использовал для запуска образа докера.
docker run -p 3306:3306 --name mysql_80 -e MYSQL_ROOT_PASSWORD=password -d mysql:8
Ниже приведен вывод команды docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9f35d2e39476 mysql:8 "docker-entrypoint.s…" 5 minutes ago Up 5 minutes 0.0.0.0:3306->3306/tcp
если я проверяю IP с помощью докера, проверяю и проверяю этот IP, он показывает, что IP недоступен.
docker inspect 9f35d2e39476 | grep -i ipaddress
И если я пытаюсь подключиться, используя localhost
и 127.0.0.1
, я получаю следующую ошибку.
Не удалось загрузить плагин аутентификации caching_sha2_password.
Ответы
Ответ 1
У меня была та же проблема, но это не делалось для меня с контейнером Docker с mysql 8.X. Я зарегистрировал контейнер
docker exec -it CONTAINER_ID bash
затем войдите в mysql как root
mysql --user=root --password
Введите пароль для root (по умолчанию это "root"). Наконец, выполните:
ALTER USER 'username' IDENTIFIED WITH mysql_native_password BY 'password';
Вы все настроены.
На это уже был дан ответ: post
Ответ 2
Прежде всего, имейте в виду, что вы используете нестабильное программное обеспечение, поэтому между выпусками и неожиданным поведением могут произойти серьезные изменения.
Во-вторых, вы не можете напрямую пропинговать свой контейнер, он находится в другой сети, но вы можете легко использовать другой контейнер, чтобы пропинговать его.
mysql 8 использует caching_sha2_password
в качестве плагина аутентификации по умолчанию вместо mysql_native_password
. Подробнее здесь.
Многие драйверы mysql еще не добавили поддержку caching_sha2_password
.
Если у вас возникли проблемы с этим, вы можете перейти на старый плагин аутентификации, например, так:
docker run -p 3306:3306 --name mysql_80 -e MYSQL_ROOT_PASSWORD=password -d mysql:8 mysqld --default-authentication-plugin=mysql_native_password
Ответ 3
Я нашел исправление здесь, когда стрелял из докер-сочинения:
services:
db:
image: mysql
command: mysqld --default-authentication-plugin=mysql_native_password
restart: always
environment:
MYSQL_ROOT_PASSWORD: example
То есть, вернитесь из нового MySQL password/auth механизма при запуске MySQL.
Ответ 4
В случае, если вы пытаетесь подключиться к MySQL с помощью самого терминала, возможно, у вас ошибка сборки. Но если вы пытаетесь подключиться к MySQL с помощью клиента с графическим интерфейсом, например, Sequel Pro, он может не поддерживать новую функцию аутентификации с MySQL 8.
В качестве обходного пути для этого вы запускаете свой док-контейнер с командой --default-authentication-plugin=mysql_native_password
в конце, и по умолчанию MySQL будет использовать старую аутентификацию:
docker run -p 3306:3306 --name mysql_80 -e MYSQL_ROOT_PASSWORD=password -d mysql:8 --default-authentication-plugin=mysql_native_password
Ответ 5
Это, вероятно, считается решенным, но я хотел документировать, что мне нужно, чтобы преодолеть это. У меня была аналогичная проблема, и возврат к стандарту старого пароля не был решением проблемы. Мне нужно было использовать caching_sha2_password, поэтому никто из вышеперечисленных не работал для меня, и мне пришлось использовать эту команду:
docker run -it --rm mysql mysql -h 172.31.116.20 -p -p6603
Если 172.31.116.20 - это мой локальный IP-адрес, где выполняется контейнер, а -p 6603 - это порт, на котором он запущен.
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5092251b3dbf mysql "docker-entrypoint..." 16 minutes ago Up 16 minutes 33060/tcp, 0.0.0.0:6603->3306/tcp test1-mysql
Я нашел это решение на сайте Docker для контейнера MySQL: https://hub.docker.com/_/mysql/
Он находится в разделе "Подключение к MySQL из клиента командной строки MySQL".
Ответ 6
Если вы хотите использовать MySQL 8.0 и не получить сообщение об ошибке "caching_sha2_password plugin", ознакомьтесь с несколькими сообщениями в блоге, которые я написал о том, как настроить MySQL 8.0 в Docker с постоянными данными, а также пост о том, как запустить MySQL 8.0. Контейнер с mysql_native_password.
Короче говоря, вы можете создать локальный конфигурационный файл my.cnf:
$ sudo nano /usr/local/opt/mysql/config/my.cnf'
Добавьте к нему необходимый оператор конфигурации:
[mysqld]
default-authentication-plugin=mysql_native_password
А затем включите этот файл в качестве привязки тома в свой оператор "Docker Run":
$ docker run --restart always --name mysql8.0 -
v/usr/local/opt/mysql/8.0:/var/lib/mysql -v
/usr/local/opt/mysql/config:/etc/mysql/conf.d -p 3306:3306 -d -e
MYSQL_ROOT_PASSWORD=your_password mysql:8.0
Вы можете прочитать более подробно об этих шагах здесь:
https://medium.com/@crmcmullen/how-to-run-mysql-in-a-docker-container-on-macos-with-persistent-local-data-58b89aec496a
https://medium.com/@crmcmullen/how-to-run-mysql-8-0-with-native-password-authentication-502de5bac661