У меня есть процесс в контейнере докеров, который должен регистрировать дамп потока (на stdout) при завершении работы. Однако когда docker stop
вызывается на нем, вывода не происходит.
Кажется, что либо процесс не получает сигнал TERM, либо выход отключается до завершения завершения работы.
Я использую только CMD
(нет ENTRYPOINT
) в моем Dockerfile:
CMD java ${MY_JAVA_OPTS} my-uberjar.jar
Как мне получить вывод при выключении?
Точка входа контейнера докеров - это оболочка, вызывающая этот CMD, потому что он находится в форма оболочки.
Однако эта форма вызова не передает сигналов.
Вам нужно вызвать процесс, используя exec
, что можно сделать либо с помощью форма exec:
CMD ["java", "-Doption=value", "my-uberjar.jar"]
или используя exec
явно:
CMD exec java ${MY_JAVA_OPTS} my-uberjar.jar
В результате оболочка заменяется запущенным процессом, который затем получает сигналы.
В форма exec не выполняет расширение оболочки (потому что оболочки нет), поэтому, если вам это нужно, вам придется обернуть вызов оболочки и exec
очередной раз:
CMD ["/bin/sh", "-c", "exec", "java", "${MY_JAVA_OPTS}", ...
или используйте форма оболочки с участием exec
как указано выше.