通过应用程序使用的jar文件传递环境变量

时间:2015-01-26 04:12:23

标签: jar environment-variables docker config

我目前正在尝试使用我的应用和数据库容器之间的docker链接。我已经检查了我的应用容器,当我将容器链接在一起时,环境变量会自动设置。

我想要做的是将我的配置文件打包到jar文件中,以接收环境变量并为其设置所需的值。有什么建议或帮助吗?

My environment variables in the scala app container to connect to MySQL database in another container

这就是我在jar文件中创建配置文件以连接到MySQL的方法

database { url="jdbc:mysql://${MYSQL_PORT_3306_TCP_ADDR}:${MYSQL_PORT_3306_TCP_PORT}/mydb" driver="com.mysql.jdbc.Driver"}

2 个答案:

答案 0 :(得分:2)

更新jar中的配置文件可能会非常过分。 它认为你有几个选择

  • 直接在您的程序中读取配置环境变量
    • 直接使用变量或在那里生成配置文件
  • 创建启动脚本(详细信息取决于您在docker中的guest虚拟机操作系统如何执行; sh / bash for linux等...)
    • 该脚本可以从环境生成新的配置文件,并将其放在jar之前的类路径中,以便程序看到它。

编辑:添加了示例

您可以在docker image上保存这种启动器脚本,在启动实际程序之前动态创建配置。

#!/bin/bash

# some default values for testing even without links to other container
MYSQL_PORT_3306_TCP_ADDR=${MYSQL_PORT_3306_TCP_ADDR:-127.0.0.1}
MYSQL_PORT_3306_TCP_PORT=${MYSQL_PORT_3306_TCP_PORT:-3306}

cat << EOF > /opt/yourprogram/dbconfig.conf
database { url="jdbc:mysql://${MYSQL_PORT_3306_TCP_ADDR}:${MYSQL_PORT_3306_TCP_PORT}/mydb" driver="com.mysql.jdbc.Driver"
}
EOF

scala -classpath /opt/yourprogram  YourProgram

答案 1 :(得分:1)

我做的是我在我的目录/tmp/restcore-1.0-SNAPSHOT/bin中写了sh文件,如下所示:

  #!/bin/bash echo "database{url="jdbc:mysql://"${MYSQL_PORT_3306_TCP_ADDR}":"${MYSQL_PORT_3306_TCP_PORT}"/mydb" driver="com.mysql.jdbc.Driver" }" > myconf.conf

  jar uf /tmp/restcore-SNAPSHOT/lib/com.organization.restcore-1.0-SNAPSHOT.jar /tmp/restcore-1.0-SNAPSHOT/bin/myconf.conf

在构建Dockerfile并在CMD中运行sh文件之后,我使用cat myconf.conf来检查配置文件,我将能够看到环境集。