docker - docker-compose无法访问数据库端口

标签 docker spring-boot

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时,它将创建一个数据库容器和一个连接到数据库容器的应用程序容器。

但是spring应用程序容器在启动过程中遇到了一些错误:

org.postgresql.util.PSQLException: Connection to localhost:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.


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 INFO 1 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''

2018-10-31 15:02:40.881 INFO 1 --- [ main] com.test.server.Application : Started Application in 12.823 seconds (JVM running for 13.235)

最佳答案

我建议按如下所示修改您的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

关于docker - docker-compose无法访问数据库端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53084886/

相关文章:

docker - Hyperledger Fabric错误-尝试联系2个对等方。最后一个错误是错误:在截止日期之前无法连接

java - 作为 Spring Boot 应用程序运行无法正常运行,而作为 Java 应用程序运行则无法正常运行

java - Firebase:无法验证 Firebase ID token 的签名

java - 如何反序列化 RestController 上嵌套的 Kotlin 对象?

windows - 在 PATH 变量中找不到可执行文件 'cmd.exe' Vagrant 尝试运行。这是一个错误。请验证此软件是否已安装

docker - 如何彻底阻止容器重启 Kubernetes

gradle - Artifactory Gradle 插件 - 无效的目标主机解析 URL

java - Spring Boot部署 war

docker - 开发和调试的最佳工作流程——最初部署在 docker 环境中

django - 带有Digitalocean的Docker容器上的“DisallowedHost”问题