繁体   English   中英

如何访问 sbt 程序集 jar 中的环境变量?

[英]How to access environment variables in sbt assembly jar?

我有一个 sbt 项目,可以在指定的端口上启动服务器。 以下是build.sbt相关摘录:

port in container.Configuration := sys.env.getOrElse("MY_VAR_SEARCH_PORT", 8080).toString.toInt

当我从 sbt 运行项目时, $MY_VAR_SEARCH_PORT被接收,一切都很好。

但是,对于 prod,我使用 sbt-assembly 并在 docker 容器中运行一个 jar,因此启动命令如下所示:

docker run -it -p 80:80 -e MY_VAR_SEARCH_PORT=80 mydockerhubrepo/myimageid /docker-entrypoint.sh java -Djava.io.tmpdir=/tmp/jetty -Drun.mode=production -Denv=prod -jar /usr/local/jetty/start.jar

我可以看到 var 被传递到容器,但它没有被 jar 接收,因为它在默认端口上启动了一个服务器。

让 sbt-assembly jar 访问环境变量的好方法是什么? 或者我可以将这个 var 作为 java 参数传递 - 那么,如何从 build.sbt 文件访问它?

将 java 启动命令移动到可以毫无问题地访问环境变量的 shell 脚本:

  1. 在您的项目中,添加 api_startup.sh:
    #!/bin/sh echo "API startup script running... with ENV=$ENV" java -Djava.io.tmpdir=/tmp/jetty -Drun.mode=production -Denv=$ENV -Drun.port=$MY_VAR_SEARCH_PORT -jar /usr/local/jetty/start.jar
  2. 在您的 Dockerfile 中,添加行:
    ADD api_startup.sh /api_startup.sh RUN chown jetty:jetty /api_startup.sh CMD ["/api_startup.sh"]
  3. 现在你可以像这样运行它:
    docker run -it -p 80:80 -e MY_VAR_SEARCH_PORT=80 mydockerhubrepo/myimageid

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM