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
连接root
和mypass
密码。但是,在我创建一个新用户并授予所有权限后,我无法使用该特定用户名和密码进行连接。我收到拒绝访问错误。
这是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】:
我认为这是网络问题:您允许用户 testUser
从 localhost
连接到您的数据库,但这意味着他只能从运行在容器内的客户端进行连接。正如您所看到的,当您从主机登录到 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相关服务的无法使用问题!