docker 无法使用不同的用户从 localhost 连接到 mariadb

Posted

技术标签:

【中文标题】docker 无法使用不同的用户从 localhost 连接到 mariadb【英文标题】:docker can't connect to mariadb from localhost with different user 【发布时间】:2019-10-12 00:55:46 【问题描述】:

嗨,我关注了这个docker tutorial for mariabdb,也检查了这个*** question。我可以毫无问题地开始使用 mariadb 容器,并且可以使用命令mysql -h0.0.0.0 -uroot -pmypass 连接rootmypass 密码。但是,在我创建一个新用户并授予所有权限后,我无法使用该特定用户名和密码进行连接。我收到拒绝访问错误。

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

感谢您的帮助!

【问题讨论】:

您在localhost 授予testUser 并且172.17.0.1 不是localhost-h0.0.0.0 - 这就是原因。试试-h localhost @AndreyVolk 不走运。我收到ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) 【参考方案1】:

我认为这是网络问题:您允许用户 testUserlocalhost 连接到您的数据库,但这意味着他只能从运行在容器内的客户端进行连接。正如您所看到的,当您从主机登录到 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。

【讨论】:

感谢grant all on emails.* to 'testUser'@'' identified by '123456'; 工作!

以上是关于docker 无法使用不同的用户从 localhost 连接到 mariadb的主要内容,如果未能解决你的问题,请参考以下文章

无法从远程 docker 容器监听 docker 容器内运行的服务

Docker 构建失败 - 带有 GKE 的 Gitlab CI。无法通过 tcp://localhost:2375 连接到 Docker 守护程序。 docker 守护进程是不是正在运行?

无法使用桥接网络模式从 docker 容器连接到远程 SQL 服务器

针对VM从挂机-启动后,docker相关服务的无法使用问题!

其他用户无法访问 docker 中的 mariadb,然后是 root

无法从Intellij连接到在docker容器中运行的mySql - “指定的数据库用户/密码组合被拒绝”