我已浏览了有关此问题的所有可用线程,但它们似乎都无法帮助解决我的问题。
使用命令拉取我的 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 实例,以便将来使用另一台远程计算机访问它,但现在在遵循我能找到的每一个步骤之后,我陷入了困境第一次简单登录数据库。
我已经使用 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")'