Я пытаюсь закрепить приложение графического интерфейса и добился определенных успехов. Если я создам файл докеров в изображении, а затем выполните команду docker run --name testcontainer testimage
, похоже, что процесс начинается, но внезапно останавливается. Затем я проверяю контейнер с помощью docker ps
, чтобы подтвердить, что контейнеры не работают. Затем я проверяю docker ps -a
и вижу, что он вышел со статусом exit(0)
. Затем, если я запустил команду docker start testcontainer
, она снова запустит команду ENTRYPOINT
, но на этот раз она сможет продолжить, и появится графический интерфейс.Выход контейнера докера (0) при использовании команды запуска докеров, но работает с командой запуска докера
Мое лучшее предположение заключается в том, что я думаю, что когда я запускаю команду docker run
, процесс начинается, но может быть раздвоен в фоновый процесс, в результате чего контейнер выйдет с тех пор, как завершился процесс переднего плана. Хотя это может быть далеко, потому что вы думаете, что команда docker start
приведет к такому же результату. Я думал о попытке заставить процесс остаться на переднем плане, но не знаю, как это сделать. Какие-либо предложения?
ОБНОВЛЕНИЕ: Я редактировал свой файл Docker для использования supervisord для управления запуском приложения GUI. Теперь моя команда запуска docker запустит супервизор, который запустит мое графическое приложение, и оно будет работать. Некоторые вещи, чтобы отметить об этом в том, что руководитель показывает:
INFO spawned: myguiapp with pid 7
INFO success: myguiapp entered RUNNING state
INFO: exited: myguiapp (exit status 0; expected)
супервизора и контейнер все еще работают в этой точке, которая, кажется, что основной процесс стартует дочерний процесс. Поскольку супервизор все еще работает, мой контейнер остается, и приложение GUI появляется, и я могу его использовать. Когда я закрываю GUI, отчеты супервизора:
CRIT reaped unknown pid 93
Супервизор остается включенным, в результате чего контейнер НЕ закрывается. Поэтому мне нужно CTRL-C убить супервизора. Я бы предпочел не использовать супервизора, но если мне это нужно, я бы хотел, чтобы супервизор был изящно закрыт, когда заканчивается этот дочерний процесс. Если бы я мог выяснить, как заставить мой контейнер или супервизор отслеживать дочерние процессы основного процесса, я думаю, что это будет разрешено.
как делает ваш dockerfile и начать команду выглядеть? если ваша команда запуска завершена, ваши контейнеры тоже выходят. Поэтому начало вашего процесса на переднем плане звучит как хорошая идея. – christian
Извините, я не понимаю, что вы имеете в виду. Моя команда запуска докера работает нормально после выхода команды запуска. моя команда ENTRYPOINT - это только путь CLI к исполняемому файлу для приложения GUI, которое я докетирую. –