我在Docker容器中配置PostgreSQL数据库时遇到了一些麻烦。我的主要问题是我想直接从主机访问它。
我的容器配置如下所示:
version: '3'
services:
db:
image: postgres:10.4
environment:
- POSTGRES_USER=user
- POSTGRES_PASSWORD=password
- POSTGRES_DB=mydb
ports:
- "5432:5432"
volumes:
- pgdata:/var/lib/postgresql/data
- ./var/docker/db/pg_hba.conf:/var/lib/postgresql/data/pg_hba.conf
volumes:
pgdata:
我的pg_hba.conf
文件是默认文件,其中增加了两行:# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
########### LINE ADDED ###########
host all all 0.0.0.0/0 md5
host all all 127.0.0.1/32 trust
# IPv6 local connections:
########### LINE ADDED ###########
host all all ::/0 md5
host all all ::1/128 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
local replication all trust
host replication all 127.0.0.1/32 trust
host replication all ::1/128 trust
当我尝试连接到我的容器时,遇到以下错误:psql --host=127.0.0.1
psql: could not connect to server: Connection refused
Is the server running on host "127.0.0.1" and accepting
TCP/IP connections on port 5432?
我首先检查端口是否在我的Docker容器上正确重定向:docker ps
IMAGE COMMAND STATUS PORTS NAMES
postgres:10.4 "docker-entrypoint.s…" Up 6 seconds 0.0.0.0:5432->5432/tcp db_1
然后,我检查PSQL是否正确运行,在容器中执行以下操作:netstat -tlnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.11:42293 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:5432 0.0.0.0:* LISTEN -
tcp6 0 0 :::5432 :::* LISTEN -
据我了解:pg_hba.conf
中添加的两行)我想念什么?我还可以检查其他东西来调试问题吗?
最佳答案
好吧,这是令人尴尬的开发时刻之一……在与@toydarian进行了进一步调查(非常感谢您的时间!)之后,我终于注意到这是由于我在很久以前设置的别名了:
alias psql="docker run -ti --rm postgres:10.4 psql"
它解释了为什么它不起作用。让我们看看光明的一面:我已经学到了很多有关PSQL配置的知识! :)
关于postgresql - 从主机连接到PSQL dockerized数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64351132/