ER_NOT_SUPPORTED_AUTH_MODE при использовании серверной части NodeJS в базе данных MYSQL через докер - PullRequest
0 голосов
/ 14 июня 2019

У меня проблема с развертыванием приложения через Docker. У меня есть NodeJS (экспресс) резервная копия, интерфейс ReactJS и база данных MYSQL. Каждый должен получить свой собственный контейнер, чтобы позволить им общаться.

Передний и внутренний интерфейсы отлично работают, но не могут связаться с базой данных. Я получаю следующую ошибку:

Unhandled rejection Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client

Я следовал этому ответу: MySQL 8.0 - Клиент не поддерживает протокол аутентификации, запрошенный сервером; рассмотреть вопрос об обновлении клиента MySQL и использовать его в док-контейнере. Однако ошибка все еще существует.

Вот мой докер-compose.yml:

version: '2.1'

services:

#DB
  mysql:
    build: ./database
    environment:
      - MYSQL_ALLOW_EMPTY_PASSWORD=yes
    healthcheck:
      test: "exit 0"
    ports:
      - 3306:3306
    expose:
      - 3306
#API
  api:
    build: ./api
    depends_on:
      mysql:
        condition: service_healthy
    expose:
      - ${APP_SERVER_PORT}
    environment:
      API_HOST: ${API_HOST}
      APP_SERVER_PORT: ${APP_SERVER_PORT}
      MYSQL_HOST: mysql
      MYSQL_PORT: 3306
      MYSQL_USER: root
      MYSQL_PASSWORD: *mypassword*
      MYSQL_DATABASE: cinema
    ports:
      - ${APP_SERVER_PORT}:${APP_SERVER_PORT}
    volumes:
      - ./api:/usr/src/app/cinema_api
    command: npm start
#CLIENT
  client:
    build: ./client
    environment:
      - REACT_APP_PORT=${REACT_APP_PORT}
    expose:
      - ${REACT_APP_PORT}
    ports:
      - ${REACT_APP_PORT}:${REACT_APP_PORT}
    volumes:
      - ./client:/usr/src/app/cinema_client
    links:
      - api
    command: npm start

И мой Dockerfile для базы данных:

FROM mysql
COPY init_db.sql /docker-entrypoint-initdb.d/
RUN chmod -R 775 /docker-entrypoint-initdb.d

В init_db.sql у меня есть:

CREATE DATABASE IF NOT EXISTS cinema;
GRANT ALL PRIVILEGES on cinema.* TO 'root'@'localhost' 
IDENTIFIED BY *mypassword* WITH GRANT OPTION;

... сопровождаемый mysqldump из моей базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...