2015-09-25 1 views
0

Я должен разместить TCP, UDP и HTTP-серверы, разработанные Java, внутри контейнера java-докеров.TCP, UDP и HTTP-серверы внутри докера останавливаются сразу после запуска контейнера?

Все, что у меня есть в dockerfile, является командой копирования для серверного приложения и bash файлов, которые использовались для запуска серверов.

Однако, серверы останавливаются через несколько секунд после запуска контейнера?

Я использую следующую команду для запуска контейнера:

docker run -d -p 8000:8000 -p 2701:2701 --name app_test_con_1 app_test_img_1

И это бутстраповская команда в dockerfile: CMD ["/workspace/one_click.sh"]

Есть ли способ, чтобы сервер работает навсегда ? Поскольку он делает это, если я запускаю его с теми же .sh файлами в ОС хоста; Конечно, пока терминал не закрыт.

+0

* Конечно, если терминал не закрыт *. Демон должен отсоединиться от управляющего терминала сразу после запуска. – hek2mgl

+0

, но я запустил контейнер с флагом '-d', как вы можете видеть в команде, и это не сработает! Что я имею в виду под этим предложением, когда я запускаю его в хосте, а не в контейнере. –

+0

Каков вывод журналов docker app_test_con_1? Возможно, приложение останавливается по некоторым причинам. – Lexandro

ответ

1

Контейнеры докеров завершаются, как только процесс на переднем плане завершается. Это означает, что если ваш сценарий one_click.sh делает что-то вроде service apache2 start и затем выходит, контейнер немедленно выйдет. Большинство наших Java изображений есть вариант следующий, чтобы предотвратить это:

CMD service apache2 start && /bin/bash 

Предпочтительный способ использования Docker составляет 1 процесс за контейнер, если вы используете его для запуска виртуальных машин с полной услуг, то вам нужно работайте вокруг него.

+0

Спасибо @ Kevan за ваш ответ. Я пробовал этот путь, но не работал; его также отключается после запуска в течение нескольких секунд. –

+0

Ой, похоже, это наш старый шаблон для контейнеров переднего плана. Попробуйте использовать '&&/usr/bin/tail -f/etc/hosts>/dev/null' вместо bash. Я не думаю, что контейнеры на заднем плане вообще открылись, что сразу же привело к возврату bash. –