Как выйти из контейнера Docker 1 мин для чтения


Добавить в избранное
Главное меню » Статьи » Как выйти из контейнера Docker
Как вы выходите из Docker?
Предположим, вы запускаете Docker-контейнер в интерактивном режиме, например так:
docker run -it ubuntu bash
Таким образом, вы получаете интерактивную оболочку и сразу же входите в ОС, работающую как контейнер.
Чтобы выйти из этого запущенного контейнера, вы можете использовать ctrl + c, ctrl + d или ввести exit в терминале.
Здесь есть одна проблема. Если вы выйдете из контейнера таким образом, ваш контейнер также остановится.
andreyex@nuc:~$ docker run -it ubuntu bash root@1385a55c8c7a:/# ls bin dev home lib64 mnt proc run srv tmp var boot etc lib media opt root sbin sys usr root@1385a55c8c7a:/# exit exit andreyex@nuc:~$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Как вы можете видеть на выводе выше, команда docker ps не показывает запущенные контейнеры.
Выход из контейнера Docker без остановки (отсоединение контейнера)
Здесь вы можете отсоединить контейнер, нажав ctrl + p и ctrl + q один за другим . Мы знаем, что это странное сочетание клавиш для пользователей Linux, но это то, как вы можете сделать это легко.
При отсоединении, ваш контейнер будет продолжать работать, даже если вы выйдете из контейнера. Ваш сеанс интерактивного докера теперь находится в режиме демона.
Вы можете проверить это с помощью команды docker ps, чтобы увидеть ее в списке запущенных контейнеров.
Когда вы захотите использовать его снова, вы можете снова прикрепить контейнер.
Совет: по возможности запускайте контейнер в режиме демона
Мы всегда предпочитаем запускать контейнеры в режиме демона, например так:
docker run -it -d docker_image_name bash
Таким образом, контейнер запускается и работает в фоновом режиме. Флаг i означает интерактивный, а флаг t означает tty. В общем, это дает вам интерактивную оболочку, которая запускает bash, но она не доступна сразу.
Читать Как создать собственный образ Docker с помощью Dockerfile
Вы можете ввести работающий контейнер следующим образом:
docker exec -it container_id bash
Надеюсь, этот быстрый совет для Docker пригодился вам. Следите за новыми советами по Docker.
Если у вас есть какие-либо вопросы или предложения, пожалуйста, не стесняйтесь спрашивать в разделе комментариев.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Команды Docker по работе с контейнерами

Например, мы запускаем контейнер с Python с доступом к терминалу, команда будет такой: docker run -ti python:latest . Если не указать -ti , то выйти из терминала Python будет очень затруднительно.
Просмотреть список запущенных контейнеров можно командой docker ps . Однако в таком виде команда вернёт список только запущенных контейнеров, чтобы вывести список всех контейнеров, в том числе и остановленных, нужно указать ключ -a . Еще один полезный ключ для отображения списка контейнеров: -q . Он выводит только ID контейнеров.
Остановить контейнер можно командой docker stop имя/id контейнера , а перезагрузить — docker restart имя/id контейнера .
Для удаления контейнера применяется команда docker rm имя/id контейнера . Если нужно удалить все контейнеры можно применить связку команд: docker rm $(docker ps -qa) .
Удалить все не связанные с контейнерами ресурсы (образы, контейнеры, тома и сети) можно командой docker system prune . Если требуется удалить все остановленные контейнеры и неиспользуемые образы можно воспользоваться командой docker system prune -a .
Если вы интересуетесь Docker и контейнеризацией в целом, вам могут быть интересны следующие материалы:

История контейнеризации
Краткая история контейнеризации и разбор конкретных технологий: chroot, jail, namespaces и cgroups.

