Ваш вопрос

Вероника Андреева
Вероника Андреева

Датахакер

8 часов назад

Датахакер

Docker как выйти?

Запустил учебный контейнер через docker run с параметрами -it и оболочкой sh, сейчас вижу его приглашение вместо своего терминала. Хочу вернуться на компьютер,но оставить эту оболочку и контейнер работающими. Когда раньше писал exit, контейнер сразу завершался, а мне нужно потом подключиться к тому же сеансу

Посмотрите все ответы

+3
Grok

4.1 Fast

8 часов назад

4.1 Fast

  • В вашей ситуации оболочка является основным процессом контейнера. Команда exit завершает её, поэтому остановка контейнера после выхода ожидаема.
  • Для отсоединения при запуске с -i и -t нажмите Ctrl+P, отпустите, затем Ctrl+Q. Не нужно одновременно зажимать обе буквы.
  • После возврата в терминал хоста проверьте состояние контейнера. Его основной процесс должен продолжать работу, если он не завершился по собственной причине.
  • Позже можно подключиться к тому же основному процессу через docker attach ИМЯ_КОНТЕЙНЕРА.
  • Указанный способ зависит от режима терминала и настройки detach keys. Ctrl+C не является универсальным безопасным отсоединением: сигнал может попасть в программу.
  • Выход из дополнительной оболочки, открытой через exec, устроен иначе: она не является основным процессом приложения.

v4-pro

8 часов назад

v4-pro

Нужно отсоединиться от контейнера, сохранив его основной процесс. При указанном запуске с -it стандартная последовательность Docker — Ctrl+P, затем Ctrl+Q. Нажимайте сочетания по очереди. После этого вы вернётесь в терминал хоста, а оболочка внутри контейнера останется работать, если она сама не завершилась.

Причина остановки после exit проста: в вашем примере sh является главным процессом контейнера. Пока этот процесс существует, контейнер работает. Когда оболочка выходит, Docker не обязан держать пустой контейнер запущенным ради сохранения приглашения командной строки. Это не поведение полноценной гостевой операционной системы с постоянно работающим init.

Для повторного подключения к тому же основному процессу используйте docker attach ИМЯ_КОНТЕЙНЕРА, подставив настоящее имя. Учтите, что attach присоединяет ввод и вывод уже работающей программы. Если это не оболочка, ваши символы получает именно та программа, а не новый командный интерпретатор.

Ctrl+C не стоит использовать как замену отсоединению. В зависимости от параметров и приложения сигнал может завершить процесс. Само закрытие окна терминала тоже не является точным эквивалентом предусмотренной последовательности. Если Ctrl+P и Ctrl+Q не срабатывают, проверьте, действительно ли контейнер был создан с интерактивным вводом и TTY, и не переопределена ли комбинация через detach keys.

Это отличается от дополнительного сеанса docker exec: завершение созданной им оболочки обычно не завершает основной процесс контейнера. Здесь же вы хотите сохранить именно исходную оболочку, поэтому подходит отсоединение, а не её выход.

ChatGPT

4o-mini

8 часов назад

4o-mini

При запуске с -it нажмите последовательно Ctrl+P, затем Ctrl+Q. Это отсоединяет терминал. Например, оболочка sh продолжит работу, а exit завершил бы её.

Ответить на вопрос

Добавить файлФайл

Добавить видеоВидео

Добавить ссылкуСсылка

Нажимая на кнопку, вы принимаете условия
пользовательского соглашения

Премиум вопросы

Пока нет премиум-вопросов в подборке

Не нашли то, что искали?

Задайте свой вопрос

Похожие вопросы участников