Узел docker-composer js выдает ошибку при запуске docker composer.mysql ER_NOT_SUPPORTED_AUTH_MODE - PullRequest
2 голосов
/ 18 июня 2019

Я пытаюсь развернуть приложение js узла с помощью Docker, но когда я запускаю Docker, создайте его, выдав ошибку в конце. Я видел какое-то решение вроде

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'

, но где указать этот запрос в докере.

докер-compose.yml

version: '3'
services:
  db:
    build:
      context: .
      dockerfile: ./docker/Dockerfile-mysql
    container_name: mydb
    environment:
      - MYSQL_ALLOW_EMPTY_PASSWORD=yes
      - MYSQL_DATABASE=dbautokab
      - MYSQL_USER=root
      - MYSQL_PASSWORD=
    networks:
      - helicopter-network
    healthcheck:
      test: "exit 0"

  helicopter-api:
    build:
      context: .
      dockerfile: ./docker/Dockerfile-api
    depends_on:
      - db
    networks: ['helicopter-network']
    environment:
        - PORT=3000
        - DATABASE_HOST=db
        - DATABASE_PASSWORD=
        - EGG_SERVER_ENV=local
        - NODE_ENV=development
    ports:
      - "3000:3000"

networks:
  helicopter-network:
    driver: bridge

Dockerfile-апи

FROM node:10-slim

USER node

RUN mkdir -p /home/node/app

WORKDIR /home/node/app

COPY --chown=node package*.json ./

RUN npm install

COPY --chown=node . .

COPY wait-for-it.sh /

ENV HOST=0.0.0.0 PORT=3000

EXPOSE ${PORT}

CMD /wait-for-it.sh db:3306 -- npm start

Dockerfile-MYSQL

FROM mysql 

COPY ./docker/init_db.sql /docker-entrypoint-initdb.d/

init_db.sql

CREATE DATABASE IF NOT EXISTS dbautokab;
GRANT ALL PRIVILEGES on dbautokab.*
TO 'root'@'%'
WITH GRANT OPTION;

ошибка

ошибка при подключении к БД: {Ошибка: ER_NOT_SUPPORTED_AUTH_MODE: Клиент не поддерживает протокол аутентификации, запрошенный сервером; рассмотрите возможность обновления клиента MySQL

Ответы [ 2 ]

0 голосов
/ 19 июня 2019

При использовании:

ОТ mysql

Docker вытягивает последнюю версию, в данном случае (8.0), которая не поддерживает тип аутентификации

Вы можете указать тег версии в Dockerfile, например:

ОТ mysql: 5.7.26

Если вы хотите остаться в Mysql 8.0.

Вы должны выполнить эту командную строку внутри контейнера:

docker exec -it контейнер_имя mysql -u root -p [root-пароль] mysql -e "обновить пользовательский набор authentication_string = пароль (''), плагин = 'mysql_native_password', где user = 'root';"

Или подключитесь к вашему контейнеру и выполните команду:

docker exec -it имя_ контейнера / bin / bash mysql -u root -p [root-пароль] mysql -e "обновить пользовательский набор authentication_string = пароль (''), плагин = 'mysql_native_password', где user = 'root';"

Надеюсь, это поможет

0 голосов
/ 18 июня 2019

Я считаю, что запуск сервера с пользовательским подключаемым модулем аутентификации по умолчанию должен помочь.В этом случае вы можете переопределить свойство command в docker-compose.yml.

# ...
services:
  db:
    # ...
    command: --default-authentication-plugin=mysql_native_password
    # ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...