在 docker-compose 网络中访问 postgres 数据

Mar*_*ark 1 postgresql docker docker-compose

我在访问从 docker-compose 文件创建的数据库时遇到问题。

鉴于以下撰写文件,我应该能够使用以下内容从 java 连接到它:

jdbc:postgresql://eprase:eprase@database:7000/eprase
Run Code Online (Sandbox Code Playgroud)

但是,连接被拒绝。我什至不能使用 PGAdmin 使用相同的细节来连接它来创建新服务器。

我已经进入数据库容器并运行 psql 命令来验证是否已根据 postgres Docker 文档创建了 eprase 用户和数据库,一切似乎都很好。我不知道问题是在数据库容器内还是我需要在撰写网络中更改的内容。

客户端和服务器服务在很大程度上可以忽略,服务器是基于 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:
Run Code Online (Sandbox Code Playgroud)

Kin*_*ang 5

PostgreSQL 数据库正在侦听容器端口5432。该7000:5432行将主机端口映射7000到容器端口5432。这允许您通过端口 7000 连接到数据库。但是,公共网络 ( api)上的服务应该通过容器端口相互通信。

因此,从客户端和服务器服务的容器的角度来看,连接字符串应该是:

jdbc:postgresql://eprase:eprase@database:5432/eprase
Run Code Online (Sandbox Code Playgroud)