码头工人无法使用其他用户从本地主机连接到mariadb

时间:2019-05-25 22:41:48

标签: mysql docker mariadb

您好,我已经关注了这个docker tutorial for mariabdb,并且也检查了这个stackoverflow question。我可以开始没有任何问题的mariadb容器,并且可以使用命令rootmypassmysql -h0.0.0.0 -uroot -pmypass密码连接。但是,在创建新用户并授予所有权限后,我将无法使用该特定的用户名和密码进行连接。我收到拒绝访问错误。

这是docker ps command的输出;

CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS                    NAMES
268c36eac13a        mariadb/server:10.3   "docker-entrypoint.s…"   31 minutes ago      Up 31 minutes       0.0.0.0:3306->3306/tcp   mariadbtest

我用docker exec -it 268c36eac13a /bin/sh连接到mariadb容器并运行以下命令;

mysql -uroot -pmypass
create database emails;
grant all on emails.* to 'testUser'@'localhost' identified by '123456';

然后,当我运行mysql -h0.0.0.0 -utestUser -123456时从本地主机收到Access denied for user 'testUser'@'172.17.0.1' (using password: YES)错误。

感谢帮助!

1 个答案:

答案 0 :(得分:1)

我认为这是网络问题:您允许用户testUser连接到本地主机的数据库,但这意味着他只能从容器内运行的客户端进行连接。如您所见,当您从主机登录到MariaDB容器时,您将获得主机docker地址172.17.0.1

一种解决方案是允许您的用户通过任何ip连接:

grant all on emails.* to 'testUser'@'%' identified by '123456';

或给定子网中的IP。您可以在CREATE USER docs中查看操作方法。

另一种解决方案是为主机IP添加用户。您可以从容器中获取主机IP,然后为该IP添加用户。有关如何从容器中获取主机IP的信息,请检查this question