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

时间:2019-04-17 20:33:33

标签: postgresql spring-boot docker docker-compose

使用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

docker-compose

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

docker-compose

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的连接被拒绝。检查主机名和端口是否正确以及邮局主管正在接受TCP / IP连接。

我在做什么错了?

2 个答案:

答案 0 :(得分:2)

您会混淆一些端口:您的“ db”容器仅导出1个端口:5432。您在docker-compose中放置的6000是本地主机上的端口,您将该端口映射到该端口上的该容器(db) (5432)。

除非您要从本地主机连接(我想您不是),否则您甚至不应该为postgres容器使用端口映射。

如果要使用5432以外的其他端口,则需要扩展postgres Dockerfile并更改配置,以使postgres开始在其他端口上侦听。

希望这会有所帮助。

答案 1 :(得分:0)

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