Как мне изящно выйти из контейнера 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.
Вы сначала запускаете контейнер с отдельный режим, а не передний план:
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; Ctrl+Q по-прежнему не работал, даже когда звонил run с -t, но просто старый Ctrl+C сделал. Чтобы обеспечить некоторый контекст, я играю с контейнером Rancher docker, так что YMMV.
Подводя итог, создайте контейнер с:docker run -t -d --name=thingy ...
Прикрепите, как обычно, с помощью:docker attach thingy
Отсоединитесь с помощью старого доброго Ctrl+C.
Между прочим, -t, согласно документы, выделяет псевдо-TTY.
В моей собственной среде Debian, работающей под управлением 19.03.11, экземпляр exec немедленно завершает работу и возвращает мое приглашение командной строки, как только контейнер завершает работу. Можете ли вы предоставить какие-либо дополнительные сведения, чтобы воспроизвести вашу проблему?
Спасибо @user929169 - я не знал правильных терминов для использования. Я не могу закрыть это как дубликат, так как ответ находится на другом сайте. Опубликуйте это в качестве ответа, и вы получите очки.