Docker环境下运行pgAdmin4并预配置PostgreSQL服务器的技术问题咨询
搞定pgAdmin4 Docker预配置PostgreSQL服务器的问题
嘿,我知道直接改SQLite数据库踩坑有多烦!你遇到的“definition of service "" not found”错误,本质是手动修改数据库时漏掉了关联表的数据——服务器配置和对应的服务定义没绑定上。其实pgAdmin4官方就有更靠谱的预配置方法,不用折腾数据库,下面给你一步步说:
一、官方推荐:用servers.json预配置(最省心)
pgAdmin4支持启动时自动加载servers.json来配置服务器,完全不用碰数据库,稳得一批。
1. 写好servers.json配置文件
创建一个servers.json,内容照着这个改:
{ "Servers": { "1": { "Name": "我的PostgreSQL服务器", "Group": "默认分组", "Host": "postgres", // 这里填你的PostgreSQL容器名/IP,同Docker网络直接用容器名 "Port": 5432, "MaintenanceDB": "postgres", "Username": "postgres", "Password": "你的数据库密码", // 嫌明文不安全?看下面的pgpass方案 "SSLMode": "prefer", "PassFile": "/var/lib/pgadmin/pgpass" } } }
2. 用pgpass文件存密码(可选,更安全)
不想在json里写明文密码?整个pgpass文件:
postgres:5432:*:postgres:你的数据库密码
格式是主机名:端口:数据库名:用户名:密码,记得给文件加权限:chmod 600 pgpass,不然pgAdmin不认。
3. Docker启动时挂载文件
把这俩文件挂进pgAdmin容器对应的目录:
docker run -d \ -p 5050:80 \ -e PGADMIN_DEFAULT_EMAIL="admin@example.com" \ -e PGADMIN_DEFAULT_PASSWORD="admin" \ -v ./dump/servers.json:/pgadmin4/servers.json \ # 对应你dump目录的位置 -v ./dump/pgpass:/var/lib/pgadmin/pgpass \ --name pgadmin \ dpage/pgadmin4
启动后pgAdmin会自动加载这个配置,直接就能看到预配的服务器!
二、非要改SQLite数据库?得补全关联数据
如果你偏要折腾数据库,那得把关联表的数据都插对:
1. 先给service表插服务定义
INSERT INTO service (name, comment) VALUES ('postgres', 'PostgreSQL服务');
记住这条记录的id(比如是1)
2. 插服务器时绑定service_id
INSERT INTO server (name, host, port, maintenance_db, username, service_id, servergroup_id, ssl_mode) VALUES ('我的服务器', 'postgres', 5432, 'postgres', 'postgres', 1, 1, 'prefer');
这里servergroup_id是分组id,默认分组id是1,得对应上。
三、适配你的目录结构
你的dump文件夹刚好可以放servers.json和pgpass,挂载的时候直接指向这个目录就行,比如上面的命令里已经用了./dump/servers.json,完美适配你的结构。
这样操作后,就不会再出现服务定义找不到的错误啦!
内容的提问来源于stack exchange,提问作者Peter Butkovic




