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

时间:2019-01-26 16:47:18

标签: postgresql docker docker-compose

我无法访问通过docker-compose文件创建的数据库。

鉴于以下撰写文件,我应该能够使用类似以下内容的方法从Java连接到该文件:

jdbc:postgresql://eprase:eprase@database:7000/eprase

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

我已经进入数据库容器并运行psql命令来验证是否已根据PostgreSQL的PostgreSQL文档创建了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:

1 个答案:

答案 0 :(得分:4)

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

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

jdbc:postgresql://eprase:eprase@database:5432/eprase