我是Docker容器的新手,但对Postgres并不陌生(我过去研究过一些(。
问题是,我正试图连接到一个Postgres服务器,该服务器从以下Docker容器dpage/pgadmin4 启动
问题是我无法使用PGAdmin4连接到服务器。我得到以下错误:
could not connect to server: Connection refused
Is the server running on host "localhost" (127.0.0.1) and accepting
TCP/IP connections on port 5432?
could not connect to server: Address not available
Is the server running on host "localhost" (::1) and accepting
TCP/IP connections on port 5432?
我有以下yaml文件:
version: '3'
services:
db:
image: postgres
restart: always
ports:
- "5432:5432"
environment:
POSTGRES_DB: postgres
POSTGRES_USER: postgres
POSTGRES_PASSWORD: parola
PGDATA: /var/lib/postgresql/data/pgdata
pgadmin4:
image: dpage/pgadmin4
ports:
- "5050:80"
environment:
PGADMIN_DEFAULT_EMAIL: user@domain.com
PGADMIN_DEFAULT_PASSWORD: parola
使用psql命令行,只有当我设置-h0.0.0.0时,我才能连接到它,如下所示:
psql -h 0.0.0.0 -U postgres
有人能告诉我我需要在yaml文件中设置什么吗?或者我如何进行配置,使其允许从localhost/127.0.0.1进行连接?
我在Ubuntu 20.04.2上运行,AMD64,Docker版本20.10.7,构建f0df350。
服务pgadmin4
无法访问服务db
,因为在端口5432的pgadmin4
内部不会有任何服务运行
有了这个配置,你只能将数据库映射到主机的5432端口。这就是为什么你可以在你的机器(主机(中运行psql -h 0.0.0.0 -U postgres
根据docker组成,pgadmin4
可以使用主机名db
访问数据库
您可以将配置与以下中的一些附加配置链接起来
version: '3'
services:
db:
image: postgres
restart: always
ports:
- "5432"
environment:
POSTGRES_DB: postgres
POSTGRES_USER: postgres
POSTGRES_PASSWORD: parola
PGDATA: /var/lib/postgresql/data/pgdata
pgadmin4:
image: dpage/pgadmin4
ports:
- "5050:80"
environment:
PGADMIN_DEFAULT_EMAIL: user@domain.com
PGADMIN_DEFAULT_PASSWORD: parola
volumes:
- ./servers.json:/pgadmin4/servers.json
在docker compose的同一目录中添加一个名为servers.json
的文件,包含以下内容。请注意,我已将主机添加为db
{
"Servers": {
"1": {
"Name": "local db",
"Group": "Server Group 1",
"Port": 5432,
"Username": "postgres",
"Host": "db",
"SSLMode": "prefer",
"MaintenanceDB": "postgres"
}
}
}