docker запуск с флагами --interactive и --tty - PullRequest
0 голосов
/ 29 января 2020

Редактировать:

Кто-то помечает дубликат этого вопроса , но он вообще не объясняет основной механизм.

Но, напротив, этот стек Переполнение решит мою путаницу в случае I, , но не в случае II .


Я новичок ie в docker, и я запутался в использовании - -interactive, --attach flag и соответствующие концепции

Я покажу свою путаницу, используя busybox в docker концентраторе.


Случай I :

Когда я запускаю контейнер, используя следующие команды. docker run --interactive --tty busybox sh

Контейнер работает и принимает ввод enter image description here

В соответствии с документом , --interactive используется для

Держите STDIN открытым, даже если он не подключен

Я не понимаю, что означает , даже если он не присоединен к , прикреплен к чему?


Случай II : Затем я выхожу из контейнера и пытаюсь запустить его, используя docker start --attach abdd796820b1.

Терминал также принимает ввод, но когда я набираю ls или echo, он не дает ответа. enter image description here Что сделал флаг --attach?

Пожалуйста, помогите.

Ответы [ 2 ]

1 голос
/ 29 января 2020

Существует два способа взаимодействия с работающим контейнером

  • присоединить
  • exe c

- интерактивный флаг

Как вы уже упоминали, он уже говорит

Держите STDIN открытым, даже если он не подключен

Что, по моему пониманию, означает, что он будет читать входы от вашего терминала / консоли и реагирует или представляет вывод на него. Если вы запустите docker run --tty alpine /bin/sh и docker run --tty --interactive alpine /bin/sh. Один с --interactive будет реагировать на него.

присоединить

Присоединить к запущенному процессу

Если docker контейнер был запущен с помощью команды /bin/bash, вы можете получить к нему доступ с помощью attach, если нет, то вам нужно выполнить команду для создания экземпляра bash внутри контейнера, используя exec.

Подробнее : Если контейнер docker запущен с использованием /bin/bash, он становится контейнером PID 1, а команда attach присоединит вас к PID 1.

exe c

Создает новый процесс

Если вы хотите создать новый процесс внутри контейнера, чем exe c, он используется как exec, используется для выполнения apt-get Команда внутри контейнера без присоединения к нему или запуска узла или сценария python.

Например: docker exec -it django-prod python migrate

См. здесь -i для интерактивного и -t для --tty это псевдо-TTY. Интерактивный, так что вы можете ввести, если что-то подсказывает эта команда.

0 голосов
/ 18 апреля 2020

Вам потребуется интерактивная опция -i / - для перенаправления терминала STDIN на контейнер sh.

Попробуйте:

docker start -ai CONTAINER

https://docs.docker.com/engine/reference/commandline/start/

...