[linux] Docker Alpine 컨테이너에서 쉘 시작
Ubuntu 이미지를위한 대화식 쉘을 시작하기 위해 다음을 실행할 수 있습니다.
ole@T:~$ docker run -it --rm ubuntu
root@1a6721e1fb64:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
그러나 이것이 Alpine Docker image에 대해 실행 되면 다음 결과가 나타납니다.
ole@T:~$ docker run -it --rm alpine
Error response from daemon: No command specified
Alpine 기본 컨테이너에서 대화식 쉘을 시작하는 명령은 무엇입니까?
답변
ole@T:~$ docker run -it --rm alpine /bin/ash
(inside container) / #
위에서 사용 된 옵션 :
/bin/ash
BusyBox에서 제공하는 Ash ( Almquist Shell )--rm
용기가 나올 때 용기를 자동으로 제거합니다 (docker run --help
)-i
대화식 모드 (연결되어 있지 않아도 STDIN을 계속 열어 둡니다)-t
의사 TTY 할당
답변
일반적으로, 알프스 리눅스 이미지를 포함하지 않는 bash
대신 사용할 수있는, /bin/ash
, /bin/sh
, ash
또는 단지 sh
.
/ bin / ash
docker run -it --rm alpine /bin/ash
/ bin / sh
docker run -it --rm alpine /bin/sh
금연 건강 증진 협회
docker run -it --rm alpine ash
쉬
docker run -it --rm alpine sh
이 정보가 도움이 되길 바랍니다.
답변
요즘 Alpine 이미지는 /bin/sh
실행할 쉘을 지정하지 않고 기본적으로 직접 부팅됩니다 .
$ sudo docker run -it --rm alpine
/ # echo $0
/bin/sh
alpine
이미지 Dockerfiles에는 이제 CMD
컨테이너가 시작될 때 실행할 쉘을 지정 하는 명령이 포함되어 있기 때문 CMD ["/bin/sh"]
입니다.
이전 Alpine 이미지 버전 (2017 이전)에서는 Docker가 CMD에 대한 추가 레이어를 생성하여 이미지 크기가 증가했기 때문에 CMD 명령이 사용되지 않았습니다. 이것은 알파인 이미지 개발자가 피하고 싶었던 것입니다. 최근 Docker 버전 (1.10+)에서 CMD는 더 이상 레이어를 차지하지 않으므로 alpine
이미지 에 추가되었습니다 . 따라서 CMD를 재정의하지 않으면 최신 알파인 이미지가로 부팅됩니다 /bin/sh
.
: 참고로, 다음은 글라이더 연구소에 의해 공식 알파인 Dockerfiles 저지 참조
https://github.com/gliderlabs/docker-alpine/commit/ddc19dd95ceb3584ced58be0b8d7e9169d04c7a3#diff-db3dfdee92c17cf53a96578d4900cb5b
답변
컨테이너가 이미 실행중인 경우 :
docker exec -it container_id_or_name ash