无法连接到服务器:连接失败:连接被拒绝是运行带有 Docker 的 Postgres 的服务器

问题描述 投票:0回答:1

我目前正在使用 Docker Desktop,但我的数据库遇到了问题。我已经能够毫无问题地使用 pgAdmin 容器。但是,当我尝试将服务器连接到数据库时,出现错误。

不幸的是,我无法确定这个问题的原因。对于如何解决此问题的任何帮助或建议,我将不胜感激。预先感谢您的帮助。

enter image description here

这是我的

docker-compose.yml
文件:

version: '3'

services:
  myDB:
    image: postgres:16
    container_name: my-database
    restart: always
    ports:
      - 5433:5432
    environment:
      - POSTGRES_USER=alumno
      - POSTGRES_PASSWORD=123456
      - POSTGRES_DB=course-db
    volumes:
      - ./postgres:/var/lib/postgresql/data
  
  pdAdmin:
    image: dpage/pgadmin4
    container_name: pgadmin4
    restart: always
    depends_on:
      - myDB
    ports:
      - 8080:80
    user: '$UID:$GID'
    environment:
      - [email protected]
      - PGADMIN_DEFAULT_PASSWORD=123456
    volumes:
      - ./pgadmin:/var/lib/pgadmin
      - ./pgadmin:/certs/server.cert
      - ./pgadmin:/certs/server.key
      - ./pgadmin:/pgadmin4/servers.json

我需要使用端口 5433 进行此连接,因为端口 5432 已被我的 PC 上的 PostgreSQL 使用。

这是容器的日志:

2024-05-18 12:17:09 
2024-05-18 12:17:09 PostgreSQL Database directory appears to contain a database; Skipping initialization
2024-05-18 12:17:09 
2024-05-18 12:17:09 2024-05-18 16:17:09.672 UTC [1] LOG:  starting PostgreSQL 16.3 (Debian 16.3-1.pgdg120+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14) 12.2.0, 64-bit
2024-05-18 12:17:09 2024-05-18 16:17:09.672 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
2024-05-18 12:17:09 2024-05-18 16:17:09.672 UTC [1] LOG:  listening on IPv6 address "::", port 5432
2024-05-18 12:17:09 2024-05-18 16:17:09.685 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2024-05-18 12:17:09 2024-05-18 16:17:09.698 UTC [29] LOG:  database system was shut down at 2024-05-18 16:16:54 UTC
2024-05-18 12:17:09 2024-05-18 16:17:09.709 UTC [1] LOG:  database system is ready to accept connections
2024-05-18 12:22:09 2024-05-18 16:22:09.750 UTC [27] LOG:  checkpoint starting: time
2024-05-18 12:22:09 2024-05-18 16:22:09.804 UTC [27] LOG:  checkpoint complete: wrote 3 buffers (0.0%); 0 WAL file(s) added, 0 removed, 0 recycled; write=0.015 s, sync=0.007 s, total=0.055 s; sync files=2, longest=0.004 s, average=0.004 s; distance=0 kB, estimate=0 kB; lsn=0/19536E0, redo lsn=0/19536A8
2024-05-18 12:43:36 2024-05-18 16:43:36.351 UTC [91] LOG:  invalid length of startup packet
2024-05-18 12:43:37 2024-05-18 16:43:37.483 UTC [92] LOG:  invalid length of startup packet
2024-05-18 12:43:38 2024-05-18 16:43:38.965 UTC [93] LOG:  invalid length of startup packet
2024-05-18 12:43:39 2024-05-18 16:43:39.974 UTC [94] LOG:  invalid length of startup packet
postgresql docker docker-compose
1个回答
0
投票

您似乎尝试从集群中的一个容器连接到另一个容器。 您可能想要做的是将它们放在同一网络中,因为您使用的是 docker-compose.yml 文件。 为此,您可以在 docker-compose.yml 文件中添加一个网络,并将两个服务添加到该网络,如下所示:

services:
  myDB:
    image: postgres:16
    container_name: my-database
    restart: always
    ports:
      - 5433:5432
    environment:
      - POSTGRES_USER=alumno
      - POSTGRES_PASSWORD=123456
      - POSTGRES_DB=course-db
    volumes:
      - ./postgres:/var/lib/postgresql/data
    networks:
      - my-network
  pdAdmin:
    image: dpage/pgadmin4
    container_name: pgadmin4
    restart: always
    depends_on:
      - myDB
    ports:
      - 8080:80
    user: '$UID:$GID'
    environment:
      - [email protected]
      - PGADMIN_DEFAULT_PASSWORD=123456
    volumes:
      - ./pgadmin:/var/lib/pgadmin
      - ./pgadmin:/certs/server.cert
      - ./pgadmin:/certs/server.key
      - ./pgadmin:/pgadmin4/servers.json
    networks:
      - my-network
networks:
  my-network:
    driver: bridge
然后,Docker 将自动处理网络,您将能够使用容器名称从 pgadmin-container 内部连接到 postgres 容器。请注意,当您想使用 localhost:port 从主机系统进行连接时,只需指定 service.ports 配置。这意味着从网络内部连接时,您必须通过端口 5432(容器正在侦听的端口)而不是 5433 进行连接

© www.soinside.com 2019 - 2024. All rights reserved.