2

我有一个包含 application.properties 文件的 jar 文件。我们可以在运行 docker 镜像时配置 IP 地址和端口号以及用户名和密码吗

属性文件位置

应用程序/bin/config/application.properties

以下是 application.properties

driverClassName = org.postgresql.Driver
url = jdbc:postgresql://localhost:5432/sakila
username = root
password = root
4

1 回答 1

1

入口点是秘密。

你有两个解决方案:

  • 设计图像以通过环境变量接收这些参数,并让 ENTRYPOINT 将它们注入其中App/bin/config/application.properties

  • 设计图像以收听目录。如果此目录包含*.properties文件,则 ENTRYPOINT 将收集这些文件并将它们合并为一个文件,并将内容附加App/bin/config/application.properties

两种解决方案都具有相同的 Dockerfile

From java:x

COPY jar ...
COPY myentrypoint /
ENTRYPOINT ["bash", "/myentrypoint"]

但不一样的ENTRYPOINT(myentrypoint)

解决方案 A - 入口点:

#!/bin/bash
# if the env var DB_URL is not empty
if [ ! -z "${DB_URL}" ]; then
  
   echo "url=${DB_URL}" >> App/bin/config/application.properties
fi
# do the same for other props
#...
exec call-the-main-entry-point-here $@

要从此解决方案创建容器:

 docker run -it -e DB_URL=jdbc:postgresql://localhost:5432/sakila myimage

解决方案 B - 入口点:

#!/bin/bash

# if /etc/java/props.d/ is a directory
if [ -d "/etc/java/props.d/" ]; then
   cat /etc/java/props.d/*.properties
   awk '{print $0}' /etc/java/props.d/*.properties >> App/bin/config/application.properties
fi

#...
exec call-the-main-entry-point-here $@

要从此解决方案创建容器:

 docker run -it -v ./folder-has-props-files:/etc/java/props.d myimage
于 2020-07-11T22:44:46.203 回答