Как получить доступ к переменным среды в банке сборки sbt?

У меня есть проект 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 и запускаю jar в docker-контейнере, поэтому команда запуска выглядит так:

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 доступом к переменным среды? Или, может быть, я могу передать эту переменную как аргумент java - тогда как получить к ней доступ из файла build.sbt?


person Vasily802    schedule 30.09.2017    source источник
comment
Вы когда-нибудь находили решение этой проблемы?   -  person Jeff Lewis    schedule 27.07.2018
comment
Я разместил ответ. Не могли бы вы, пожалуйста, дайте мне знать, если этот ответ сработал для вас. Или не стесняйтесь размещать свои собственные :)   -  person Vasily802    schedule 28.07.2018


Ответы (1)


Переместите команду запуска java в сценарий оболочки, который без проблем получит доступ к env vars:

  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
person Vasily802    schedule 28.07.2018
comment
Круто, спасибо за быстрый ответ! Я попробую это в течение следующих нескольких дней и посмотрю, сработает ли это для меня! - person Jeff Lewis; 28.07.2018
comment
На самом деле я изменил способ упаковки своего проекта, чтобы использовать пакет xerial и файл докера, и это решило мою проблему для меня. Я очень ценю, что вы нашли время, чтобы поставить это для меня, хотя! Если я вернусь к использованию сборки sbt позже, я обязательно попробую! - person Jeff Lewis; 15.08.2018