▶︎ Interactive mode
도커를 사용하면 대화형 모드에서 컨테이너를 실행할 수 있다.
이는 컨테이너가 실행 중인 동안 컨테이너 내에서 명령을 실행할 수 있음을 의미한다.
컨테이너를 대화식으로 사용하면 실행 중인 컨테이너 내부의 명령 프롬프트에 접근이 가능하다.
옵션 | 설명 |
---|---|
-i,--interactive | 표준 입력(stdin)을 활성화하며, 컨테이너와 연결(attach)되어 있지 않더라도 표준 입력을 유지함.보통 이 옵션을 사용하여 bash에 명령을 입력 |
-a,--attach | 컨테이너에 표준 입력(stdin),표준 출력(stdout),표준 에러(stderr)를 연결함 |
▶︎ Attached mode
Attached mode에서 Docker는 컨테이너에서 프로세스를 시작하고 콘솔을 프로세스의 표준 입력, 표준 출력 및 표준 오류에 연결할 수 있습니다.
▶︎ Detached mode
컨테이너가 입력 또는 출력 스트림에 연결되지 않고 백그라운드에서 실행됨을 의미합니다.
▶︎ Example
아래의 파이썬 코드는 인풋값을 받도록 되어있다.
from random import randint
min_number : int = int(input('Please enter the min number: '))
max_number : int = int(input('Please enter the max number: '))
if (max_number < min_number):
print('Invalid input - shutting down ...')
else:
rnd_number : int = randint(min_number,max_number)
print(rnd_number)
먼저 위 스크립트를 도커 컨테이너에서 실행하기 위하여 아래처럼 도커파일을 생성한 후 이미지를 빌드해보자.
Dockerfile
FROM python:latest
WORKDIR /app
COPY . /app
CMD ["python","rng.py"]
build
docker build --tag yshrim12/rng:latest -f Dockerfile .
이미지가 정상적으로 생성되었는지 확인해보자
docker images | grep 'yshrim12/rng'
yshrim12/rng latest e2e071899652 22 minutes ago 871MB
위 처럼 만들어진 이미지를 기반으로 아래 명령어를 사용하여 컨테이너를 실행해보자
docker run yshrim12/rng:latest
도커 컨테이너를 실행하니 아래와 같은 오류가 발생하였다.
Please enter the min number: Traceback (most recent call last):
File "/app/rng.py", line 3, in <module>
min_number : int = int(input('Please enter the min number: '))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
EOFError: EOF when reading a line
이는 컨테이너가 실행될 때 인풋을 받을 수 없는(터미널 입력이 불가능한) 상태이기 때문에 발생하는 에러인 것이다.
위 문제를 해결하기 위해서는 아래의 옵션이 필요하다
-i
,--interactive
: 표준 입력 활성화 및 attach 되어 있지 않더라도 표준 입력을 유지함-t
,--tty
: TTY 모드를 할당. bash를 사용하기 위해서는 해당 옵션을 꼭 넣어주어야 한다.이 옵션을 설정하지 않으면 명령어 입력이 가능한 상태는 되지만 shell 이 표시되지는 않는다.
위 두 플래그를 사용하여 다시 컨테이너를 생성해보자.
docker run -i -t yshrim12/rng:latest
Please enter the min number: 10
Please enter the max number: 20
17
docker start
의 명령어는 기본적으로 detach 모드이기 때문에 -a 플래그를 사용하여 attach 모드로 바꿔어준 후 -i로 interactive 모드로 들어가야 한다.
docker stop 35d538c7a5f0
docker start -a -i 35d538c7a5f0