【问题标题】:Docker - cannot connect to posgres from pgadmin [duplicate]Docker - 无法从 pgadmin 连接到 postgres [重复]
【发布时间】:2021-02-02 08:35:26
【问题描述】:

我使用以下 docker-compose 文件运行了 docker-compose 来运行 Postgres 和 pgadmin。 我可以登录到 pgadmin 但 pgadmin 无法连接到 Postgres。但是,Postgres 运行平稳并接受请求。

docker-compose.yaml

version: "3"
services:
  postgres:
    image: postgres
    ports:
      - 5432:5432
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=password
    volumes:
      - postgres-data:/var/lib/postgresql/data

  pgadmin:
    image: dpage/pgadmin4
    ports:
      - 5050:80
    environment:
      - PGADMIN_DEFAULT_EMAIL=user@hotmail.com
      - PGADMIN_DEFAULT_PASSWORD=password

volumes:
  postgres-data:
    driver: local

这是从 pgadmin 视图页面连接 Postgres 时的错误。

无法连接到服务器:

无法连接到服务器:连接被拒绝服务器是否正在运行 在主机“localhost”(127.0.0.1)上并接受 TCP/IP 连接 端口 5432?无法连接到服务器:地址不可用是 在主机“localhost”(::1) 上运行并接受 TCP/IP 的服务器 端口 5432 上的连接?

这是 docker-compose 日志。

db_1            | PostgreSQL init process complete; ready for start up.
db_1            | 
db_1            | 2021-02-02 04:57:59.825 UTC [1] LOG:  starting PostgreSQL 12.5 (Debian 12.5-1.pgdg100+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 8.3.0-6) 8.3.0, 64-bit
db_1            | 2021-02-02 04:57:59.825 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
db_1            | 2021-02-02 04:57:59.825 UTC [1] LOG:  listening on IPv6 address "::", port 5432
db_1            | 2021-02-02 04:57:59.842 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
db_1            | 2021-02-02 04:57:59.867 UTC [76] LOG:  database system was shut down at 2021-02-02 04:57:59 UTC
db_1            | 2021-02-02 04:57:59.877 UTC [1] LOG:  database system is ready to accept connections
pgadmin_1       | NOTE: Configuring authentication for SERVER mode.
pgadmin_1       | 
pgadmin_1       | [2021-02-02 04:58:10 +0000] [1] [INFO] Starting gunicorn 19.9.0
pgadmin_1       | [2021-02-02 04:58:10 +0000] [1] [INFO] Listening at: http://[::]:5050 (1)
pgadmin_1       | [2021-02-02 04:58:10 +0000] [1] [INFO] Using worker: threads
pgadmin_1       | /usr/local/lib/python3.9/os.py:1023: RuntimeWarning: line buffering (buffering=1) isn't supported in binary mode, the default buffer size will be used
pgadmin_1       |   return io.open(fd, *args, **kwargs)
pgadmin_1       | [2021-02-02 04:58:10 +0000] [87] [INFO] Booting worker with pid: 87
pgadmin_1       | ::ffff:192.168.80.1 - - [02/Feb/2021:05:34:52 +0000] "GET /browser/ HTTP/1.1" 302 257 "http://localhost:5050/login?next=%2Fbrowser%2F" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36"
pgadmin_1       | ::ffff:192.168.80.1 - - [02/Feb/2021:05:34:52 +0000] "GET /login?next=%2Fbrowser%2F HTTP/1.1" 200 1707 "http://localhost:5050/login?next=%2Fbrowser%2F" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36"
pgadmin_1       | 2021-02-02 05:34:52,568: ERROR    flask.app:  404 Not Found: The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.
pgadmin_1       | Traceback (most recent call last):
pgadmin_1       |   File "/usr/local/lib/python3.9/site-packages/flask/app.py", line 1813, in full_dispatch_request
pgadmin_1       |     rv = self.dispatch_request()
pgadmin_1       |   File "/usr/local/lib/python3.9/site-packages/flask/app.py", line 1791, in dispatch_request
pgadmin_1       |     self.raise_routing_exception(req)
pgadmin_1       |   File "/usr/local/lib/python3.9/site-packages/flask/app.py", line 1774, in raise_routing_exception
pgadmin_1       |     raise request.routing_exception
pgadmin_1       |   File "/usr/local/lib/python3.9/site-packages/flask/ctx.py", line 336, in match_request
pgadmin_1       |     self.url_adapter.match(return_rule=True)
pgadmin_1       |   File "/usr/local/lib/python3.9/site-packages/werkzeug/routing.py", line 1945, in match
pgadmin_1       |     raise NotFound()
pgadmin_1       | werkzeug.exceptions.NotFound: 404 Not Found: The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.

我不知道可能出了什么问题。

【问题讨论】:

    标签: postgresql docker docker-compose pgadmin-4


    【解决方案1】:

    在集群内部时,您的容器使用服务名称相互通信。在您的情况下,您的服务名称是 postgres

    错误是说您正在尝试将服务器名称设置为localhost。您需要进行以下设置:

    【讨论】:

    • 不,伙计,那行不通。 Unable to connect to server:could not translate host name "postgres" to address: Try again
    • 奇怪,我刚拿了你的yaml,启动成功了
    【解决方案2】:

    尝试创建一个网络并将两个容器放在上面:

    version: "3"
    
    networks:
      bridge_net:
        driver: bridge
    
    services:
      postgres:
        image: postgres
        ports:
          - 5432:5432
        environment:
          - POSTGRES_USER=postgres
          - POSTGRES_PASSWORD=password
        volumes:
          - postgres-data:/var/lib/postgresql/data
        networks:
          - bridge_net
    
      pgadmin:
        image: dpage/pgadmin4
        ports:
          - 5050:80
        environment:
          - PGADMIN_DEFAULT_EMAIL=user@hotmail.com
          - PGADMIN_DEFAULT_PASSWORD=password
        networks:
          - bridge_net
    
    volumes:
      postgres-data:
        driver: local
    

    【讨论】:

    • 还是一样的问题,使用网络后。早些时候我从 docker 创建了一个网络,并在没有 docker-compose 的情况下使用 docker 运行 pgadmin 和 postgres,但遇到了同样的问题。
    • @JageshMaharjan 添加网络时,您需要在 PGAdmin 中将数据库寻址为 postgres 而不是 localhost
    • 是的,基于 Postgres docker-hub 的默认数据库是postgres,我将postgres 命名为数据库。我在小型aws实例中尝试过它有效。但在我的本地机器上,它不工作。
    • 这是在 posgres 容器内,$ docker exec -it 062000290d78 bashroot@062000290d78:/# su - postgrespostgres@062000290d78:~$ psqlpostgres=# \tTuples only is on.postgres=#
    • Compose 会为您创建一个 default 网络,与您在此处建议的 bridge_net 相同,但名称不同。 Networking in Compose 有更多详情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    • 2014-10-21
    • 2020-04-23
    • 1970-01-01
    相关资源
    最近更新 更多