我搞砸了一个 Dockerized PostgreSQL 实例,并且意外地覆盖了POSTGRES_USER
和 的值POSTGRES_PASSWORD
。它们是随机生成的,所以猜测它们基本上是不可能的。根据 Dockerized PostgreSQL 的性质,如果您指定自己的用户名,则postgres
不会创建该角色。这意味着postgres
、admin
、root
在我的数据库实例上都是无效角色。
现在,我被困在一个我可以访问的卷中的一个数据目录和一个psql
我无法访问的数据目录,因为我不知道该数据库上的任何有效用户名。此数据目录中是否有用户名列表,我可以通过某种方式访问该用户名列表并更改密码?
好吧,我找到办法了。根据PostgreSQL 文档关于数据目录的结构:
所以我连接到运行数据库的容器并
docker exec -it <container-name> /bin/sh
转到/var/lib/postgresql/data/global
. 有一堆二进制文件,我开始逐个打印它们的内容,直到找到我识别的字符串。它是在 file 中找到的1260
,尽管我怀疑情况会一直如此。然后我简单地使用连接到数据库(数据库的 Docker 版本的配置方式是不需要密码即可从内部连接)
psql -U <recovered-username>
并使用 更改密码\password '<recovered-username>'
。成功!在任何地方以明文形式保存它都会破坏密码的意义!
您唯一的选择是保存您可以保存的内容并重新安装。这次用GIT什么的来保存重要文件的连续备份。