• 카테고리

    질문 & 답변
  • 세부 분야

    데브옵스 · 인프라

  • 해결 여부

    미해결

docker-compose.yml 파일 내부 질문입니다.

20.09.19 15:46 작성 조회수 2.07k

0

1.커맨드라인에서 명령어를 칠떄는 -it를 입력햇는데 docker-compose.yml에서는 안해도 되는건가요?  docker-compose는 자동으로 컨테이너 내부로 attach 되는건가요?

2. -a(attach) option이랑 -it랑 어떻게 다른가요?

답변 2

·

답변을 작성해보세요.

4

안근창님의 프로필

안근창

2020.09.23

제가 아는 한도 내에서 말씀드려보겠습니다.
(틀릴 수도 있습니다)

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에서 다음과 같습니다.

        stdin_opentrue # docker run -i
        ttytrue        # docker run -t

다만 이 예제처럼 '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을 다 볼 수 있는 걸 확인할 수 있습니다 ^^