我目前正在使用 Docker Desktop,但我的数据库遇到了问题。我已经能够毫无问题地使用 pgAdmin 容器。但是,当我尝试将服务器连接到数据库时,出现错误。
不幸的是,我无法确定这个问题的原因。对于如何解决此问题的任何帮助或建议,我将不胜感激。预先感谢您的帮助。
这是我的
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
您似乎尝试从集群中的一个容器连接到另一个容器。 您可能想要做的是将它们放在同一网络中,因为您使用的是 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 进行连接