docker run -it 플래그는 무엇입니까?


111

나는 도커로 복잡한 일을하고 있었지만, -it플래그 가 무엇을 의미 하는지 모르겠습니다 . 최근에 나는 약간 docker run혼란스러워하는 명령의 예를 발견했습니다 .

docker run -itd ubuntu:xenial /bin/bash 

내 질문은 -it인스턴스화 중 컨테이너가 실행되는 경우 여기에 플래그 를 작성하는 것이 의미가 있습니다.bin/bash

문서에는 예가 있습니다.

docker run --name test -it debian

설명과 함께

-it은 Docker에게 컨테이너의 stdin에 연결된 의사 TTY를 할당하도록 지시합니다. 컨테이너에 대화 형 bash 셸을 만듭니다.

및 도움말 페이지의 -t 플래그에 대한 설명

-t, --tty 의사 TTY 할당

-it 플래그를 삭제하면

docker run -d ubuntu:xenial /bin/bash

새로 만든 컨테이너는 그렇게 많이 살지 않습니다

docker ps -a

종료 됨으로 지정됩니다.

죄송합니다. 제 질문이 아주 어리 석다면 인터넷에서 설명을 찾을 수 없습니다.


경우 /bin/bash표준 입력에 아무 내용도 사용할 수가 없습니다, 그것은 그래서 종료, 실행 할 명령과 사용자에게 메시지를 표시 할 수있는 방법이 없습니다. 이것은 100 % 정상적이고 예상되는 동작입니다.
Charles Duffy

답변:


99

-it에 대한 짧은 --interactive + --tty당신이 때 docker run이 명령 .. 그것은 용기 ,,의 바로 안쪽에 당신을 데려 갈 것이다 -d위한 짧은 --detach그냥 컨테이너를 실행하는 방법 다음 분리 그래서 기본적으로 당신이 배경 .. 용기를 실행 그것에서 편집 : 그래서 Docker 컨테이너를 -itd실행하면 -it옵션 이 실행되고 컨테이너에서 분리되므로 기본 앱을 실행하지 않아도 컨테이너가 백그라운드에서 계속 실행됩니다.


-it 옵션없이 실행 한 후 컨테이너가 중지 되었기 때문에 정답이 아닙니다.
Alex

1
즉, 컨테이너에 오류가 있음을 의미합니다. 따라서 컨테이너가 시작되지 않았거나 ... 또는 CMD기본적으로 명령이 없어서 기본적으로 앱을 실행하지 않았습니다. . 따라서 백그라운드에서 실행하면 할 일이 없기 때문에 즉시 종료됩니다. .
Fendi jatmiko

@Alex, 컨테이너의 프로그램이 stdin이 닫힐 때 종료되는 것이라면 대답이 있습니다 (왜 실행되지 않는지에 대한 것입니다 -i). 마찬가지로 TTY가 있는지 여부에 따라 다르게 작동하는 명령을 실행하는 경우 -t.
Charles Duffy

@Alex, ... 그리고 분명히 /bin/bash </dev/null말하자면 Docker없이 실행하면 즉시 종료됩니다. docker run없이 실행 하는 것은 시작 -i되는 복사본에 대해 동일한 작업을 수행 bash합니다. (이 없으면 -tstdin이 있지만 TTY가 없으므로 대화 형 쉘로 감지하지 않으므로 약간 다른 동작 집합을 얻습니다.)
Charles Duffy

1
@AdmiralAdama, 색상 문제를 해결하는 것은 -t 옵션입니다. 색상 토큰을 이해하려면 TTY가 필요합니다.
kroiz

43

docker run -it ubuntu:xenial /bin/bash컨테이너와 상호 작용할 수있는 대화 형 모드 (따라서 -it플래그) 에서 컨테이너를 시작합니다 /bin/bash. 그 말은 지금 당신은해야합니다 bash세션 내에서 할 수 있도록 용기 ls, mkdir또는 용기 내부의 bash는 명령을한다.

여기서 핵심은 "대화 형"이라는 단어입니다. 플래그를 생략하면 컨테이너는 계속 실행 /bin/bash되지만 즉시 종료됩니다. 플래그를 사용하면 컨테이너가 실행되고 /bin/bash인내심있게 입력을 기다립니다.


2
-t 플래그를 사용해야하는 이유는 무엇입니까? docker run -i ubuntu:xenial /bin/bash
Alex

4
-t: 의사 tty 또는 "의사 터미널". 터미널이 없으면 컨테이너에 입력을 보낼 수 없습니다.
dvnguyen

docker run -it ubuntu:xenial 대답 해 주셔서 감사합니다.하지만 처음부터이 명령을 사용하여 터미널 세션을 갖게됩니다 (그런 다음 bin / bash를 실행해야하는 경우). 또한 터미널 세션을 생성합니다
Alex

2
당신이 옳습니다. 나는 내 말을 되 찾을 것이다. -t태그가 없어도 컨테이너와 상호 작용할 수 있지만 더 멋지고 더 많은 기능 터미널을 사용할 수 있습니다. -i와 함께 실행 -it하여 차이점을 확인할 수 있습니다 .
dvnguyen

차이점을 찾을 수 없습니다. 당신의 노력에 감사드립니다!
Alex
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.