Как передать 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