You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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.jsonpgpass,挂载的时候直接指向这个目录就行,比如上面的命令里已经用了./dump/servers.json,完美适配你的结构。

这样操作后,就不会再出现服务定义找不到的错误啦!

内容的提问来源于stack exchange,提问作者Peter Butkovic

火山引擎 最新活动