2017-02-05 8 views
1

У меня есть приложение, которое использует плагин math для пристани "run-forked" goal, который мне нужен для доксеризации. Случается, что maven запускается, контейнер существует только около 10 секунд, а затем умирает, когда maven выходит после того, как он разворачивает дочерний процесс JVM.mvn пристань: разворот внутри контейнера докера?

Я исследовал множество вариантов. Один из вариантов, что я думал, что мог бы работать, чтобы установить «waitForChild» истина, а затем сделать что-то вроде этого:

ENTRYPOINT [ "/entrypoint.sh" ] 
CMD [ "jetty:run-forked > /tmp/log 2>&1" ] 

Но, хотя это держит Maven работает, изображение не строит, потому что Docker waits for a SIGTERM.

Если вам интересно, почему мне нужно использовать причал: разворот, это потому, что для этого кода требуется static linked library that needs a JVM.

Я готов бросить в полотенце, потому что это кажется невозможным ...

ответ

1

Я не совсем уверен, что ваш Java настроить, но ловкий трюк, который работает что-то вроде этого:

в вашем dockerfile, добавить пользовательский скрипт так:

COPY myscript.sh /bin/myscript.sh # Remember to make this executable! 

затем редактировать Entrypoint, чтобы отразить это:

ENTRYPOINT ["/bin/myscript.sh"] 

Ваш myscript.sh не мог смотреть немного что-то вроде этого:

#!/bin/bash 

# Run Java/mvn commands here 
... 
jetty:run-forked > /tmp/log 2>&1 

# Throw in a shell command that simply executes forever 
tail -f /dev/null 

Это обеспечит ваш контейнер продолжает работать даже после того, как ваш Причал/МВН материал порождает другой процесс и завершает работу, потому что он больше не PID 1 в контейнере, сценарий оболочки myscript.sh. Этот сценарий оболочки продолжает работать вечно из-за tail -f.

+0

Это работает! Спасибо. Определенно аккуратный трюк, и более того, он ясен и прост. –