[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/ashBusyBox에서 제공하는 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


답변