docker çalıştırmak ubuntu / bin / bash vs docker çalıştırmak ubuntu


15

Docker sürüm 17.06.0-ce

Docker'ı bir video kursu izleyerek inceliyorum.

Öğretim üyesi şunu gösterir:

sudo docker run -ti ubuntu /bin/bash

Docker'ı görüntü ubuntu ile çalıştırın. Ve beni rahatsız eden şey /bin/bash\. bir komut man docker runolduğunu gösterir /bin/bash. Öyle docker run IMAGE [COMMAND]. Pekala, sorun değil. Ama arasındaki fark nedir

sudo docker run -ti ubuntu 

ve

sudo docker run -ti ubuntu /bin/bash

Benim için hiç yok. Ve öğretim üyesi dikkatleri komuta odaklamıyor. Sadece liman işçisi olduğumuzu söyledi. Kurstaki ilk emriydi. Ve sonra ana makineden izole edildiğimizi gösteriyor, istediğimiz şeyi herhangi bir zarar vermeden serbestçe mahvedebiliyoruz (rm -rf / bin gibi).

Kontrol ettim:

$ sudo docker run -ti ubuntu
root@aaf7cd26fe18:/# echo $SHELL
/bin/bash


$ sudo docker run -ti ubuntu /bin/bash
root@6b2570958216:/# echo $SHELL
/bin/bash

Kendim için bu /bin/bashkısmı çöp olarak atmaya karar verdim .

Ama yine de size sormaya karar verdim: Belki de Docker'ı çalıştırmanın iki yolu arasında bir fark var mı? Varsa, nasıl bir şey?

Yanıtlar:


11

Docker görüntüleri , Dockerfile içindeki yönerge kullanılarak varsayılan olarak belirli bir komutun çalıştırılacağını belirtebilirCMD . Ve:

Kullanıcı argümanları docker runbelirtirse, içinde belirtilen varsayılan değeri geçersiz kılar CMD.

Olduğu gibi , Ubuntu Dockerfile için belirtilen varsayılan komut aslında bash:

CMD ["/bin/bash"]

Yani, Ubuntu görüntünün belirli bir durum için, docker run ... ubuntu /bin/bashfarklı dandocker run ... ubuntu .

Tabii ki, bunun her zaman doğru olması gerekmez. Veritabanı motoru için bir Dockerfile varsayılan olarak veritabanı komutunu çalıştırabilir. Bu durumda, etkileşimli bir kabuğa ihtiyacınız varsa yapmanız gerekir docker run ... /bin/bash.

Genel olarak, bunun docker runsize interaktif bir kabuk kazandıracağını varsayamazsınız. Bir mermiye /bin/bashihtiyacınız olup olmadığını belirtmek daha güvenlidir .


2

Eğer sizin durumunuzda olan komutu, vermeyin zaman /bin/bashkullanırken, -ti( ietkileşimli, tterminali) kullanmakta çalıştırılacak tanımlanmış varsayılan programa eklenecektir runkomutunu DockerFile.

Bir görüntü ön planda üzerinde bir web sunucusu çalışıyorsa Örneğin, siz kullandıktan sonra ne göreceksiniz runolmadan /bin/bashbu web sunucusu (koşmak olmuştur varsayılan programı) ait günlükleri olduğunu.

Komutu belirtirken, görüntüde neler olup bittiğini umursamadığımı söylüyorsunuz, bu "komutu" çalıştırarak bana interaktif bir terminal verin.

Ubuntu varsayılan komut bashve sağlamadıkları takdirde -tikonteyner doğru koşmak aldıktan sonra durdurulacaktır. çünkü bash'ı etkileşimli olmayan modda çalıştırdı ve bittikten sonra kabın artık yapacak bir şeyleri yok.

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.