docker rails mysql未连接

nkkqxpd9  于 2021-06-21  发布在  Mysql
关注(0)|答案(3)|浏览(341)

我正在尝试连接我的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 compose文件如下:

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应用程序连接到mysql docker映像,我还应该做些什么。

g6ll5ycj

g6ll5ycj1#

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
tct7dpnv

tct7dpnv2#

我确信“主机127.0.0.1”是错误的。可能应该是“主机数据库”

cgyqldqp

cgyqldqp3#

正如@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,但我相信您也可以向dockerfile中添加类似的内容,以便在容器初始化期间更改身份验证方法:

RUN /bin/bash -c "mysql -uroot -ppassword 
    -e ALTER USER root@localhost IDENTIFIED WITH mysql_native_password BY 'PASSWORD'"

相关问题