簡體   English   中英

無法在Docker中登錄mysql容器

[英]Unable to login to a mysql container in docker

我正在嘗試建立一個具有1個node.js服務器和1個mysql數據庫的應用程序。 我正在嘗試將其與docker集成。 我在嘗試從node.js應用程序登錄mysql時遇到問題。

簡而言之-這是我docker-compose.yml文件

version: '2.1'

services:
  db:
    build: ./db
    restart: always
    environment:
      # - MYSQL_ALLOW_EMPTY_PASSWORD=yes
      - MYSQL_DATABASE=subscriptions
      - MYSQL_PASSWORD=supersecretpassword
      - MYSQL_ROOT_PASSWORD=supersecretpassword
      - MYSQL_USER=root
    healthcheck:
      test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]
      interval: 30s
      timeout: 1s
      retries: 1


  subscription_api:
    build: ./subscription_api_server
    restart: always
    depends_on:
      db:
        condition: service_healthy
    ports:
      - "5000:5000"

我的Dockerfile於mySQL的Dockerfile

CREATE DATABASE IF NOT EXISTS subscriptions;

grant all privileges on *.* to root@localhost identified by 'supersecretpassword' with grant option;
FLUSH PRIVILEGES;

我的node.js應用程序使用sequelize作為ORM,並在此處指定連接字符串config.js

"development": {
    "username": "root",
    "password": "supersecretpassword",
    "database": "subscriptions",
    "host": "db",
    "dialect": "mysql"
  },

當我運行docker-compose up -我從node.js應用程序中收到以下錯誤

subscription_api_1  | Sequelize CLI [Node: 10.12.0, CLI: 5.1.0, ORM: 4.39.0]
subscription_api_1  | 
subscription_api_1  | Loaded configuration file "config/config.json".
subscription_api_1  | Using environment "development".
subscription_api_1  | Sun, 14 Oct 2018 17:50:17 GMT sequelize deprecated String based operators are now deprecated. Please use Symbol based operators for better security, read more at http://docs.sequelizejs.com/manual/tutorial/querying.html#operators at node_modules/sequelize/lib/sequelize.js:242:13
subscription_api_1  | 
subscription_api_1  | ERROR: Client does not support authentication protocol requested by server; consider upgrading MySQL client

但是當我嘗試直接SSH到我的docker容器時,用戶名/密碼有效

sudo docker exec -it fullstack-dev-assignment_db_1 bash
root@d36f499b706e:/# mysql -u root -p 
Enter password: 
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
root@d36f499b706e:/# mysql -u root -p 
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.

我設置sequelize的方式有問題嗎?

我猜您最終將拉到mysql:latest docker映像,在這種情況下,它將來自8.0系列。 問題是MySQL 8.0現在使用的默認身份驗證插件與sequelize使用的社區Node.js驅動程序不兼容。

您應按照此處描述的步驟克服該限制。

在您的情況下,除了授予特權外,您還必須首先切換用戶身份驗證插件。

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'supersecretpassword';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM