在docker容器中浏览postgres

时间:2018-02-09 21:27:49

标签: sql postgresql docker django-rest-framework pgadmin-4

我使用docker-compose跨多个docker容器工作,所有这些容器大多是单独的django rest框架构建的应用程序。我已经下载了所有容器,并且能够使用所有这些容器构建整个应用程序。

每个容器都有postgres db运行,​​我想现在使用任何ui工具浏览数据库。我知道pgadmin可以在这里完成工作,但我如何配置我的pgadmin来展示这些容器中的任何postgres数据库?

2 个答案:

答案 0 :(得分:0)

应该可以将数据库端口也暴露给本地网络。

通常,您将应用程序容器内部连接到数据库容器。在这种情况下,不需要在数据库的compose文件中声明ports部分,但如果您有该条目,则除了本地主机之外还绑定数据库。

在您将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"

答案 1 :(得分:0)

确保postgres容器的端口映射到主机系统。默认postgres端口为5432。您可以使用docker-compose.yml中的port directive执行此操作。您只能映射一次端口。所以你的配置文件看起来像:

services:
  postgres_1:
    ports:
      - "49000:54321"
    [...]
  postgres_2:
    ports:
      - "49001:54321"
    [...]

之后,您应该能够使用docker主机的IP和上面指定的端口访问所需的数据库。

如果您仍然遇到与pgadmin等客户端连接时出现问题,请检查容器内的以下配置文件。

  1. 是否有任何阻止您的连接尝试?您的docker主机是否在防火墙后面?
  2. postgresql.confconnections and authentication部分下:

    • listen_addresses
    • port
  3. 检查pg_hba.conf, which controls client authentication

    • 出于调试目的,您可以将其设置为以下内容:

      不要在制作中执行以下操作

      host    all             all             all                 trust