【问题标题】:docker-composer node js give error when running the docker composer . mysql ER_NOT_SUPPORTED_AUTH_MODEdocker-compose nodejs 在运行 docker composer 时出错。 mysql ER_NOT_SUPPORTED_AUTH_MODE
【发布时间】:2019-11-01 00:28:31
【问题描述】:

我正在尝试使用 docker 部署我的节点 js 应用程序,但是当我运行 docker compose 时,它​​最后会出现错误。 我看到了一些解决方案,例如

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;

错误

连接到 db 时出错:{ 错误:ER_NOT_SUPPORTED_AUTH_MODE: 客户端不支持服务器请求的认证协议; 考虑升级 MySQL 客户端

【问题讨论】:

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


    【解决方案1】:

    使用时:

    来自 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 "update user set authentication_string=password(''), plugin='mysql_native_password' where user='root';"

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

    docker exec -it container_name /bin/bash mysql -u root -p [root-password] mysql -e "更新用户集 authentication_string=password(''), plugin='mysql_native_password' where user='root';"

    希望对你有帮助

    【讨论】:

    • 感谢它有效,但现在我遇到了新问题。我已经为此发布了新问题。 link
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2019-11-02
      • 2021-06-13
      • 2023-03-09
      • 1970-01-01
      • 2020-07-05
      • 2022-06-11
      • 2017-01-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多