【问题标题】:Postgresql running inside docker container (gcp remote instance) can't be accessed from dbeaver locally无法从本地 dbeaver 访问在 docker 容器(gcp 远程实例)内运行的 Postgresql
【发布时间】:2021-11-10 13:43:06
【问题描述】:

我在远程实例 (gcp) 上的独立 docker 容器中将 postgres 作为独立服务运行 - 请参阅下面的 docker compose 文件。

Postgres 确实在工作 - 如果我通过容器访问它,我可以在其中连接并执行操作(创建数据库、用户...)。

enter image description here

但是,当我尝试通过 dbeaver 连接到 postgres 数据库时,我总是会收到 连接尝试超时 错误。

这是我的 dbeaver 配置: 主机:172.17.0.1 端口:5432 DB - 用户名 - 密码:postgres(在 docker compose 文件中定义)

防火墙规则已在 gcp 中设置。 enter image description here

version: '3.7'
services:
    postgres:
        image: postgres:latest
        environment:
            - POSTGRES_USER=postgres
            - POSTGRES_PASSWORD=postgres
            - POSTGRES_DB=postgres
        ports:
             - "5432:5432"
        logging:
             options:
                  max-size: 10m
                  max-file: "3"
        volumes:
             - /opt/postgres_data:/var/lib/postgresql/data

    webserver:
        image: puckel/docker-airflow:latest
        restart: always
        depends_on:
            - postgres
        environment:
            - LOAD_EX=n
            - EXECUTOR=Local
        logging:
            options:
                max-size: 10m
                max-file: "3"
        volumes:
            - /opt/dags:/opt/airflow/dags
            - /opt/airflow_logs:/opt/airflow/logs
        ports:
            - "8080:8080"
        command: webserver
        healthcheck:
            test: ["CMD-SHELL", "[ -f /usr/local/airflow/airflow-webserver.pid ]"]
            interval: 30s
            timeout: 30s
            retries: 3

    scheduler:
        image: puckel/docker-airflow:latest
        restart: always
        depends_on:
            - postgres
            - webserver
        environment:
            - EXECUTOR=Local
        volumes:
            - /opt/dags:/opt/airflow/dags
            - /opt/airflow_logs:/opt/airflow/logs
        command: scheduler

【问题讨论】:

    标签: postgresql docker docker-compose containers dbeaver


    【解决方案1】:

    您可以尝试执行以下操作来访问您的 docker 容器:

    docker exec -it postgres bash
    

    你在你的 postgres 容器中,你可以尝试使用:

    psql -U postgres -p
    

    然后插入 postgres 作为密码。如果失败,则该用户可能没有登录权限。您可以尝试使用密码为 root 的 root 用户登录,这应该可以工作,并且应该让您从 dbbeaver 连接。从容器内部,您可以使用 root 用户升级用户的权限。

    【讨论】:

    • 问题不在于访问容器内的 postgres(始终正常工作),而是从外部客户端(例如 DBeaver)访问 postgres。
    • 正如我试图解释的那样,您的问题是您的用户没有外部访问权限,因此您可能需要使用根用户。所描述的过程只是为了让您检查一下。
    • 我完成了您建议的所有步骤,并且我可以确认我可以通过 CLI 与所有用户(登录)在容器中登录,并且所有 postgres 用户都具有所有正确的外部访问权限.但是,仍然无法从 DBeaver 访问 :(
    • 你的本地电脑里有postgresql实例吗?如果是这样,请尝试更改您的 postgre 容器的端口,将其设置为端口:“5433:5432”然后您可以尝试使用端口 5433 访问它
    【解决方案2】:

    为了使用 dbeaver 进行连接,您需要使用 localhost 作为主机而不是 172.17.0.1,因为这是 docker compose 网络中的 db 服务器。

    【讨论】:

      猜你喜欢
      • 2019-08-09
      • 1970-01-01
      • 2019-06-11
      • 2019-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-19
      相关资源
      最近更新 更多