您好,我已经关注了这个docker tutorial for mariabdb,并且也检查了这个stackoverflow question。我可以开始没有任何问题的mariadb容器,并且可以使用命令root
用mypass
和mysql -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)
错误。
感谢帮助!
答案 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。