이전 시간에 docker attach에 대해서 공부했다.
그러나 attach로 접근할 수 없는 경우가 있다.
OS만 있는 컨테이너와 다르게 다른 command가 있는 컨테이너들은 단순히 attach로 리눅스 쉘에 접근할 수 없다.
attach로 접근할 수 없는 이유
docker run -d -p 8080:80 httpd
이렇게 컨테이너를 실행시킨 후
docker attach [방금실행한 httpd ID]
attach 명령어로 리눅스 쉘에 접근하려면 접근이 되지 않는다.
인터렉션 모드가 아니고 실행되는 명령어가 /bin/bash가 아니라 httpd-foreground이기 때문이다.
아 그렇다면 실행할 때 -it 옵션을 주면 되는건가?
이렇게 it를 붙여서 하더라도
프로세스가 죽어서 컨테이너가 바로 종료되어 버린다.
다른 명령어가 실행되고 있을 때 터미널에 접근하고 싶다면 exec -it 명령어를 사용하면 된다.
docker run -d -p 8080:80 httpd
이렇게 먼저 백그라운드에서 컨테이너를 실행시킨 후에 exec -it 명령어로 들어가보자.
docker exec -it [컨테이너ID] bash
이게 기본 형태이다. 실제 터미널에서 시도해보자.
이제 다른 명령어가 실행되고 있을 때 터미널에 접근할 수 있게 되었다.
총정리
1. OS(ubuntu) 이미지일 때 터미널 실행 법
docker run -dit ubuntu
docker attach [컨테이너ID]
2. while process (httpd) 이미지일 때
docker run -d -p 8080:80 httpd (docker run -dit도 상관x)
docker exec -it [컨테이너ID] bash
도커는 이미지 실행 시에 command를 지정한다. attach로 접근하면 bash 접근이 되지 않는다.
따라서 docker exec -it를 통해 bash로 상호작용할 수 있도록 한다.
'가상화 > Docker' 카테고리의 다른 글
[docker] dockerfile 자세히 알아보기 (42) | 2024.07.24 |
---|---|
[docker] Volume 옵션으로 폴더 연결하기 (32) | 2024.07.19 |
[docker] dit 옵션과 attach (27) | 2024.07.09 |
포트포워딩 알아보기 (feat. Docker) (52) | 2024.06.26 |
도커(Docker)란? (61) | 2024.06.11 |