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

标签 postgresql docker docker-compose

我在访问从 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 数据库正在监听容器端口 54327000:5432 行将主机端口 7000 映射到容器端口 5432。这允许您连接到端口 7000 上的数据库。但是,您在公共(public)网络 (api) 上的服务应该通过容器端口相互通信。

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

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

关于postgresql - 在 docker-compose 网络中访问 postgres 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54380488/

相关文章:

docker - 如何在自己的网络中运行Docker容器

docker - 如何在所有容器上执行 Docker 查询命令?

docker - python3-onbuild docker中的Java

sql - 在已插入非唯一值后在 PostgreSQL 表列上强制执行唯一性

docker - 尝试连接到 Redis 会返回 ECONNREFUSED

ruby-on-rails - 使用 Postgres 函数作为 ActiveRecord 模型

docker - 如何更改使用docker安装的火箭聊天服务器的默认端口?

Python psql\copy CSV 到远程服务器

postgresql - 从游标 PostgreSQL 获取行

python - 导入错误 : No module named 'django.contrib.gis.django'