java 如何让Spring使用Docker容器中的application.yml文件?

nhhxz33t  于 2022-12-28  发布在  Java
关注(0)|答案(1)|浏览(202)

我正在创建一个简单的Java/Gradle/Spring应用程序。我正在对应用程序进行Docker化。当我在本地运行应用程序而不使用Docker时,它会正确使用我的application.yml文件中的值。但是,当我运行Docker映像时,它不会使用application.yml文件中的任何值。
在下面我的Docker文件中,你会看到我把application.yml文件复制到了docker映像中我的jar所在的目录中,另外,在入口点中,我正确地引用了application.yml文件(当我把这个文件路径修改为不正确的路径时,应用程序会在启动时中断)。
停靠文件:

FROM eclipse-temurin:17-jdk
EXPOSE 8080
RUN mkdir -p /app/
ADD build/libs/image-name-0.0.1-SNAPSHOT.jar /app/image-name.jar
ADD build/resources/main/application.yml /app/application.yml
ENTRYPOINT ["sh", "-c", "java -Djava.security.egd=file:/dev/./urandom -jar /app/image-name.jar --spring.config.location=file:/app/application.yml"]

下面是我的docker-compose.yml文件。我认为这并不重要,因为我只使用docker run ...命令就得到了相同的结果,但我想添加它作为上下文:

version: '2'

services:
  image-name:
    image: 'image-name:latest'
    container_name: image-name
    ports:
      - "8081:8080"
    build:
      context: .
    depends_on:
      - postgres_db
    environment:
      - SPRING_DATASOURCE_URL=jdbc:postgresql://db:5432/compose-postgres
      - SPRING_DATASOURCE_USERNAME=admin
      - SPRING_DATASOURCE_PASSWORD=password
      - SPRING_JPA_HIBERNATE_DDL_AUTO=update

  postgres_db:
    image: 'postgres:13.1-alpine'
    container_name: postgres_db
    environment:
      - POSTGRES_USER=admin # TODO: CHANGE THIS LATER
      - POSTGRES_PASSWORD=password # TODO: CHANGE THIS LATER

我已经添加了Spring Actuator依赖项,并使用application.yml公开了健康端点。但是,当我通过Docker映像运行此操作时,下面的日志丢失(但当我在本地运行而不使用Docker时,下面的日志存在)。当我点击/actuator/health端点时,我还得到了404:

2022-12-26T15:07:08.439-06:00  INFO 23289 --- [           main] o.s.b.a.e.web.EndpointLinksResolver      : Exposing 1 endpoint(s) beneath base path '/actuator'

你知道我做错了什么吗?我已经看了似乎每一个其他相关的堆栈溢出线程没有运气。

uujelgoq

uujelgoq1#

选择应该放在首位。

java [options] -jar jarfile [args ...]

在您的情况下应该是:

java -Dspring.config.location=/app/application.yml -jar /app/image-name.jar

参考文件

相关问题