我希望从远程客户端连接我的 Postgres docker 服务。这是我创建容器的方式:
sudo docker run --name pg -p 5432:5432 -v pg_data:/var/lib/postgres/data -e POSTGRES_DB=mydb -e POSTGRES_USER=dbowner -e POSTGRES_PASSWORD=MySecretPassword -d postgres -c "listen_addresses='*'"
我做了研究,有人说pg_hba.conf
应该编辑该文件。我应该如何编辑 pg_hba.conf?没有配置参数来设置。此外,和pg_hba.conf
之间有什么区别吗?我应该使用哪一个以及如何将其放入docker 容器中?host all all all md5
host all all 0.0.0.0/0 md5
pg_hba.conf
netstat
这是我创建容器后的输出:
$ netstat -ntl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN
tcp6 0 0 :::22 :::* LISTEN
tcp6 0 0 :::5432 :::* LISTEN
tcp6 0 0 :::3000 :::* LISTEN
tcp6 0 0 :::4000 :::* LISTEN
tcp6 0 0 :::4001 :::* LISTEN
tcp6 0 0 :::6379 :::* LISTEN
这是否意味着 PostgreSQL 服务只监听 IPv6?
答案1
存在错误-v option
:
- 你写
/var/lib/postgres/data
应该是/var/lib/postgresql/data
- 主机路径必须完整:
/root/pgdata
- 如果主机使用 selinux,
-v /root/pgdata:/var/lib/postgresql/data:Z
则使用,如果不使用,则:rw
使用
运行完美:
root@testubt:~# docker run --name pg -p 5432:5432 -v /root/pgdata:/var/lib/postgresql/data:Z -e POSTGRES_DB=mydb -e POSTGRES_USER=dbowner -e POSTGRES_PASSWORD=MySecretPassword -d postgres:alpine
root@testubt:~# ss -tnl | grep 5432
LISTEN 0 128 :::5432 :::*
测试本地主机:
root@testubt:~# PGPASSWORD=MySecretPassword psql -U dbowner mydb -h localhost
psql (9.5.14, server 10.5)
Type "help" for help.
mydb=# \q
从其他机器测试:
alp01:~# PGPASSWORD=MySecretPassword psql -U dbowner mydb -h testubt
psql (10.5)
Type "help" for help.
mydb=#
如果您想编辑pg_hba.conf
它,就在/root/pgdata
目录中。我相信您不需要它。
干杯 :)