Docker Alpine 컨테이너에서 쉘 시작


165

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 기본 컨테이너에서 대화식 쉘을 시작하는 명령은 무엇입니까?

답변:


282
ole@T:~$ docker run -it --rm alpine /bin/ash
(inside container) / # 

위에서 사용 된 옵션 :

  • /bin/ashBusyBox에서 제공하는 Ash ( Almquist Shell )
  • --rm용기가 나올 때 용기를 자동으로 제거합니다 ( docker run --help)
  • -i 대화식 모드 (연결되어 있지 않아도 STDIN을 계속 열어 둡니다)
  • -t 의사 TTY 할당

1
물론-좋은 생각-재는 껍질이며 --rm은 실행이 완료된 후 컨테이너를 제거합니다. 따라서 실행 후에도 컨테이너를 계속 사용할 수있게하려면 --rm 사용법을 건너 뛰십시오. ATM 만 실험하고 있기 때문에 사용하고 있습니다.
Ole

그렇다면 우분투와 같은 분리 속성으로 어떻게 실행합니까?
Benyamin Limanto

나는 두 경우 모두 우분투 또는 알파인 ... 당신은 그냥 -d옵션을 제공합니다 생각합니다 .
Ole

2
알파인에게는 익숙하지 ash않은 알파인이 있음을 알리기 위해 +1 bash하여 컨테이너에 접근하지 못하도록했습니다.
code_dredd 1

RHEL에 있고 권한 거부 오류가 발생하면 다시 SELinux입니다. 임시로 setenforce 0을 설정해야합니다. P
Parth Patel

67

일반적으로, 알프스 리눅스 이미지를 포함하지 않는 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

이 정보가 도움이 되길 바랍니다.


1
차이점은 무엇이며 /bin/ash그리고 ash? 비슷 /bin/sh하고 sh.
피터 Mortensen

1
안녕하세요 @ peter-mortensen, 차이점은에 ash대한 상징적 인 링크 /bin/ash입니다. 일부 Linux 배포판에는 기호 링크가 없습니다.
jansanchez

28

요즘 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


4

컨테이너가 이미 실행중인 경우 :

docker exec -it container_id_or_name ash
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.