attach로 접근할 수 없는 경우
OS만 있는 컨테이너와 다르게 다른 command가 있는 컨테이너들은 단순히 attach로 리눅스 쉘에 접근할 수가 없다.
docker run -d -p 8080:80 httpd
이렇게 컨테이너를 실행시킨 후
docker attach [방금실행시킨 httpd ID]
attach 명령어로 리눅스 쉘에 접근하려고 하면 접근이 안된다.
run할 때 -it를 붙이지도 않았을 뿐더러 실행되고 있는 명령어가 /bin/bash가 아니라 httpd-foreground 이기 때문.
그렇다면 실행할 때 -it 옵션을 준다면?
docker run -dit httpd
docker run -dit httpd bash
이렇게 실행해서 docker attach를 하면 어떨까? 컨테이너가 바로 종료되어버린다.
두번째 줄에있는 bash명령어를 줘도 마찬가지.
다른 명령어가 실행되고 있을 때 터미널에 접근하고 싶다면?
docker exec -it [CONTAINER_ID] bash
exec -it 명령어로 해결 할 수 있다. 상호작용할 수 있는 bash를 실행시켜준다.
옵션인 -it의 의미는 이전 강의에와 마찬가지인것 같다.
-i : interactive 상호작용
-t : terminal 모드 /bin/bash로 상호작용한다.
정리
1. os(ubuntu) 이미지일 때 터미널 실행 법
docker run -dit ubuntu
docker attach [CONTAINER_ID]
2. while process (httpd) 이미지 일 때
docker run -d -p 8080:80 httpd (docker run -dit를 해도 상관없음)
docker exec -it [CONTAINER_ID] bash
도커는 이미지 실행 시에 command를 지정하게 되어있는데 아파치같은 것은 아파치 실행 명령어가 command여서 attach로 접근하면 bash 접근불가.
이럴 때는 docker exec -it [CONTAINER_ID] bash 로 상호작용할 수 있도록 해주면 된다.
'코딩이야기 > Docker' 카테고리의 다른 글
도커 입문 12강 - docker commit 이미지 굽기와 docker hub업로드 (0) | 2024.06.17 |
---|---|
도커 입문 11강 docker volume 옵션으로 폴더 연결하기 (0) | 2024.06.14 |
도커 입문 9강 - docker dit옵션과 attach (1) | 2024.06.10 |
도커 입문 8강 - 모든 이미지 한번에 삭제하는 명령어 (0) | 2024.06.10 |
도커 입문 7강 - 컨테이너 포트포워딩 및 데몬으로 실행 (0) | 2024.06.07 |