docker springboot 仅通过 docker-compose 在 postgres 5432 上连接

Posted

技术标签:

【中文标题】docker springboot 仅通过 docker-compose 在 postgres 5432 上连接【英文标题】:docker springboot only connects on postgres 5432 via docker-compose 【发布时间】:2019-09-08 04:11:01 【问题描述】:

使用 docker 通过 docker-compose 将 springboot 连接到 postgres。在 postgres 上使用端口 5432 工作正常,如果我尝试其他端口失败

工作代码

春天

spring.datasource.url=jdbc:postgresql://db:5432/wwc
spring.datasource.username=wwc
spring.datasource.password=test
spring.datasource.driver-class-name=org.postgresql.Driver

码头工人撰写

version: '2.1'
services:
  db:
    container_name: db
    image: postgres:9.4
    ports:
      - 5432:5432
    volumes:
      - /tmp:/var/lib/postgresql
    environment:
      - POSTGRES_USER=wwc
      - POSTGRES_DB=wwc
      - POSTGRES_PASSWORD=test
  server:
    container_name: spring-boot-rest-server
    build:
      context: .
      dockerfile: Dockerfile.server
    ports:
      - 8080:8080
    logging:
      driver: json-file
    depends_on:
      - db

  web:
    container_name: nginx-web
    links:
      - "server:springboot"
    build:
      context: .
      dockerfile: Dockerfile.web
    ports:
      - 80:80
      - 8088:8088
    logging:
      driver: json-file
    depends_on:
      - server

**连接被拒绝代码**

春天

spring.datasource.url=jdbc:postgresql://db:6000/wwc
spring.datasource.username=wwc
spring.datasource.password=test
spring.datasource.driver-class-name=org.postgresql.Driver

码头工人撰写

version: '2.1'
services:
  db:
    container_name: db
    image: postgres:9.4
    ports:
      - 6000:5432
    volumes:
      - /tmp:/var/lib/postgresql
    environment:
      - POSTGRES_USER=wwc
      - POSTGRES_DB=wwc
      - POSTGRES_PASSWORD=test
  server:
    container_name: spring-boot-rest-server
    build:
      context: .
      dockerfile: Dockerfile.server
    ports:
      - 8080:8080
    logging:
      driver: json-file
    depends_on:
      - db

  web:
    container_name: nginx-web
    links:
      - "server:springboot"
    build:
      context: .
      dockerfile: Dockerfile.web
    ports:
      - 80:80
      - 8088:8088
    logging:
      driver: json-file
    depends_on:
      - server

错误:

spring-boot-rest-server | org.postgresql.util.PSQLException:与 db:6000 的连接被拒绝。检查主机名和端口是否正确,以及 postmaster 是否接受 TCP/IP 连接。

我做错了什么?

【问题讨论】:

【参考方案1】:

您对端口有点困惑:您的“db”容器仅导出 1 个端口:5432。您放入 docker-compose 中的 6000 是 localhost 上的端口,您映射到该端口上的该容器 (db) (5432)。

你甚至不应该使用 postgres 容器的端口映射,除非你想从 localhost 进行连接,我猜你不会。

如果您想使用 5432 以外的其他端口,您需要扩展 postgres Dockerfile 并更改配置,以便 postgres 开始侦听不同的端口。

希望这会有所帮助。

【讨论】:

【参考方案2】:

换句话说:在 docker-compose 中配置的端口映射与容器之间的连接方式无关。仅当某物/某人尝试从外部连接到 docker-compose 中的容器时,映射才相关。(就像从本地主机一样,正如@Mihai 所说。)

【讨论】:

以上是关于docker springboot 仅通过 docker-compose 在 postgres 5432 上连接的主要内容,如果未能解决你的问题,请参考以下文章

springboot集成docker实现自动化构建镜像说明

Docker实现SpringBoot项目的快速构建

Docker实现SpringBoot项目的快速构建

Docker实现SpringBoot项目的快速构建

Docker实现SpringBoot项目的快速构建

idea远程部署SpringBoot项目到Docker