작성
·
2.5K
답변 2
4
제가 아는 한도 내에서 말씀드려보겠습니다.
(틀릴 수도 있습니다)
docker run <컨테이너> /bin/bash등으로
접근하면 아무것도 나오지 않습니다.
이는 bash 실행후 실제로결과를 출력했는데
STDOUT, STDERR출력이 아무것도 없기 때문에
아무것도 나오지 않아 보이는 것입니다.
이는 강사님의 설명대로 attach를 해서
STDIN, STDOUT, STDERR를 연결할 수 있는데요
-i 옵션을 주면 STDIN, STDOUT이 활성화되어
attach하지 않더라도 표준입출력이 유지됩니다.
-t 옵션은 텍스트 기반의 터미널(TTY)을
애뮬레이션해주는 옵션입니다.
따라서 -it옵션을 붙이면
저 둘의 조합으로 인해서 사실은
터미널 쉘이 아닌데도 마치 사용자로
하여금 터미널쉘의 경험을 줄 수 있습니다.
이는 docker-compose에서도 마찬가지입니다
강사님의 docker-compose.yml
에 설정한 stdin_open: true 옵션이
docker run 의 -i(interactive)를 의미합니다.
-t 옵션은 YAML 안에서
tty: true를 설정하시면 됩니다.
docker 의 -it옵션은
docker-compose의 YAML에서 다음과 같습니다.
다만 이 예제처럼 'up'을 하는 상태에서는
모든 컨테이너 log가 현재 터미널에 출력되고
cmd에서도 sh이 아니라 ^c를 누르는 순간
모든 컨테이너가 정지되니 의미가 없습니다.
굳이 사용하신다면 다음과 같이 run으로 사용하면
docker의 -it를 느끼실 수 있겠죠
docker-compose run --rm react /bin/sh
다른 분들께 도움이 되었으면 합니다.
혹시나 제가 잘못 알고 있다면
지적 피드백 부탁드리겠습니다.
0
it는 포맷을 더 이쁘게 보기 위한 것입니다 ~
a (attach)는 터미널에서 나오는 input, output, error들을 받을수 있게 해주는 것입니다.
docker compose up을 하면 그 안에 저절로 들어가져서 터미널에서 나오는 input output을 다 볼 수 있는 걸 확인할 수 있습니다 ^^