Docker构建:错误:ER_NOT_SUPPORTED_AUTH_MODE:MySQL客户端

时间:2018-04-24 13:24:26

标签: mysql docker docker-compose dockerfile

当我尝试docker-compose -f docker-compose-now.yml up时,我收到此消息

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

现在,我确实阅读了这个解决方案:

use mysql;
update user set authentication_string=password(''), plugin='mysql_native_password' where user='root';

来自:https://github.com/mysqljs/mysql/issues/1507

但是如何将其放在docker-compose-now.yml中的entrypoints文件中?

我的环境在此文件中,当我尝试时:

entrypoints: sh "update user set authentication_string=password(''), plugin='mysql_native_password' where user='root'"

我只收到另一个错误。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

问题

为了正确看待问题,您在入口点脚本中执行的操作实际上是在sh shell中执行的。您要运行的命令应在mysql shell中执行。

解决方案

您的入口点应该使用以下命令来运行mysql命令:

mysql -u root -p [root-password] -e "update user set authentication_string=password(''), plugin='mysql_native_password' where user='root';"

如果您想在mysql db上执行此操作,则可以执行

mysql -u root -p [root-password] mysql -e "update user set authentication_string=password(''), plugin='mysql_native_password' where user='root';"

说明

在此命令中,首先使用mysql -u -p命令输入mysql shell,然后使用-e标志执行sql命令(它代表执行)。无论在-e之后执行什么在mysql shell中执行(如查询等)。有关详细信息和示例,请参阅:

https://dev.mysql.com/doc/refman/8.0/en/command-line-options.html

答案 1 :(得分:0)

version: '3'

services:

  db:
    image: mysql
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      MYSQL_ROOT_PASSWOR=example

我在mysql镜像中的Docker Hub上找到了解决方案。更改auth模式的docker-compose.yml的设置“命令”。