Введение в Docker
Разбираемся в том, что такое Docker, из каких компонентов состоит и какие технологии контейнеризации использует.
Поделиться в соцсетях:
Средняя оценка: 5,0, всего оценок: 2 Спасибо за Вашу оценку! К сожалению, проголосовать не получилось. Попробуйте позже
выйти из докер-контейнера без остановки
Чтобы выйти из оболочки bash для контейнера докеров. Просто введите exit в командной строке или нажмите Ctrl + D, как обычно.
Как выйти из контейнера, не завершая его основной процесс?
TL;DR: нажмите Ctrl+C, а затем Ctrl+D. Это означает, что нужно удерживать нажатой клавишу Ctrl, ввести ac, а затем отпустить клавишу Ctrl. Затем повторите этот шаг с контролем и буквой d. Чтобы завершить процесс, не являющийся оболочкой, нажмите одновременно клавиши Control и C. После этого вы сможете выйти из оболочки, а возможно, контейнер уже вышел.
Как запустить контейнер, не выходя из него?
Рекомендуется использовать -d, а не запускать команду docker run -i -t image your-command, поскольку она позволяет вам выполнять контейнер только с одной командой и устраняет необходимость отключения терминала контейнера с помощью нажав Ctrl+P+Q.
Как поддерживать работоспособность моего контейнера?
Команда Dockerfile для поддержания активного состояния контейнера Способ 1. Вы можете использовать параметр docker -t (псевдо-tty), чтобы контейнер продолжал работать. Способ 2: вы можете запустить контейнер напрямую, передав команду tail через аргументы, как показано ниже. Метод 3 — это еще один вариант, который включает в себя выполнение инструкции сна, пока таймер не достигнет бесконечности.

выйти из докер-контейнера без остановки
Как остановить докер от выхода?
Ваш процесс оболочки завершится, если к нему не подключен терминал, и в результате контейнер также завершится. Вы сможете избежать такого поведения, включив опцию —interactive —tty (или просто -it) в используемую вами команду запуска docker. Это позволит вам писать команды непосредственно в оболочке.
Что такое отсоединенный режим в докере?
Контейнеры Docker также могут работать в автономном режиме, на что указывает опция —detach или -d и указывает, что они работают независимо от вашего терминала. Он не принимает ввод и не отображает вывод любого типа.
Что такое докер режима TTY?
Docker можно поручить создать сеанс внутреннего виртуального терминала, передав программе переключатель -t (или -tty). Обычно это используется в сочетании с параметром -i (или —interactive), который гарантирует, что STDIN остается открытым, даже когда программа выполняется в автономном режиме (подробнее об этом позже).

выйти из докер-контейнера без остановки
Как мне попасть в консоль докера?
Контейнер Docker, доступ к доступным параметрам Выполнение следующей команды позволит вам получить идентификатор контейнера: docker ps. Возврат вывода аналогичен приведенному ниже: СЛЕДУЮЩИЕ НАЗВАНИЯ ИДЕНТИФИКАЦИОННЫХ ИЗОБРАЖЕНИЙ КОНТЕЙНЕРА: Выполнение следующей команды предоставит вам доступ к контейнеру Docker: docker exec -it id контейнера> /bin/bash это команда, которую вам нужно запустить. Если значение идентификатора контейнера равно .
Как запустить запущенный докер-контейнер?
Чтобы закрыть его, я использовал сочетание клавиш Ctrl + D…. Эта команда выведет список всех докеров, и вам нужно будет записать идентификатор контейнера докера, который вы хотите перезапустить: docker ps -a. Начните процесс запуска вашего контейнера, используя идентификатор контейнера: docker start container id> — это команда. Объединитесь и активируйте свой контейнер: docker прикрепите «идентификатор контейнера» в командной строке.
Как долго будет работать докер-контейнер?
1. Обзор. В этом учебном руководстве мы рассмотрим множество способов, с помощью которых контейнеры Docker могут поддерживаться в рабочем состоянии на постоянной основе. Контейнеры будут работать только до тех пор, пока их команда по умолчанию выполняется по умолчанию; однако часто используется запуск контейнеров на неопределенный срок в целях отладки и устранения неполадок.
Как мне попасть в консоль докера?
Контейнер Docker, доступ к доступным параметрам Выполнение следующей команды позволит вам получить идентификатор контейнера: docker ps. Возврат вывода аналогичен приведенному ниже: СЛЕДУЮЩИЕ НАЗВАНИЯ ИДЕНТИФИКАЦИОННЫХ ИЗОБРАЖЕНИЙ КОНТЕЙНЕРА: Выполнение следующей команды предоставит вам доступ к контейнеру Docker: docker exec -it id контейнера> /bin/bash это команда, которую вам нужно запустить. Если значение идентификатора контейнера равно .

