Avvio di una shell nel contenitore Docker Alpine


165

Per avviare una shell interattiva per l'immagine di Ubuntu possiamo eseguire:

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

Ma quando viene eseguito per l' immagine Alpine Docker , i seguenti risultati:

ole@T:~$ docker run -it --rm alpine
Error response from daemon: No command specified

Qual è il comando per avviare una shell interattiva in un contenitore di base Alpine?

Risposte:


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

Opzioni utilizzate sopra:

  • /bin/ashè Ash ( Almquist Shell ) fornito da BusyBox
  • --rmRimuovi automaticamente il contenitore quando esce ( docker run --help)
  • -i Modalità interattiva (tenere aperto STDIN anche se non collegato)
  • -t Assegna uno pseudo-TTY

1
Certo - buona idea - la cenere è il guscio e --rm rimuove il contenitore dopo il completamento della corsa. Quindi, se si desidera che il contenitore sia ancora disponibile dopo l'esecuzione, saltare l'uso di --rm. Lo sto usando perché sto solo sperimentando ATM.
Ole

Quindi come eseguirlo con staccare la proprietà come Ubuntu?
Benyamin Limanto,

Credo in entrambi i casi ... Ubuntu o Alpine ... gli dai solo -dun'opzione.
Ole,

2
+1 per aver notato che Alpine ha ashe non bash, che, non avendo molta familiarità con Alpine, è ciò che mi ha preso e mi ha impedito di accedere al container prima.
code_dredd

Se sei su RHEL e ricevi un errore di autorizzazione negata, è di nuovo SELinux ... devo farlo temporaneamente setenforce 0: P
Parth Patel

67

Di solito, l'immagine alpino Linux non contiene bash, invece è possibile utilizzare /bin/ash, /bin/sh, ashoppure solo sh.

/ Bin / cenere

docker run -it --rm alpine /bin/ash

/ Bin / sh

docker run -it --rm alpine /bin/sh

cenere

docker run -it --rm alpine ash

sh

docker run -it --rm alpine sh

Spero che questa informazione ti sia utile.


1
Qual è la differenza tra /bin/ashe ash? Simile per /bin/she sh.
Peter Mortensen,

1
Ciao @ peter-mortensen, la differenza è che ashè solo un collegamento simbolico a /bin/ash. Alcune distribuzioni di Linux non hanno collegamenti simbolici.
Janansanchez,

28

Al giorno d'oggi, le immagini Alpine verranno avviate direttamente /bin/shper impostazione predefinita, senza dover specificare una shell da eseguire:

$ sudo docker run -it --rm alpine  
/ # echo $0  
/bin/sh  

Questo perché i alpineDockerfiles immagine ora contengono un CMDcomando, che specifica la shell per eseguire all'avvio del contenitore: CMD ["/bin/sh"].

Nelle versioni precedenti delle immagini Alpine (precedenti al 2017), il comando CMD non veniva utilizzato, poiché Docker creava un livello aggiuntivo per CMD che aumentava le dimensioni dell'immagine. Questo è qualcosa che gli sviluppatori di immagini alpine hanno voluto evitare. Nelle recenti versioni Docker (1.10+), CMD non occupa più un livello, quindi è stato aggiunto alle alpineimmagini. Pertanto, finché CMD non viene sovrascritto, verranno avviate le immagini alpine recenti /bin/sh.

Per riferimento, consultare il seguente commit nei file Docker ufficiali Alpine di Glider Labs:
https://github.com/gliderlabs/docker-alpine/commit/ddc19dd95ceb3584ced58be0b8d7e9169d04c7a3#diff-db3dfdee92c17cf53ab6578b4900c


4

Nel caso in cui il contenitore sia già in esecuzione:

docker exec -it container_id_or_name ash
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.