Docker rails mysql не подключается

0

Я пытаюсь подключить мое приложение 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.

  • 1
    Я думаю, что серверу MySQL требуется метод аутентификации, который вы не установили на локальном компьютере (где я предполагаю, что работает rails). Таким образом, вы можете либо попытаться обновить свои библиотеки mysql-client (что может быть сложно), либо вы можете изменить метод аутентификации на сервере mysql: stackoverflow.com/questions/50892720/… - вы также можете понизить MySQL-образ, который вы ' используется для изменения image: mysql на image: mysql:5.7 в вашем docker-compose.yml .
Теги:
docker
docker-compose

3 ответа

0

MySQL default-authentication-plugin

с версии 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
0

Как отметил @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'"  
-1

Я уверен, что "host 127.0.0.1" ошибочен. Вероятно, должен быть "host db"

  • 0
    Это не имеет никакого отношения к хосту, это была версия MySQL, которая использует другой плагин, когда я опускаю версию MySQL, она работала.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню