У меня проблема с развертыванием приложения через 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 из моей базы данных.