我正在尝试将 Docker 容器内的 SpringMVC 应用程序部署到 tomcat8 之上。
我的问题是这个 SpringMVC 应用程序使用以下代码接收参数
String username = System.getProperty("db.username");
String password = System.getProperty("db.password");
我正在使用以下命令运行 Docker 容器
docker run -e "db.username=root" -e "db.password=123" -v /home/ubuntu/code:/usr/local/tomcat/webapps -i -t -p 80:8080 tomcat
它启动 tomcat 容器并尝试部署应用程序,但它不起作用并抛出应用程序特定的错误用户名为空且密码为空。
System.getProperty
无法接收已传递的environment varaibles
。
重要的:请注意,我无法更改代码,我只能修改与docker相关的东西。
我认为应该有一种方法将传递的环境变量转换为 Java 属性(为了让 System.getProperties 正常工作)
答案1
我使用以下命令解决了我的问题,但我仍然会等待更好的答案来接受。
docker run -v /home/ubuntu/code:/usr/local/tomcat/webapps -e JAVA_OPTS="-Ddb.username=root -Ddb.password=abc123" -it -p 80:8080 tomcat
在上面的命令中,我尝试运行一个 tomcat 容器,我已将主机目录挂载到容器的 tomcat webapps 目录中。
然后我传递一个环境变量JAVA_OPTS
,该变量将设置 Java 属性,我将使用 Java 代码读取这些属性System.getProperty("db.username")