Как передать Java_opts перед исполняемым файлом в точку входа в dockerfile?

Я запускаю скрипт Scala с аммонитом. Мне нужно передать JAVA_OPTS, чтобы ограничить память, потребляемую аммонитом. Согласно документации по аммониту, я могу сделать это, выполнив
JAVA_OPTS='-Xmx<limit>' amm <scala script>

Теперь я хочу запустить этот скрипт в контейнере Docker, что я делаю так:

FROM <open jdk image>
WORKDIR /opt/docker
ADD scm-source.json /
ADD --chown=daemon:daemon deps/amm /opt/docker
RUN mkdir amm_home && chown daemon:daemon amm_home
RUN mkdir data && chown daemon:daemon data
ADD --chown=daemon:daemon UserPrefExporter.sc /opt/docker
USER daemon
ENTRYPOINT ["./amm", "-h", "amm_home", "UserPrefExporter.sc"]

Это работает нормально и запускает скрипт. Проблема заключается в передаче JAVA_OPTS в amm.
ENTRYPOINT требует, чтобы первым параметром был исполняемый файл, но я хочу иметь JAVA_OPTS до amm.

Как этого добиться?

1 ответ

Решение

Вы можете объявить переменные среды с ENV:

...
ADD --chown=daemon:daemon UserPrefExporter.sc /opt/docker
USER daemon
ENV JAVA_OPTS="-Xmx<limit>"
ENTRYPOINT ["./amm", "-h", "amm_home", "UserPrefExporter.sc"]

В этом сообщении предлагается использовать явноеexec в ENTRYPOINT:

ENTRYPOINT exec java $JAVA_OPTS
Другие вопросы по тегам