Pav*_*fer 6 pgadmin docker pgadmin-4
有没有办法用一些服务器连接预先配置 pgadmin(可能通过 env 变量)?
假设你有这个 docker-compose.yml,比如PGADMIN_CONNECTIONS这个例子中的 env 变量?(PGADMIN_CONNECTIONS可能不是有效的 ENV 变量,它只是一个说明)
version: '3'
services:
postgres:
image: postgres
hostname: postgres
ports:
- "5432:5432"
environment:
POSTGRES_USER: dbuser
POSTGRES_PASSWORD: dbpass
POSTGRES_DB: TEST_SM
pgadmin:
image: dpage/pgadmin4
ports:
- "80:80"
environment:
PGADMIN_DEFAULT_EMAIL: pgadmin4@pgadmin.org
PGADMIN_DEFAULT_PASSWORD: admin
??PGADMIN_CONNECTIONS: dbuser:dbpass@postgres:5432
Run Code Online (Sandbox Code Playgroud)
小智 16
This config works for me:
create an empty dir call postgres_db_data
create "pgpass" with the following contents
host.docker.internal:15432:postgres:postgres:postgres
{
"Servers": {
"1": {
"Name": "docker_postgres",
"Group": "docker_postgres_group",
"Host": "host.docker.internal",
"Port": 15432,
"MaintenanceDB": "postgres",
"Username": "postgres",
"PassFile": "/pgpass",
"SSLMode": "prefer"
}
}
}
Run Code Online (Sandbox Code Playgroud)
version: "3.9"
services:
db:
image: postgres
volumes:
- ./postgres_db_data:/var/lib/postgresql/data
environment:
- POSTGRES_DB=postgres
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
ports:
- "15432:5432"
pgadmin:
image: dpage/pgadmin4
restart: always
environment:
PGADMIN_DEFAULT_EMAIL: pgadmin@pgadmin.com #the username to login to pgadmin
PGADMIN_DEFAULT_PASSWORD: pgadmin # the password to login to pgadmin
ports:
- "5050:80"
volumes:
- ./servers.json:/pgadmin4/servers.json # preconfigured servers/connections
- ./pgpass:/pgpass # passwords for the connections in this file
depends_on:
- "db"
Run Code Online (Sandbox Code Playgroud)
run docker compose up
open http://localhost:5050/browser/
这是一个独立的 docker-compose 文件。您不需要创建任何其他文件。
注意:需要Docker Compose 版本 2.23.1或更高版本(用于Compose 规范 1.20.1中添加的内联配置支持)
version: '3.9'
services:
db:
image: postgres:16.1
ports:
- 5432:5432
environment:
- POSTGRES_DB=postgres
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
pgadmin:
image: dpage/pgadmin4:2023-11-20-2
ports:
- 8082:80
environment:
- PGADMIN_DEFAULT_EMAIL=postgres@example.com
- PGADMIN_DEFAULT_PASSWORD=postgres
- PGADMIN_CONFIG_SERVER_MODE=False
- PGADMIN_CONFIG_MASTER_PASSWORD_REQUIRED=False
entrypoint: /bin/sh -c "chmod 600 /pgpass; /entrypoint.sh;"
user: root
configs:
- source: servers.json
target: /pgadmin4/servers.json
- source: pgpass
target: /pgpass
configs:
pgpass:
content: db:5432:*:postgres:postgres
servers.json:
content: |
{"Servers": {"1": {
"Group": "Servers",
"Name": "My Local Postgres 16.1",
"Host": "db",
"Port": 5432,
"MaintenanceDB": "postgres",
"Username": "postgres",
"PassFile": "/pgpass",
"SSLMode": "prefer"
}}}
Run Code Online (Sandbox Code Playgroud)
PGADMIN_CONFIG_SERVER_MODE=False禁用 pgadmin4 登录屏幕。PGADMIN_CONFIG_MASTER_PASSWORD_REQUIRED=False禁用登录屏幕时无需输入主密码。host.docker.internal,这意味着它可以在 Linux 上开箱即用。fe_sendauth: no password supplied前面示例中的错误,您需要第一次手动输入 postgres 密码。小智 6
您需要定义一个servers.json 文件来配置连接。这里有很好的记录。
容器内的默认路径是/pgadmin4/servers.json. 您可以COPY将自己的 server.json 文件版本转换为新构建的映像,也可以在运行时将文件绑定挂载到容器中。
密码不能通过 JSON 传递给 pgadmin,但在下面的示例中引用了包含密码的文件。有关更多信息,请参见下文。
该server.json文件的示例结构如下:
{
"Servers": {
"1": {
"Name": "pgadmin4@pgadmin.org",
"Group": "Servers",
"Host": "magic_db",
"Port": 5432,
"MaintenanceDB": "postgres",
"Username": "postgres",
"PassFile": "/pgpass",
"SSLMode": "prefer"
}
}
}
Run Code Online (Sandbox Code Playgroud)
该/pgpass要求的结构如下:
hostname:port:database:username:password
Run Code Online (Sandbox Code Playgroud)
因此,对于上面的示例,它将是:
magic_db:5432:postgres:postgres:secretpassword
Run Code Online (Sandbox Code Playgroud)
注:密码改为密码文件中的pgAdmin新版本所看到这里。
| 归档时间: |
|
| 查看次数: |
1109 次 |
| 最近记录: |