【问题标题】:browse postgres in a docker container在 docker 容器中浏览 postgres
【发布时间】:2018-07-20 17:24:46
【问题描述】:
我正在使用 docker-compose 跨多个 docker 容器工作,所有这些容器大多是单独的 django rest 框架构建的应用程序。我已经下载了所有容器,并且能够使用所有这些容器构建整个应用程序。
每个容器都有 postgres db 运行,我现在想使用任何 ui 工具浏览 db。我知道 pgadmin 可以在这里完成工作,但我如何配置我的 pgadmin 以展示来自这些容器的任何 postgres 数据库?
【问题讨论】:
标签:
sql
postgresql
docker
django-rest-framework
pgadmin-4
【解决方案1】:
确保postgres 容器的端口映射到主机系统。默认的postgres 端口是5432。您可以使用docker-compose.yml 中的port directive 来做到这一点。您只能映射一次端口。所以你的配置文件看起来像:
services:
postgres_1:
ports:
- "49000:54321"
[...]
postgres_2:
ports:
- "49001:54321"
[...]
之后,您应该能够使用您的docker 主机的 IP 和上面指定的端口访问所需的数据库。
如果您在与pgadmin 等客户端连接时仍然遇到问题,请检查容器内的以下配置文件。
- 是否有任何东西阻止了您的连接尝试?您的
docker 主机是否位于防火墙后面?
-
postgresql.conf在connections and authentication部分下:
-
检查您的pg_hba.conf, which controls client authentication。
-
出于调试目的,您可以将其设置为以下内容:
不要在生产中做以下事情:
host all all all trust
【解决方案2】:
应该可以将您的数据库端口也暴露给您的本地网络。
通常,您在内部将应用程序容器连接到数据库容器。在这种情况下,不需要在您的数据库的撰写文件中声明端口部分,但如果您有该条目,则除了本地主机之外,您还可以绑定您的数据库。
在您也将 postgres 端口暴露给您的主机端口之后,使用您选择的 gui 工具连接应该没有问题。
version: '3.2'
services:
httpd:
image: "oth/d_apache2.4:0.2"
ports:
# container port 80 of the webserver to localhost 80
- "80:80"
keycloak:
# keycloak uses keycloak_db
image: "jboss/keycloak-postgres:3.2.1.Final"
environment:
# internal network reference to db container
- POSTGRES_PORT_5432_TCP_ADDR=keycloak_db
- POSTGRES_PORT_5432_TCP_PORT=5432
keycloak_db:
environment:
image: "postgres:alpine"
ports:
# container port 5432 to localhost 5432
# stack intern is the port still available
- "5432:5432"