docker 容器中 application.properties(或类似文件)的路径是什么?

What is the path for application.properties (or similar file) in docker container?

我正在 dockerizing springboot 应用程序(使用 PostgreSQL)。我想用我自己的 application.properties 覆盖 docker 容器中的 application.properties。 我的 docker-compose.yml 文件如下所示:

version: '2'
services:
  API:
    image: 'api-docker.jar'
    ports:
      - "8080:8080"
    depends_on:
      - PostgreSQL
    environment:
      - SPRING_DATASOURCE_URL=jdbc:postgresql://PostgreSQL:5432/postgres
      - SPRING_DATASOURCE_USERNAME=postgres
      - SPRING_DATASOURCE_PASSWORD=password
      - SPRING_JPA_HIBERNATE_DDL_AUTO=update

  PostgreSQL:
    image: postgres
    volumes:
      - C:/path/to/my/application.properties:/path/of/application.properties/in/container
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_PASSWORD=password
      - POSTGRES_USER=postgres
      - POSTGRES_DB=postgres

我这样做是为了用我的 application.properties 文件覆盖容器中的 application.properties,以便数据存储在 localhost

我尝试了 /opt/application.properties 路径,但没有成功。

你有两个解决方案:

1) 第一个解

使用环境变量

创建application.properties
mycustomproperties1: ${MY_CUSTOM_ENV1}
mycustomproperties2: ${MY_CUSTOM_ENV2}

我建议您创建不同的 application.properties(application-test、application-prod 等...)

2) 另一种解决方案

创建docker文件:

FROM debian:buster
RUN apt-get update --fix-missing && apt-get dist-upgrade -y
RUN apt install wget -y
RUN apt install apt-transport-https ca-certificates wget dirmngr gnupg software-properties-common -y
RUN wget -qO - https://adoptopenjdk.jfrog.io/adoptopenjdk/api/gpg/key/public | apt-key add -
RUN add-apt-repository --yes https://adoptopenjdk.jfrog.io/adoptopenjdk/deb/
RUN apt update
RUN apt install adoptopenjdk-8-hotspot -y

ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","-Dspring.config.location="file:///config/application.properties","/app.jar"]

或者在docker compose

中添加环境变量
SPRING_CONFIG_LOCATION=file:///config/application.properties

修改docker-compose:

version: '2'
services:
API:
  image: 'api-docker.jar'
  ports:
  - "8080:8080"
  depends_on:
  - PostgreSQL
  environment:
  - SPRING_DATASOURCE_URL=jdbc:postgresql://PostgreSQL:5432/postgres
  - SPRING_DATASOURCE_USERNAME=postgres
  - SPRING_DATASOURCE_PASSWORD=password
  - SPRING_JPA_HIBERNATE_DDL_AUTO=update
  - SPRING_CONFIG_LOCATION=file:///config/application.properties
  volumes:
  - C:/path/to/my/application.properties:/config/application.properties

万一有人遇到同样的问题,这里是解决方案。 我正在尝试使用我的本地主机数据库而不是 in-memory 数据库(将其存储在容器中)。这是我的 docker-compose.yml 配置

version: '2'
services:
  API:
    image: 'api-docker.jar' #(your jar file name)
    volumes:
      - path/to/new/application.properties:/config/env   
    ports:
      - "8080:8080"

您需要提供一个新的 application.properties 文件,其中包含用于将数据存储到本地数据库的配置(可以是您实际 application.properties 的副本)。该文件需要在容器的配置文件中覆盖,路径为/config/env(在yml文件中提到)