저는 Windows에서 boot2docker를 사용하고 있습니다. 나는 다음 명령을 시도했다
docker run -i centos /bin/bash
docker run -it centos /bin/bash
둘 다 동일한 유형의 실행을 제공합니다. -i가 대화형 모드라는 것을 읽었습니다. -t는 터미널 모드입니다. 하지만 -i 및 -it 에서 pwd
및 같은 명령을 실행할 수 있습니다. ls
생성된 UI만 다릅니다.
그렇다면 이 두 플래그는 무엇에 사용됩니까? 내가 뭐 놓친 거 없니?
답변1
docker -i
비대화형 쉘을 제공합니다( -i
의미인터렉티브bash가 아닌 docker와 함께 작동합니다.)
다음 명령을 실행하여 이를 확인할 수 있습니다(bash가 대화형인 경우 변수가 $-
포함됨 i
).
echo $- |grep i && echo i am interactive || echo i am non-interactive
이 비대화형 bash는 명령 프롬프트를 표시하지 않으며, 장기 실행 명령이 언제 작업을 완료했는지 알기 어렵고, 명령 기록을 사용할 수 없으며, tty 기반 프로그램은 엉망처럼 보입니다.
vim
(불평하고 Output/Input is not a terminal
, 이상하게 보이고, 행동하는) 또는 rogue
유사한 게임(예: crawl
일을 거부하는 것) 을 시도해 보세요 .
반면, 일반 대화형 셸 docker -it
에는 명령 프롬프트( 조정 가능 $PS1
) 및 명령 기록( 포함 )이 제공됩니다. Ctrl-r
명령이 완료되면 프롬프트로 인해 명확하게 표시되며 tty가 필요한 프로그램은 정상적으로 작동합니다.
따라서 셸에 명령을 수동으로 입력하려면 docker -it
.