Как выйти из docker exec после выхода контейнера?

Как мне изящно выйти из контейнера docker, к которому я подключился с помощью docker exec -ti, после того, как докер я подключил к выходам?

Если я выхожу из исходного контейнера, оболочка, которая запустила docker exec команда зависла, и единственный способ, который я могу найти, чтобы вернуться к ее оболочке, - это убить docker exec команда с другого терминала.

Есть ли более изящный способ?

Это происходит независимо от того, запускаю ли я контейнер с --rm или нет.

Я запускаю docker 19.03.12 под управлением bash 5.0.16 в gnome-terminal 3.26.3 в Ubuntu 20.04.

Чтобы отсоединить tty без выхода из оболочки, используйте escape-последовательность CTRL+P с последующим CTRL+Q. Более подробная информация здесь.

Дополнительная информация из этого источника:

docker run -t -i → может быть отсоединен с помощью Ctrl+P &amp ;amp; Ctrl+Q секвенирование и повторное подключение с помощью docker attach

docker run -i → не может быть отсоединен с помощью Ctrl+P &amp ;amp; Ctrl+Q последовательность; нарушит stdin

docker run → не может быть отсоединен с помощью Ctrl+P &amp ;amp; Ctrl+Q; может SIGKILL клиент; может повторно подключиться с помощью docker attach

Надеюсь, это поможет.

Вы сначала запускаете контейнер с отдельный режим, а не передний план:

docker run --name mynginx -p 80:80 -d nginx

Затем вы можете прикрепиться к нему с помощью docker exec:

docker exec -it mynginx /bin/sh

Имейте в виду, что если вы хотите прикрепиться к контейнеру для проверки, вы должны указать --interactive , -i и --tty , -t параметры, потому что ваш контейнер уже запускает ваш основной процесс в фоновом режиме с вашего предыдущего docker run -d команда.
Таким образом, когда вы закончите проверку своего контейнера, вы сможете изящно выйти из него с помощью ctrl+d или logout команда, когда вы выходите из обычной оболочки

@Khushal дал мне ответ... как бы. В моем случае, Ctrl+P &amp ;amp; Ctrl+Q по-прежнему не работал, даже когда звонил run с -t, но просто старый Ctrl+C сделал. Чтобы обеспечить некоторый контекст, я играю с контейнером Rancher docker, так что YMMV.

Подводя итог, создайте контейнер с:docker run -t -d --name=thingy ...

Прикрепите, как обычно, с помощью:docker attach thingy

Отсоединитесь с помощью старого доброго Ctrl+C.

Между прочим, -t, согласно документы, выделяет псевдо-TTY.

Этот вопрос был задан ранее, пожалуйста, обратитесь к: How do you attach and detach from Docker's process? - Stack Overflow

В моей собственной среде Debian, работающей под управлением 19.03.11, экземпляр exec немедленно завершает работу и возвращает мое приглашение командной строки, как только контейнер завершает работу. Можете ли вы предоставить какие-либо дополнительные сведения, чтобы воспроизвести вашу проблему?

@BMitch отредактировал вопрос, чтобы добавить флаги -ti; извините, что пропустил это!

Спасибо @user929169 - я не знал правильных терминов для использования. Я не могу закрыть это как дубликат, так как ответ находится на другом сайте. Опубликуйте это в качестве ответа, и вы получите очки.