Я пытаюсь подключить мое приложение rails, которое находится на моем хосте для изображения docker mysql. Но я получаю эту ошибку:
Authentication plugin 'caching_sha2_password' cannot be loaded: dlopen(/usr/local/Cellar/mysql/5.7.22/lib/plugin/caching_sha2_password.so, 2): image not found
Мой файл файл Docker выглядит следующим образом:
db:
image: mysql
restart: always
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: password
adminer:
image: adminer
restart: always
ports:
- 8080:8080
Я использую это в моей базе данных.yml:
default: &default
adapter: mysql2
encoding: utf8
host: 127.0.0.1
username: root
password: password
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
# socket: /Applications/MAMP/tmp/mysql/mysql.sock
development:
<<: *default
database: meal_plan_development
Что еще я должен сделать, чтобы подключить мое приложение rails к образу docker mysql.
с версии 8 MySQL использует caching_sha2_password
в качестве плагина аутентификации по умолчанию. Вы можете переопределить его для использования mysql_native_password
, добавив command
команду в файл docker-compose.yml
следующим образом:
db:
image: mysql
command: --default-authentication-plugin=mysql_native_password
restart: always
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: password
adminer:
image: adminer
restart: always
ports:
- 8080:8080
Как отметил @vstm, это, похоже, та же проблема, что и у меня с клиентом PHP. После создания контейнера вы можете попробовать изменить схему проверки подлинности на тот, который, вероятно, будет поддерживаться, например
docker exec <container_id> /bin/sh -c "mysql -uroot -ppassword
-e ALTER USER root@localhost IDENTIFIED WITH mysql_native_password BY 'PASSWORD'"
Я не слишком знаком с Docker, но я считаю, что вы также можете добавить что-то подобное в файл Docker, чтобы метод аутентификации был изменен во время инициализации контейнера:
RUN /bin/bash -c "mysql -uroot -ppassword
-e ALTER USER root@localhost IDENTIFIED WITH mysql_native_password BY 'PASSWORD'"
Я уверен, что "host 127.0.0.1" ошибочен. Вероятно, должен быть "host db"
image: mysql
наimage: mysql:5.7
в вашемdocker-compose.yml
.