не удалось подключиться к 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