выйти из докер-контейнера без остановки
Как запустить запущенный докер-контейнер?
Чтобы закрыть его, я использовал сочетание клавиш Ctrl + D…. Эта команда выведет список всех докеров, и вам нужно будет записать идентификатор контейнера докера, который вы хотите перезапустить: docker ps -a. Начните процесс запуска вашего контейнера, используя идентификатор контейнера: docker start container id> — это команда. Объединитесь и активируйте свой контейнер: docker прикрепите «идентификатор контейнера» в командной строке.
Docker — Полный курс Docker Для Начинающих [3 ЧАСА]
docker info — Информация обо всём в установленном Docker
docker history — История образа
docker tag — Дать тег образу локально или в registry
docker login — Залогиниться в registry
docker search — Поиск образа в registry
docker pull — Загрузить образ из Registry себе на хост
docker push — Отправить локальный образ в registry
Управления контейнерами
docker ps -а — Посмотреть все контейнеры
docker start container-name — Запустить контейнер
docker run container-name — создает новый контейнер и сразу включает его. (подробнее отдельно)
docker kill/stop container-name — Убить (SIGKILL) /Остановить (SIGTERM) контейнер
docker logs —tail 100 container-name — Вывести логи контейнера, последние 100 строк
docker inspect container-name — Вся инфа о контейнере + IP
docker rm container-name — Удалить контейнер (поле каждой сборки Dockerfile)
docker rm -f $(docker ps -aq) — Удалить все запущенные и остановленные контейнеры
docker events container-name
docker port container-name — Показать публичный порт контейнера
docker top container-name — Отобразить процессы в контейнере
docker stats container-name — Статистика использования ресурсов в контейнере
docker diff container-name — Изменения в ФС контейнера
docker build -t my_app . — Билд контейнера в текущей папке, Скачивает все слои для запуска образа
docker images / docker image ls — Показать все образы в системе
docker image rm / docker rmi image — Удалить image
docker commit lepkov/debian11slim:version3- Создает образ из контейнера
docker insert URL — вставляет файл из URL в контейнер
docker save -o backup.tar — Сохранить образ в backup.tar в STDOUT с тегами, версиями, слоями
docker load — Загрузить образ в .tar в STDIN с тегами, версиями, слоями
docker import — Создать образ из .tar
docker image history —no-trunc — Посмотреть историю слоёв образа
docker system prune -f — Удалит все, кроме используемого (лучше не использовать на проде, ещё кстати из-за старого кеша может собираться cтарая версия контейнера)
Подробнее «docker run»
Синтаксис следующий: docker run [опции] название образа [команды][аргументы].
docker run -d -p 80:80 -p 22:22 debian:11.1-slim sleep infinity (—rm удалит после закрытия контейнера, —restart unless-stopped добавит автозапуск контейнера) — Запуск контейнера интерактивно или как демона/detached (-d), Порты: слева хостовая система, справа в контейнере, пробрасывается сразу 2 порта 80 и 22, используется легкий образ Debian 11 и команда бесконечный сон
docker update —restart unless-stopped redis — добавит к контейнеру правило перезапускаться при закрытии, за исключением команды стоп, автозапуск по-сути
docker exec -it container-name /bin/bash (ash для alpine) — Интерактивно подключиться к контейнеру для управления, exit чтобы выйти
docker attach container-name — Подключиться к контейнеру чтоб мониторить ошибки логи в реалтайме
Управления разделами (Volumes)
docker cp file :/ — Скопировать в корень контейнера file
docker cp :/file . — Скопировать file из корня контейнера в текущую директорию командной строки
docker volume create todo-db — Создать volume для постоянного хранения файлов
docker run -dp 3000:3000 —name=dev -v todo-db:/etc/todos container-name — Добавить named volumу todo-db к контейнеру (они ok когда мы не заморачиваемся где конкретно хранить данные)
docker run -dp 3000:3000 —name=dev —mount source=todo-db,target=/etc/todos container-name — тоже самое что команда сверху
docker volume ls — Отобразить список всех volume’ов
docker volume inspect — Инспекция volume’ов
docker volume rm — Удалить volume
Управления сетью (Network)
docker network create todo-app — Создать сеть
docker network rm — Удалить сеть
docker network ls — Отразить все сеть
docker network inspect — Вся информация о сети
docker network connect — Соединиться с сетью
docker network disconnect — Отсоединиться от сети
Пример 1: Hello world
Настало время запустить ваш первый контейнер:
docker run ubuntu /bin/echo 'Hello world'
Unable to find image 'ubuntu:latest' locally latest: Pulling from library/ubuntu d54efb8db41d: Pull complete f8b845f45a87: Pull complete e8db7bf7c39f: Pull complete 9654c40e9079: Pull complete 6d9ef359eaaa: Pull complete Digest: sha256:dd7808d8792c9841d0b460122f1acf0a2dd1f56404f8d1e56298048885e45535 Status: Downloaded newer image for ubuntu:latest Hello world
docker run — команда, запускающая контейнер.
ubuntu — образ, который вы запускаете, например, образ ОС Ubuntu. Когда вы определяете его, Docker начинает поиск на Docker-хосте. Если образ не существует локально, тогда он будет вытянут из общественного реестра — Docker Hub.
/bin/echo ‘Hello world’ — команда, которая будет запущена внутри нового контейнера. Данный контейнер просто выведет «Hello world» и остановит выполнение.
Давайте попробуем создать интерактивную оболочку внутри Docker-контейнера:
docker run -i -t –rm ubuntu /bin/bash
— t — флаг, добавляющий псевдотерминал внутри нового контейнера.
-i — флаг, который позволяет установить интерактивное соединение, взяв стандартный ввод (STDIN) контейнера.
-rm — флаг, автоматически удаляющий контейнер после завершения процесса. По умолчанию контейнеры не удаляются. Этот контейнер существует, пока установлена текущая сессия оболочки, и уничтожается, когда мы покидаем сессию (например, SSH-сессию с удаленным сервером).
Если вы хотите оставить контейнер работающим после завершения сессии, превратите его в демон-процесс:
docker run –name daemon ubuntu /bin/sh —c «while true; do echo hello world; sleep 1; done»
—name daemon — устанавливает имя демона для нового контейнера. Если вы не определите имя, то Docker сгенерирует и присвоит его автоматически.
-d — флаг запускает контейнер в фоновом режиме (демонизирует его).
Давайте взглянем, какие контейнеры у нас есть на текущий момент:
docker ps -a
Вывод консоли:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1fc8cee64ec2 ubuntu "/bin/sh -c 'while. " 32 seconds ago Up 30 seconds daemon c006f1a02edf ubuntu "/bin/echo 'Hello . " About a minute ago Exited (0) About a minute ago gifted_nobel
docker ps — команда для вывода списка контейнеров.
-a — флаг, который показывает все контейнеры (без этого флага ps выведет только работающие контейнеры).
Команда ps показала, что у нас всего два контейнера:
gifted_nobel (имя для этого контейнера сгенерировано автоматически, оно будет другим на вашем компьютере) — это первый контейнер, который мы создали, выводит один раз «Hello world».
daemon — это третий контейнер, который мы создали, работает как фоновый процесс.
Замечание : здесь нет второго контейнера (с интерактивной оболочкой), потому что мы установили флаг —rm . Как следствие, этот контейнер автоматически удалился сразу после выполнения.
Давайте проверим логи и посмотрим, что фоновый контейнер делает прямо сейчас:
docker logs -f daemon
Вывод консоли:
. . . hello world hello world hello world
docker logs — объединяет логи контейнера.
-f — флаг для слежения за выводом логов (работает так же, как tail -f ).
Теперь остановим фоновый контейнер:
docker stop daemon
Удостоверимся, что контейнер остановился:
docker ps -a
Вывод консоли:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1fc8cee64ec2 ubuntu "/bin/sh -c 'while. " 5 minutes ago Exited (137) 5 seconds ago daemon c006f1a02edf ubuntu "/bin/echo 'Hello . " 6 minutes ago Exited (0) 6 minutes ago gifted_nobel
Контейнер остановился. Мы можем запустить его заново:
docker start daemon
Удостоверимся, что он работает:
docker ps -a
Вывод консоли:
ONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1fc8cee64ec2 ubuntu "/bin/sh -c 'while. " 5 minutes ago Up 3 seconds daemon c006f1a02edf ubuntu "/bin/echo 'Hello . " 6 minutes ago Exited (0) 7 minutes ago gifted_nobel
Теперь остановим его опять и удалим все контейнеры вручную:
docker stop daemon docker rm your first container name> docker rm daemon
Чтобы удалить все контейнеры, мы можем использовать следующую команду:
docker rm -f $(docker ps -aq)
docker rm — команда для удаления контейнера.
-f — флаг для rm , который останавливает контейнер, если он работает (принудительное удаление).
-q — флаг для ps , который выводит только ID контейнеров.
Пример 2: Nginx
Настало время создать и запустить более полезный контейнер типа Nginx.
Сменим директорию на examples/nginx :
docker run -d --name test-nginx -p 80:80 -v $(pwd):/usr/share/nginx/html:ro nginx:latest
Unable to find image 'nginx:latest' locally latest: Pulling from library/nginx 693502eb7dfb: Pull complete 6decb850d2bc: Pull complete c3e19f087ed6: Pull complete Digest: sha256:52a189e49c0c797cfc5cbfe578c68c225d160fb13a42954144b29af3fe4fe335 Status: Downloaded newer image for nginx:latest 436a602273b0ca687c61cc843ab28163c720a1810b09005a36ea06f005b0c971
-p — преобразование портов HOST PORT:CONTAINER PORT .
-v — монтирование тома HOST DIRECTORY:CONTAINER DIRECTORY .
Важно : команда run принимает только абсолютные пути. В нашем примере мы использовали $(pwd) , чтобы установить абсолютный путь текущей директории.
Теперь вы можете открыть localhost в вашем браузере.
Или можно изменить /example/nginx/index.html (который смонтирован как том в /usr/share/nginx/html внутри контейнера) и обновить страницу.
Получим информацию о контейнере test-nginx :
docker inspect test-nginx
Эта команда показывает широкую системную информацию об установке Docker. Эта информация включает в себя версию ядра, количество контейнеров и образов, открытые порты, смонтированные тома и так далее.
Пример 3: написание Dockerfile
Чтобы создать Docker-образ, вам необходимо создать Dockerfile. Это просто текстовый файл с инструкциями и аргументами. Вот описание инструкций, которые мы будем использовать в нашем следующем примере:
FROM — устанавливает базовый образ.
RUN — выполняет команду в контейнере.
ENV — устанавливает переменную окружения.
WORKDIR — устанавливает рабочую директорию.
VOLUME — создает точку монтирования для тома.
CMD — устанавливает исполняемый файл для контейнера.
Вы можете просмотреть справку по Dockerfile , чтобы узнать больше подробностей.
Теперь создадим образ, который будет получать содержимое сайта с помощью curl и записывать его в текстовый файл. Нам надо передать URL сайта через переменную окружения SITE_URL . Результирующий файл будет помещен в директорию, смонтированную в качестве тома:
FROM ubuntu:latest RUN apt-get update RUN apt-get install --no-install-recommends --no-install-suggests -y curl ENV SITE_URL https://google.com/ WORKDIR /data VOLUME /data CMD sh -c "curl -L $SITE_URL > /data/results"
Dockerfile готов. Теперь настало время создать сам образ.
Перейдем в examples/curl и выполним следующую команду для создания образа:
docker build . -t test-curl
В ывод консоли:
Sending build context to Docker daemon 3.584 kB Step 1/7 : FROM ubuntu:latest ---> 0ef2e08ed3fa Step 2/7 : RUN apt-get update ---> Running in 4aa839bb46ec Get:1 http://archive.ubuntu.com/ubuntu xenial InRelease [247 kB] Get:2 http://archive.ubuntu.com/ubuntu xenial-updates InRelease [102 kB] ... Fetched 24.9 MB in 4s (5208 kB/s) Reading package lists... ---> 35ac5017c794 Removing intermediate container 4aa839bb46ec Step 3/7 : RUN apt-get install --no-install-recommends --no-install-suggests -y curl ---> Running in 3ca9384ecf8d Reading package lists... Building dependency tree... Reading state information... The following additional packages will be installed... ---> f3c6d26b95e6 Removing intermediate container 3ca9384ecf8d Step 4/7 : ENV SITE_URL https://google.com/ ---> Running in 21b0022b260f ---> 9a733ee39a46 Removing intermediate container 21b0022b260f Step 5/7 : WORKDIR /data ---> c024301ddfb8 Removing intermediate container 3bc973e5584c Step 6/7 : VOLUME /data ---> Running in a9594a8958fe ---> 6802707a7114 Removing intermediate container a9594a8958fe Step 7/7 : CMD sh -c "curl -L $SITE_URL > /data/results" ---> Running in 37503bc4e386 ---> 5ebb2a65d771 Removing intermediate container 37503bc4e386 Successfully built 5ebb2a65d771
docker bulid — создает новый локальный образ.
-t — устанавливает именную метку для образа.
Теперь у нас есть новый образ, и мы можем посмотреть список существующих:
docker images
Вывод консоли:
REPOSITORY TAG IMAGE ID CREATED SIZE test-curl latest 5ebb2a65d771 37 minutes ago 180 MB nginx latest 6b914bbcb89e 7 days ago 182 MB ubuntu latest 0ef2e08ed3fa 8 days ago 130 MB
Мы можем создать и запустить контейнер из образа. Попробуем сделать это со стандартными параметрами:
docker run --rm -v $(pwd)/vol:/data/:rw test-curl
Чтобы увидеть результаты, сохраненные в файле, выполним команду:
cat ./vol/results
Попробуем с facebook.com:
docker run --rm -e SITE_URL=https://facebook.com/ -v $(pwd)/vol:/data/:rw test-curl
И снова посмотрим результаты:
cat ./vol/results
Пример 4: Разворачиваем PROXY / ZABBIX / AGENT в docker контейнере
Docker Compose — это инструмент, который позволяет определить и запустить несколько связанных контейнеров Docker как одно приложение. Он основан на файле конфигурации в формате YAML, который описывает различные сервисы, сети и объемы данных, необходимые для запуска и настройки контейнеров.
С помощью Docker Compose вы можете определить множество контейнеров, которые взаимодействуют друг с другом, и описать их конфигурацию в файле `docker-compose.yml`. В этом файле вы указываете образы Docker, сети, порты, переменные окружения, объемы и другие параметры для каждого сервиса, который хотите запустить.
Docker Compose позволяет вам определить зависимости между сервисами, настроить сетевое взаимодействие между контейнерами и упростить процесс развертывания и управления многоконтейнерными приложениями. Он также предоставляет команды для создания, запуска и остановки всех контейнеров, описанных в файле `docker-compose.yml`.
При использовании Docker Compose вы можете создавать и развертывать комплексные приложения, состоящие из нескольких сервисов, таких как веб-серверы, базы данных, кэш-серверы и другие. Это упрощает разработку, тестирование и развертывание приложений в среде Docker.
Данный пример представляет файл конфигурации Docker Compose (docker-compose-zabbix-proxy.yml) для развертывания двух сервисов: zabbix-proxy и zabbix-agent :
Создадим фаил docker-compose.yml: