【问题标题】:docker-compose cannot access to database portdocker-compose 无法访问数据库端口
【发布时间】:2019-04-04 17:02:06
【问题描述】:

dockerfile:

FROM anapsix/alpine-java:8_server-jre_unlimited
# copy application
COPY server.jar /opt/test/
COPY application.yml /opt/test/

# expose server ports
EXPOSE 8080 18080

# Run via dumb-init
WORKDIR /opt/test
ENTRYPOINT ["java"]
CMD ["-jar", "server.jar"]

docker-compose 文件:

services:
  backend-server:
    image: test.com/server:latest
    build: .
    depends_on:
      - database-server
    ports:
        - "127.0.0.1:8080:8080"
        - "127.0.0.1:18080:18080"
  database-server:
    image: postgres:9.6
    ports:
        - "127.0.0.1:5432:5432"
    environment:
      - POSTGRES_PASSWORD testtest

应用程序属性文件:

spring:
  datasource:
    # use default user/database created by PostgreSQL Docker image upon startup
    url: jdbc:postgresql://localhost/postgres
    username: postgres
    password: testtest
    driver-class-name: org.postgresql.Driver

当我运行 docker-compose up 时,它将创建一个数据库容器和一个连接到数据库容器的应用程序容器。

但是spring应用容器在启动过程中遇到了一些问题,报错:

org.postgresql.util.PSQLException:连接到 localhost:5432 被拒绝。检查主机名和端口是否正确,以及 postmaster 是否接受 TCP/IP 连接。

docker container ls表示数据库正在运行,直接运行spring应用就可以访问了。

a295bfd16e2c        postgres:9.6        "docker-entrypoint.s…"   About a minute ago   Up About a minute   127.0.0.1:5432->5432/tcp   server_database-server_1

那么我搞砸的问题是什么?

我找到的解决方案

services:
  backend-server:
    image: test.com/server:latest
    build: .
    environment:
      - SPRING_DATASOURCE_URL=jdbc:postgresql://database-server/postgres
    depends_on:
      - database-server
    ports:
        - 8080:8080
        - 18080:18080
  database-server:
    image: postgres:9.6
    ports:
        - 5432:5432
    environment:
      - POSTGRES_PASSWORD testtest

但我仍然无法从我的计算机的localhost:8080 访问应用程序,即使容器的日志显示

2018-10-31 15:02:40.881 信息 1 --- [主要] o.s.b.w.embedded.tomcat.TomcatWebServer :Tomcat 在端口上启动: 8080 (http) 与上下文路径 ''

2018-10-31 15:02:40.881 信息 1 --- [主要] com.test.server.Application : 启动应用程序 12.823 秒(JVM 运行 13.235)

【问题讨论】:

  • Postgres 不在您的 Spring 容器中,因此在 localhost 上无法访问。根据您是否有任何其他网络正在进行(我没有从撰写文件中看到,因为它看起来不完整?),请尝试使用url: jdbc:postgresql://database-server/postgres
  • Connection attempt failed: UnknownHostException

标签: docker spring-boot


【解决方案1】:

我建议如下修改你的 docker-compose.yml 文件并测试它

services:


backend-server:
    image: test.com/server:latest
    build: .
    depends_on:
      - database-server
    ports:
        - 8080:8080
        - 18080:18080
  database-server:
    image: postgres:9.6
    ports:
        - 5432:5432
    environment:
      - POSTGRES_PASSWORD testtest

【讨论】:

  • 69c8ec1a5783 postgres:9.6 "docker-entrypoint.s…" 11 minutes ago Up 11 minutes 0.0.0.0:5432->5432/tcp server_database-server_1 ip 从 127 变为 0,但在应用程序中仍然产生相同的错误。
  • 能否将spring DB url更新为url:jdbc:postgresql://localhost:5432/postgres
【解决方案2】:
services:
  backend-server:
    image: test.com/server:latest
    build: .
    depends_on:
      - database-server
    ports:
        - "127.0.0.1:8080:8080" #change to 8080:8080 without ""and by default set to local so you dont need add local ip
        - "127.0.0.1:18080:18080"  #change to 18080:18080 without ""and by default set to local so you dont need add local ip
  database-server:
    image: postgres:9.6
    ports:
        - "127.0.0.1:5432:5432" #change to 5432:5432 without ""and by default set to local so you dont need add local ip
    environment:
      - POSTGRES_PASSWORD testtest

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-30
    • 2020-05-07
    • 2020-09-05
    • 2015-01-12
    • 2019-06-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-07
    相关资源
    最近更新 更多