2016-02-17 18 views
16

Bazı googling yaptım ve docker run -it some_image yerine docker run -i some_image çalıştığı bir durum bulma şansım olmadı.Docker kapsayıcısında `--interactive '' --tty 'kullanılmadan ne zaman kullanmalıyım?

docker run -i --name sample some_image bash çalıştırırsam, kapsayıcı ön planda çalışır, ancak içinde bulunduğum kabuktan etkileyemiyorum. CTRL + C ile durduramıyorum bile. Ancak, başka bir kabuk açıp docker exec -it sample bash'u çalıştırabilir ve kapsayıcıya erişim kazanabilirim.

docker run -i -d --name sample some_image bash'u çalıştırırsam, kapsayıcı hemen çıkar. docker start sample ile yeniden başlatabilir ve sonra kalır, böylece docker exec -it sample bash çalıştırabilir ve tekrar etkileşime girebilirim.

Ancak, tüm bu durumlarda, kaplarımla etkileşim kurmak için en sonunda -it kullanarak sonlandırıyorum. -t bayrağına hangi dünyada ihtiyacım olmaz? -i yana

alkış

+0

II çözemiyorum beklenenin -i -d' – Auzias

+2

@Auzias '-i -d' nin sonucu aşağıdaki örnekte yer almaktadır: https://github.com/docker/docker/blob/e4cfd9b3924fae0369956b4f0e7f73a7e3b0cbf7/integration-cli/docker_cli_attach_test.go#L139 : Söz konusu işlemi veri ile beslemek için stdin'e ekleyebileceğiniz ve kullanabileceğiniz bir süreci başlatır ve çıkarırsınız. – VonC

cevap

16

bileşimin (boru) sağlar, bağlı değilse STDIN daha açık tutar.

docker run ubuntu printf "line1\nline2\n" | docker run -i ubuntu grep line2 | docker run -i ubuntu sed 's/line2/line3/g' 

(Kaynak: issue 14221)

veya:

$ echo hello | docker run -i busybox cat 
    hello 

(Kaynak: issue 12401)

Örneğin
Şimdi bir klavyenin önünde bu hayal ve aslında stdin'nin bir kabuk | daha iyisini yoluyla süreçlere yazabilirsiniz bir komut dosyası kullanılıyor: örnek integration-cli/docker_cli_attach_test.go

+0

İlk snippet'te tam olarak neler olup bittiğini açıklayabiliyor musunuz? 3 farklı kap oluşturuyor mu? Printf "line1 \ nline2 \ n" 'ilk kabın içinde mi çalışıyor? İlk kapsayıcı, ev sahibi konsolu için "line1 \ nline2 \ n" 'yazıyor mu? "Merhaba" yazdırıldıktan sonra kaplar mı çıkıyor? – gisek

+1

@gisek 3 konteynır birbiri ardı ardına koşuyor, her bir eko '/“ sed ”işleminden hemen sonra sona ermektedir .. -i” stdin'in önceki konteyner tarafından üretilen stdout'u almasına izin vermektedir. – VonC

+0

Teşekkürler. Her şey bittikten sonra, yeni oluşturulan 3 konteynerle mi bitiyoruz? – gisek

İlgili konular