Docker Alpine kapsayıcısında bir kabuk başlatma


165

Ubuntu görüntüsü için etkileşimli bir kabuk başlatmak için şunları çalıştırabiliriz:

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

Ancak bu Alpine Docker görüntüsü için çalıştırıldığında , aşağıdaki sonuçlar elde edilir:

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

Bir Alpine temel kabında etkileşimli bir kabuk başlatma komutu nedir?

Yanıtlar:


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

Yukarıda kullanılan seçenekler:

  • /bin/ashAsh ( Almquist Shell ) BusyBox tarafından sağlandı
  • --rmKaptan çıktığında otomatik olarak kaldır ( docker run --help)
  • -i Etkileşimli mod (Bağlı olmasa bile STDIN'i açık tutun)
  • -t Bir sözde TTY tahsis edin

1
Elbette - iyi fikir - kül kabuktur ve --rm çalışma tamamlandıktan sonra kabı kaldırır. Bu nedenle, konteynerin çalışmadan sonra hala kullanılabilir olmasını istiyorsanız --rm kullanımını atlayın. Sadece ATM denediğim için kullanıyorum.
Ole

Sonra nasıl ubuntu gibi ayırma özelliği ile çalıştırmak için?
Benyamin Limanto

Her iki durumda da inanıyorum ... Ubuntu veya Alpine ... sadece bir -dseçenek veriyorsunuz .
Ole

2
Alp olmayı sürdürdüğünü belirtti için 1 ashdeğil bashAlpine ile çok aşina olmadığı, beni ve önceki hazneye erişilmesi bana engel olan,.
code_dredd

RHEL üzerindeyseniz ve izin verilmedi hatası alıyorsanız, yine SELinux ... bu geçici olarak 0 setenforce yapmalısınız: P
Parth Patel

67

Genellikle bir Alpine Linux görüntü içermiyor bashetmek yerine, /bin/ash, /bin/sh, ashveya sadece sh.

/ Bin / kül

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

/ Bin / sh

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

kül

docker run -it --rm alpine ash

sh

docker run -it --rm alpine sh

Umarım bu bilgiler size yardımcı olur.


1
Arasındaki fark nedir /bin/ashve ash? Benzer /bin/shve sh.
Peter Mortensen

1
Merhaba @ peter-mortensen, fark ashsadece sembolik bir bağlantı olmasıdır /bin/ash. Bazı linux dağıtımlarının sembolik bağlantıları yoktur.
jansanchez

28

Günümüzde, Alpine görüntüleri /bin/shyürütmek için bir kabuk belirtmek zorunda kalmadan varsayılan olarak doğrudan önyüklenecektir :

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

Çünkü budur alpinegörüntü Dockerfiles artık ihtiva CMDkomutu, kapsayıcı başlar; belirtir kabuk yürütmek: CMD ["/bin/sh"].

Daha eski Alp görüntü sürümlerinde (2017 öncesi), Docker, CMD için görüntü boyutunun artmasına neden olan ek bir katman oluşturmak için kullandığı için CMD komutu kullanılmadı. Bu, Alp görüntü geliştiricilerinin kaçınmak istedikleri bir şey. Son Docker sürümlerinde (1.10+), CMD artık bir katman işgal etmez ve bu nedenle alpinegörüntülere eklenir . Bu nedenle, CMD geçersiz kılınmadıkça, yeni Alp görüntüleri önyüklenir /bin/sh.

Referans için Glider Labs'ın resmi Alpine Docker dosyalarına aşağıdaki taahhüdüne bakın:
https://github.com/gliderlabs/docker-alpine/commit/ddc19dd95ceb3584ced58be0b8d7e9169d04c7a3#diff-db3dfdee92c17cf53a96578d49bb


4

Kapsayıcı zaten çalışıyorsa:

docker exec -it container_id_or_name ash
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.