Від'єднаний режим Docker


Відповіді:


141

Ви можете запустити контейнер докера в автономному режимі з -dопцією. Отже, контейнер запускається і працює у фоновому режимі. Це означає, що ви запускаєте контейнер і можете використовувати консоль після запуску для інших команд.

Протилежність відокремленому режиму - режим переднього плану. Це режим за замовчуванням, коли -dпараметр не використовується. У цьому режимі консоль, яку ви використовуєте для запуску, docker runбуде приєднана до стандартного вводу, виводу та помилки. Це означає, що ваша консоль приєднана до процесу контейнера.

У від'єднаному режимі ви можете стежити за стандартним висновком вашого контейнера докера за допомогою docker logs -f <container_ID>.

Просто спробуйте обидва варіанти. Я завжди використовую відокремлений режим для запуску своїх контейнерів. Сподіваюся, я міг би пояснити це трохи зрозуміліше.


Привіт, що бентежить те, що ти сказав - і те, що в документації докера говорить: "ти ... можеш використовувати контейнер hte після запуску для інших команд". Очевидно, що на передньому плані ви використовуєте контейнер для інших команд, якщо у вас є -it, і ви отримаєте підказку. Все ще шукаємо визначення -d ...
Брайан Булковскі,

3
@BrianBulkowski - зовсім не про це говорить ця відповідь. Фраза "... міг використовувати консоль після запуску ..." означає, що термінал, з якого ви запустили контейнер докера, як і раніше використовується як звичайна оболонка, поки контейнер докера працює у фоновому режимі.
Марно

Ви можете також конвеювати вихідні журнали у файл? Якщо я викликаю журнали докерів -f <container_ID>, на моєму терміналі працює божевільний друк лише один рядок за іншим.
Юрген К.

@ JürgenK. Я з’ясував, що ви можете просто зробити docker logs -f [container_ID] > logs.txt. Якщо це не працює, спробуйте додати прапор '-it' під час запуску контейнера докера, як запропоновано @BMitch нижче.
Санлок Лі

@ Санлок Лі. Дякую. Чи можна встановити обмеження для номерів рядків файлу журналу докера? Розмір швидко збільшується, мені потрібно розчистити
Юрген К.

30

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

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

Якщо ви працюєте без опції від'єднання, клієнт одразу ж запустить виклик API приєднання після створення контейнера, щоб ви могли бачити вихідні дані та необов'язково надавати вхідні дані до запущеного процесу на контейнері. Це корисно, якщо у вашому контейнері працює щось інтерактивне (наприклад /bin/bash).

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


1
ІМО, також має сенс згадати, як інтерактивно від'єднатись від прикріпленого контейнера ( 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 - Створіть екземпляр із образу docker як контейнер docker. (якщо зображення недоступне локально, воно витягується з концентратора докера) ubuntu - Назва зображення

14.04 - тег

-d, --detach - Режим від'єднання

-t, --tty - Виділити псевдо-TTY


13
Це не відповідь на запитання.
0xc0de
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.