Отсоединенный режим Docker

88

Что такое автономный режим в мире докеров? Я прочитал ссылку на эту статью , но она не объясняет, что именно означает отключенный режим.

софтшиппер
источник

Ответы:

145

Вы можете запустить докер-контейнер в автономном режиме с -dопцией. Таким образом, контейнер запускается и работает в фоновом режиме. Это означает, что вы запускаете контейнер и можете использовать консоль после запуска для других команд.

Противоположностью отдельному режиму является режим переднего плана. Это режим по умолчанию, когда -dопция не используется. В этом режиме консоль, которую вы используете для выполнения, docker runбудет подключена к стандартному вводу, выводу и ошибке. Это означает, что ваша консоль подключена к процессу контейнера.

В автономном режиме вы можете следить за стандартным выводом вашего контейнера докеров с помощью docker logs -f <container_ID>.

Просто попробуйте оба варианта. Я всегда использую автономный режим для запуска своих контейнеров. Я надеюсь, что смогу объяснить это немного яснее.

Сим
источник
Привет, что сбивает с толку в том, что вы сказали - и в документации по докеру говорится: «вы ... можете использовать контейнер hte после запуска для других команд». Очевидно, что на переднем плане вы используете контейнер для других команд, если у вас есть -it и вы находитесь в приглашении. Все еще ищем определение -d ...
Брайан Булковски
3
@BrianBulkowski - этот ответ вовсе не об этом. Фраза «... может использовать консоль после запуска ...» означает, что терминал, из которого вы запустили контейнер докеров, по-прежнему можно использовать как обычную оболочку, пока контейнер докеров работает в фоновом режиме.
Бесполезный
Вы также можете передать вывод логов в файл? Если я вызываю docker logs -f <container_ID>, мой терминал безумно печатает только одну строку за другой.
Jürgen K.
@ JürgenK. Я узнал, что можно просто сделать docker logs -f [container_ID] > logs.txt. Если это не сработает, попробуйте добавить флаг «-it» при запуске контейнера докеров, как это предлагает @BMitch ниже.
Sanlok Lee
@ Санлок Ли. Благодарю. Можно ли установить ограничение на номера строк файла журнала докеров? Размер увеличивается тихо быстро, мне нужно это прояснить
Юрген К.
31

Параметр отсоединения в командной строке docker указывает, что клиент docker ( docker) сделает запрос к серверу ( dockerd), а затем клиент завершит работу, пока этот запрос продолжается на сервере. Частично путаница может заключаться в том, что докер выглядит как единый процесс, тогда как на самом деле это приложение клиент / сервер, где клиент - это просто тонкий интерфейс REST API для отправки каждой команды на сервер.

С a docker container run --detachэто означает, что контейнер будет создан, сервер ответит идентификатором контейнера в случае успеха, и контейнер будет продолжать работать на сервере, пока вы можете выполнять другие команды. Это часто используется для сервера (например, nginx), который вы хотите запустить в фоновом режиме, пока вы продолжаете выполнять другие команды. Обратите внимание , что вы можете настроить контейнер с --interactiveи -ttyварианты (часто сокращенно -it) , а затем запустить , docker container attachчтобы подключиться к уже запущенному контейнеру. (Обратите внимание: пока вы не подключитесь к контейнеру, работающему с -itd, любая попытка контейнера прочитать из stdin будет зависать, вместо того, чтобы видеть конец ввода, который часто вызывает немедленный выход, если вы только что прошли -d.

Если вы запустите без опции отсоединения, клиент немедленно запустит вызов API присоединения после создания контейнера, чтобы вы могли видеть выходные данные и, при необходимости, предоставлять входные данные для запущенного процесса в контейнере. Это полезно, если в вашем контейнере работает что-то интерактивное (например /bin/bash).

Несколько других команд позволяют отключить параметр, в том числе docker-compose up -dзапускает весь проект и оставляет его работающим на сервере в фоновом режиме. Также существует множество docker serviceкоманд, которые либо отключаются после отправки изменения на сервер для создания или обновления целевого состояния службы, либо, если вы не отключаете, клиент будет ждать, пока текущее состояние службы не совпадет с целевым состоянием, и вы можете увидеть ход развертывания. Обратите внимание на docker serviceкоманды, которые вам, возможно, придется передать, --detach=falseчтобы оставаться прикрепленным, поведение изменилось за последний год в зависимости от вашей версии.

BMitch
источник
1
IMO, также имеет смысл упомянуть, как отключиться от прикрепленного контейнера в интерактивном режиме ( CTRL-p CTRL-q , --detach-keys)
Леон,
@Leon хороший совет, но убедитесь, что вы прикреплены к контейнеру с обоими --interactiveи --tty(иначе -it), чтобы это работало.
BMitch
1
Спасибо @BMitch! Думаю, теперь я понимаю.
VSO
1
Красиво объяснил @BMitch, желаю, чтобы документы были такими подробными!
Рави Тивари
-6
docker run -d -t ubuntu:14.04

docker run - Создайте экземпляр из образа докера как контейнер докера. (если изображение недоступно локально, он извлекается из концентратора докеров) ubuntu - имя изображения

14.04 - Тег

-d, --detach - Режим отключения

-t, --tty - назначить псевдо-TTY

Сиддхарт Кумар
источник
13
Это не ответ на вопрос.
0xc0de 02