java - 如何在Docker容器中部署Spring应用程序?

标签 java spring postgresql docker docker-compose

我对Docker-compose有问题。在我的机器上,我有一个Ubuntu。而且,当我将应用程序部署到容器中时,会看到该异常:

        at liquibase.integration.spring.SpringLiquibase.afterPropertiesSet(SpringLiquibase.java:307) ~[liquibase-core-3.6.3.jar!/:na]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1837) ~[spring-beans-5.1.6.RELEASE.jar!/:5.1.6.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1774) ~[spring-beans-5.1.6.RELEASE.jar!/:5.1.6.RELEASE]
        ... 26 common frames omitted
Caused by: org.postgresql.util.PSQLException: Connection to 0.0.0.0:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.
        at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:280) ~[postgresql-42.2.5.jar!/:42.2.5]
        at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:49) ~[postgresql-42.2.5.jar!/:42.2.5]
        at org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:195) ~[postgresql-42.2.5.jar!/:42.2.5]
        at org.postgresql.Driver.makeConnection(Driver.java:454) ~[postgresql-42.2.5.jar!/:42.2.5]
        at org.postgresql.Driver.connect(Driver.java:256) ~[postgresql-42.2.5.jar!/:42.2.5]
        at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:136) ~[HikariCP-3.2.0.jar!/:na]
        at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:369) ~[HikariCP-3.2.0.jar!/:na]
        at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:198) ~[HikariCP-3.2.0.jar!/:na]
        at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:467) ~[HikariCP-3.2.0.jar!/:na]
        at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:541) ~[HikariCP-3.2.0.jar!/:na]
        at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:115) ~[HikariCP-3.2.0.jar!/:na]
        at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) ~[HikariCP-3.2.0.jar!/:na]
        at liquibase.integration.spring.SpringLiquibase.afterPropertiesSet(SpringLiquibase.java:302) ~[liquibase-core-3.6.3.jar!/:na]
        ... 28 common frames omitted
Caused by: java.net.ConnectException: Connection refused (Connection refused)
        at java.base/java.net.PlainSocketImpl.socketConnect(Native Method) ~[na:na]
        at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:399) ~[na:na]
        at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:240) ~[na:na]
        at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:224) ~[na:na]
        at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:403) ~[na:na]
        at java.base/java.net.Socket.connect(Socket.java:591) ~[na:na]
        at org.postgresql.core.PGStream.<init>(PGStream.java:70) ~[postgresql-42.2.5.jar!/:42.2.5]
        at org.postgresql.core.v3.ConnectionFactoryImpl.tryConnect(ConnectionFactoryImpl.java:91) ~[postgresql-42.2.5.jar!/:42.2.5]
        at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:192) ~[postgresql-42.2.5.jar!/:42.2.5]
        ... 40 common frames omitted


我有PostgreSQL的配置:

# "local" is for Unix domain socket connections only
local   all         all                               trust

# IPv4 local connections:
host    all         all         127.0.0.1/32          trust
host    all         all         100.200.300.50/32       trust

该选项设置为“listen_addresses ='localhost'”;

Docker-compose配置:
version: '3'
services:

  web:
service
    image: webserviceimage
    ports:
      - 8080:8080 
    depends_on:
      - db 
      - redis
    environment:
      POSTGRES_URL:
      POSTGRES_USER:
      POSTGRES_PASSWORD:

  redis:
    image: "redis:alpine"
    restart: unless-stopped
    environment:
      REDIS_URL: redis:6379
  db:
    image: postgres
    ports:
      - 5432:5432
    environment:
      POSTGRES_PASSWORD:
      POSTGRES_USER:

我该如何解决?

最佳答案

步骤:1创建Dockerfile

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

步骤:2运行命令以创建docker文件
docker build -t webapp:latest -f Dockerfile .

步骤:3将docker镜像添加到docker-compose
version: '3'
services:
  web:
service
    image: webapp:latest
    ports:
      - 8080:8080 
    depends_on:
      - db 
      - redis
    environment:
      POSTGRES_URL:
      POSTGRES_USER:
      POSTGRES_PASSWORD:

  redis:
    image: "redis:alpine"
    restart: unless-stopped
    environment:
      REDIS_URL: redis:6379
  db:
    image: postgres
    ports:
      - 5432:5432
    environment:
      POSTGRES_PASSWORD:
      POSTGRES_USER:

注意: Web应用程序环境变量用户进入application.properties文件,例如

spring.datasource.url = $ {POSTGRES_URL}:$ {POSTGRES_PORT} /“nameofDB”

关于java - 如何在Docker容器中部署Spring应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57892735/

相关文章:

java - SchemaCompiler bind() 返回 null

java - 如何在程序中从命令行使用数学运算符?

java - 解析 ArrayList 中的 ArrayList 不起作用。

java - Spring-AMQP 事务性发布无异常

java - 通信链路故障 最后发送到服务器的数据包是在 4 毫秒前

java - 与常规应用程序的测试类冲突

java - 在应用程序中存储 ip 地址的最佳方法是什么?

sql - 获取聚合值

python - Django 缓存导致数据库中出现重复键错误?

java - 使用批量数据设计独立于数据源的应用程序