Вы запускаете свой контейнер без опций -it
(которые позволяют подключаться к его стандартному входу, как если бы вы находились в терминале), но ваша программа ожидает ввода при запуске («нажмите ввод ...»),Ваша программа, вероятно, ожидает ввода в stdin
и, вероятно, читает EOF (конец файла) при запуске, вызывая его завершение, что, в свою очередь, завершает ваш контейнер.
Если вы хотите запустить свой контейнер вФон, мне кажется, у вас есть два варианта:
1) Запустите ваш контейнер, используя docker run -it -p 9000:9000 <your_other_options> <your_image>
, а затем поместите его в фон, используя CTRL+P
, а затем CTRL+Q
.Вы увидите, что ваш контейнер все еще работает в docker ps
.Чтобы присоединиться к нему, вы можете просто использовать docker attach <your_container>
.Конечно, этот подход не будет применим, если вы хотите запустить свой контейнер, скажем, на сервере модульного тестирования, где вы не захотите вручную выполнять CTRL+P/Q
.
2) Изменить вашсервер, так что он может работать полностью в фоновом режиме, без участия пользователя.В этом случае способ прервать вашу программу - отправить ей сигнал SIGINT
.Это то, что обычно делает CTRL+C
, а также то, что docker stop <your_container>
сделает для вас.Возможно, вы захотите правильно обработать этот сигнал в своем коде Scala, чтобы вы могли выполнить некоторую очистку вместо внезапного сбоя.Это можно сделать, используя отключающий хук .Отключение происходит от JVM и не зависит от Scala.Вам следует позаботиться о ручной остановке любого потока / подпроцесса в вашем хуке shutdown.
Второй метод лучше всего подходит для IMO, но он также более сложный и, вероятно, излишний, если первый метод работает для вас.