错误 1045 (28000):用户“root”@“localhost”访问被拒绝(使用密码:NO)- Docker 上的 MariaDb

问题描述 投票:0回答:1

我已浏览了有关此问题的所有可用线程,但它们似乎都无法帮助解决我的问题。

使用命令拉取我的 mariadb 映像(在 root 帐户上使用 su):

docker pull mariadb:latest

然后运行:

docker run -d --name some_name -e MYSQL_ROOT_PASSWORD=some_secret_password -p 1111:3306 -v /volume/path:/volume/path mariadb:latest

然后做(在这个命令之后,我在提示中得到root@some_numbers,所以我假设我处于root模式):

docker exec -it some_name bash

然后在

50-server.cnf
中更改以下行:

bind_address 172.0.0.1
->
bind_address 0.0.0.0
据说不仅接受来自本地主机的所有流量

然后尝试首次登录:

mariadb -P 1111 --protocol=tcp -u root -p
是的,我知道 -p 可以像这样写密码 -pPASSWORD 等。它不起作用,当留空时它也不起作用,这个命令的任何变体都不起作用,所有正确的命令都会给出一个,和相同的结果:

ERROR 1045 (28000): Access denied for user 'root'@'some_ip' (using password: YES)

我已经在具有 root 权限的 docker 容器(su 模式打开)、具有 root 权限的主机和具有 root 权限的远程计算机上进行了尝试,结果与上面显示的结果相同。我也知道这一点:链接,令我惊讶的是,当我在 root 帐户上使用 su 模式时,我仍然无法登录。

我也无法对 mariadb 服务执行任何操作来将其关闭并使用跳过授予标志重新启动,如下所示:link

总而言之,我想访问位于基于 ubuntu 的远程服务器上的容器中的 mariadb 实例,以便将来使用另一台远程计算机访问它,但现在在遵循我能找到的每一个步骤之后,我陷入了困境第一次简单登录数据库。

docker mariadb
1个回答
0
投票

我已经使用 mariadb 10.5 和 11.6 客户端尝试了您的示例,并且都使用您描述的执行进行连接。

例如:

$ client/mariadb -P 1111 --protocol=tcp -u root -psome_secret_password
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 4
Server version: 11.4.2-MariaDB-ubu2404 mariadb.org binary distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> \s
--------------
client/mariadb from 11.6.0-MariaDB, client 15.2 for Linux (x86_64) using  EditLine wrapper

Connection id:      4
Current database:   
Current user:       root@::1
SSL:            Cipher in use is TLS_AES_256_GCM_SHA384, cert is OK
Current pager:      stdout
Using outfile:      ''
Using delimiter:    ;
Server:         MariaDB
Server version:     11.4.2-MariaDB-ubu2404 mariadb.org binary distribution
Protocol version:   10
Connection:     localhost via TCP/IP
Server characterset:    utf8mb4
Db     characterset:    utf8mb4
Client characterset:    utf8mb3
Conn.  characterset:    utf8mb3
TCP port:       1111
Uptime:         2 min 48 sec

问题是

MYSQL_ROOT_PASSWORD=some_secret_password
或更现代的
MARIADB_ROOT_PASSWORD=some_secret_password
在数据卷
/volume/path
初始化后不被使用。无论创建卷时的密码是什么,当前都不是
some_secret_password
(或任何实际密码)。

也可能出现这样的情况:如果您的

some_secret_password
包含具有 shell 含义的字符,那么这些字符可能会更改传递到 MariaDB 服务器的内容。如果不确定请报价,如
'-psome_secret_password'
。很长一段时间以来,MariaDB 容器已经能够处理任何密码。

如果您仍然遇到困难,请使用以下命令重置密码:

docker run -d --name some_name -p 1111:3306 -v /volume/path:/volume/path mariadb:latest --skip-grant-tables
mariadb -P 1111 --protocol=tcp -u root -e 'flush privileges;set password=password=("some_other_secret_password")'
© www.soinside.com 2019 - 2024. All rights reserved.