我在访问从 docker-compose 文件创建的数据库时遇到问题。
给定以下撰写文件,我应该能够使用类似的东西从 java 连接到它:
jdbc:postgresql://eprase:eprase@database:7000/eprase
但是,连接被拒绝了。我什至无法使用 PGAdmin 使用相同的详细信息连接它来创建新服务器。
我已进入数据库容器并运行 psql 命令来验证是否已根据 postgres Docker 文档创建了 eprase 用户和数据库,一切似乎都很好。我无法判断问题是出在数据库容器内还是我需要在 compose 网络中更改的地方。
客户端和服务器服务在很大程度上可以忽略,服务器是基于 java 的 Web API,客户端是 Angular 应用程序。
撰写文件:
version: "3"
services:
client:
image: eprase/client:latest
build: ./client/eprase-app
networks:
api:
ports:
- "5000:80"
tty: true
depends_on:
- server
server:
image: eprase/server:latest
build: ./server
networks:
api:
ports:
- "6000:8080"
depends_on:
- database
database:
image: postgres:9
volumes:
- "./database/data:/var/lib/postgresql/data"
environment:
- "POSTGRES_USER=eprase"
- "POSTGRES_PASSWORD=eprase"
- "POSTGRES_DB=eprase"
networks:
api:
ports:
- "7000:5432"
restart: unless-stopped
pgadmin:
image: dpage/pgadmin4:latest
environment:
- "PGADMIN_DEFAULT_EMAIL=admin@eprase.com"
- "PGADMIN_DEFAULT_PASSWORD=eprase"
networks:
api:
ports:
- "8000:80"
depends_on:
- database
networks:
api:
最佳答案
PostgreSQL 数据库正在监听容器端口 5432
。 7000:5432
行将主机端口 7000
映射到容器端口 5432
。这允许您连接到端口 7000 上的数据库。但是,您在公共(public)网络 (api
) 上的服务应该通过容器端口相互通信。
因此,从客户端和服务器服务的容器的角度来看,连接字符串应该是:
jdbc:postgresql://eprase:eprase@database:5432/eprase
关于postgresql - 在 docker-compose 网络中访问 postgres 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54380488/