使用不同的用户,Docker无法从本地主机连接到Mariadb

3

你好,我遵循了这个Mariadb的Docker教程,并且还查看了这个StackOverflow问答。我可以无问题地启动Mariadb容器,并使用命令mysql -h0.0.0.0 -uroot -pmypass连接到rootmypass密码。但是,当我创建一个新用户并授予该用户所有权限后,我无法使用该特定的用户名和密码连接。我收到了拒绝访问的错误。

以下是docker ps命令的输出:

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)错误。

谢谢您的帮助!


你授予了testUserlocalhost172.17.0.1上的权限,但172.17.0.1不是localhost。这是因为使用了-h0.0.0.0参数。请尝试使用-h localhost参数。 - Andrey Volk
@AndreyVolk 没有运气。我得到了 ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) - quartaela
1个回答

4

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

一个解决方案是允许您的用户从任何IP连接:

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

从给定的子网中创建用户或IP。您可以在CREATE USER文档中查看如何执行此操作。
另一种解决方案是为主机机器的IP添加用户。您可以从容器内获取主机IP并为该IP添加用户。有关如何从容器中获取主机IP,请参阅此问题

谢谢,grant all on emails.* to 'testUser'@'' identified by '123456'; 生效了! - quartaela

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接