我有一个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,因此launch命令如下所示:
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文件中访问它?
答案 0 :(得分:1)
将Java启动命令移动到将无问题地访问env vars的shell脚本:
#!/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
ADD api_startup.sh /api_startup.sh
RUN chown jetty:jetty /api_startup.sh
CMD ["/api_startup.sh"]
docker run -it -p 80:80 -e MY_VAR_SEARCH_PORT=80 mydockerhubrepo/myimageid