基于这个问题和其他资源,我能够使用
servers.json
配置文件在pgadmin中设置默认服务器连接。
但是当我尝试打开服务器连接时,出现此错误并询问密码:
fe_sendauth:未提供密码
如果没有密码文件,我就不会出现错误(但显然也要求密码)。
在我的 Windows 文件系统上,我有:
../db/servers.json
../db/servers_pass
使用以下通行证文件:
#host:port:db:user:pass
database:5432:*:postgres:mypasswd
我首先尝试使用一个更简单的密码文件,只有
database:5432:postgres:mypasswd:postgres:mypasswd
并且没有换行符,没有评论。我也有同样的错误。
database
是 Postgres 的 docker-compose 映像的名称和主机的名称(servers.json 正在运行,并且与该主机的连接正常,除了密码)。
这些文件被安装在 docker compose 中以
/pgadmin4/
volumes:
- ../db/servers.json:/pgadmin4/servers.json
- ../db/servers_pass:/pgadmin4/servers_pass
我可以在 docker 容器中看到它们
-rwxr-xr-x 1 pgadmin pgadmin 526 Nov 18 10:22 servers.json
-rwxr-xr-x 1 root root 57 Nov 18 11:06 servers_pass
有点奇怪,他们不是同一个主人。
我还读到其他问题,密码文件的权限需要为 600,但是当文件实际上位于 Windows 文件系统上时,我如何更改它?
我不确定是否有同样的问题,但是,在服务器模式(与容器一起使用)下,PassFile 路径以存储目录为前缀。
因此,如果您将 PassFile 设置为 /foo/pass,pgadmin 将在
/var/lib/pgadmin/storage/your_user_email/foo/pass
中查找它
我已经创建了一份报告在这里
根据文档,
.pgpass
文件(注意名称中的点):
/home/pgadmin
;您可以通过 pgadmin 容器中的 eval echo ~$USER
命令检查您的目录)。所以音量看起来像:
- ../db/servers_pass:/home/pgadmin/.pgpass
0600
权限。我在 Ubuntu 中工作,但我所做的是直接在容器中运行
chmod 0600 ~/.pgpass
。由于此文件是一个卷,因此容器的文件权限会覆盖主机上相应卷的文件的权限。
执行这些步骤后,问题消失了。