docker-composer节点js在运行docker composer时给出错误。 mysql ER_NOT_SUPPORTED_AUTH_MODE

时间:2019-06-18 11:10:46

标签: mysql node.js docker docker-compose dockerfile

我试图用docker部署我的node js应用程序,但是当我运行docker时,它组成了一个错误。 我看到了类似的解决方案

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

,但在docker中指定此查询的位置。

docker-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-api

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 :(得分:0)

我相信使用自定义默认身份验证插件启动服务器应该可以解决问题。在这种情况下,您可以覆盖command中的docker-compose.yml属性。

# ...
services:
  db:
    # ...
    command: --default-authentication-plugin=mysql_native_password
    # ...

答案 1 :(得分:0)

使用时:

  

MySQL

Docker拉出了不支持身份验证类型的最新版本(在本例中为8.0)

您可以在Dockerfile上指定版本标记,例如:

  

从mysql:5.7.26

如果要保留在Mysql 8.0中。

您应在容器内执行以下命令行:

  

docker exec -it container_name mysql -u root -p [root-password] mysql -e“更新用户设置authentication_string = password(”),plugin ='mysql_native_password',其中user ='root';“

或连接到您的容器并执行命令:

  

docker exec -it container_name / bin / bash   mysql -u root -p [root-password] mysql -e“更新用户设置authentication_string = password(”),plugin ='mysql_native_password',其中user ='root';“

希望有帮助