docker run -it bayrağı nedir?


114

Docker ile bazı karmaşık şeyler yapıyordum, ancak sonuç olarak -itbayrağın ne anlama geldiğini bilmiyorum . Son zamanlarda docker runkafamı biraz karıştıran bir komuta örneğiyle karşılaştım .

docker run -itd ubuntu:xenial /bin/bash 

Sorum şu ki, -itkonteyner örnekleme çalıştırılırken buraya bayrak yazmanın anlamı nedir?bin/bash

Belgelerde bir örneğimiz var

docker run --name test -it debian

açıklama ile

-İt, Docker'a konteynerin stdinine bağlı bir sözde TTY tahsis etmesini söyler; kapsayıcıda etkileşimli bir bash kabuğu oluşturmak.

ve yardım sayfasından -t bayrağı açıklaması

-t, --tty Bir sözde TTY ayırın

sırasında -it işaretini silersem

docker run -d ubuntu:xenial /bin/bash

yeni oluşturduğum konteynerim pek yaşamıyor

içinde docker ps -a

çıkıldı olarak belirlendi

Üzgünüm, sorum oldukça aptalsa, internette bir açıklama bulamıyorum (bu noktayı önemli ölçüde yanlış anladım).


Eğer /bin/bashstdin üzerinde herhangi bir içerik yoksa, çalıştırılacak komutları yoktur ve kullanıcıyı uyarmanın bir yolu yoktur, bu yüzden çıkar. Bu% 100 normal ve beklenen bir davranıştır.
Charles Duffy

Yanıtlar:


102

-itkısaltmasıdır --interactive + --ttyne zaman docker runbu komutla .. o kabın ,, düz içeride alacağını -dkısaltmasıdır --detachsadece konteyner çalıştırdığınız anlamına gelir ve sonra ayırmak böylece temelde arka .. Konteyneri çalıştırmak ondan düzenleme: öylesine docker container'ı -itdçalıştırırsanız, -itseçenekleri çalıştırır ve sizi kapsayıcıdan ayırır, böylece kapsayıcınız herhangi bir varsayılan uygulama çalıştırılmasa bile arka planda çalışmaya devam eder ..


Doğru cevap değil, çünkü -it seçeneği olmadan çalıştıktan sonra konteynerim durduruldu.
Alex

1
bu, kapsayıcınızda bir hata olduğu anlamına gelir .. yani kapsayıcınız başlatılamadı ... veya CMDvarsayılan olarak herhangi bir komutu yoktu, bu nedenle varsayılan olarak herhangi bir uygulamayı çalıştırmadı. .bu yüzden arka planda çalıştırırsanız, yapacak herhangi bir işi olmadığı için hemen çıkar. .
Fendi jatmiko

@Alex, eğer konteynerinizdeki program stdin kapalıyken çıkan bir şeyse, cevabınız var (neden onsuz çalışmayacağına dair -i). Benzer şekilde, bir TTY olup olmadığına bağlı olarak farklı davranan komutlar çalıştırırsa, varlığına bağlı olarak farklı davranışlar elde edebilirsiniz -t.
Charles Duffy

@Alex, ... ve açık olmak /bin/bash </dev/nullgerekirse, Docker olmadan çalıştırırsanız hemen çıkar. docker runOlmadan koşmak -i, bashbaşladığı kopyaya aynı şeyi yapmaktır. (Olmadan -t, bir stdin'e sahiptir ancak bir TTY'ye sahip değildir, bu nedenle kendisini etkileşimli bir kabuk olarak algılamaz, bu nedenle biraz farklı davranışlar elde edersiniz).
Charles Duffy

1
@AdmiralAdama, renk sorununu çözen şey -t seçeneğidir. Renk belirteçlerini anlamak için TTY gereklidir.
kroiz

44

docker run -it ubuntu:xenial /bin/bashkonteyneri, konteynırla etkileşim kurmanıza -itizin veren etkileşimli modda (dolayısıyla bayrak) başlatır /bin/bash. Bunun anlamı artık sahip olacak bashoturumu içine olabildiğince böylece, konteyner ls, mkdirya da kap içindeki herhangi bash komutunu yapmak.

Buradaki anahtar, "etkileşimli" kelimesidir. Bayrağı atlarsanız, kapsayıcı yine de çalışır /bin/bashancak hemen çıkar. Bayrak ile, kapsayıcı çalıştırılır ve /bin/bashardından sizin girişinizi sabırla bekler.


2
-t bayrağını kullanmam gereken şey için? docker run -i ubuntu:xenial /bin/bash
Alex

4
-t: sözde tty veya "sözde terminal". Terminal olmadan konteynere giriş gönderemezsiniz.
dvnguyen

docker run -it ubuntu:xenial Cevabınız için teşekkürler, ancak bu komutla da sıfırdan bir terminal oturumu yapacağım (daha sonra bin / bash çalıştırmam gerekenler için). Aynı zamanda bir terminal oturumu da oluşturur
Alex

2
Haklısın. Sözlerimi geri alacağım. -tEtiket olmadan konteynırla hala etkileşim kurabilir, ancak onunla daha hoş, daha fazla özellikli bir terminale sahip olursunuz. Farkı görmek için birlikte -ive birlikte koşabilirsiniz -it.
dvnguyen

Herhangi bir farklılık bulamıyorum. Çabaların için teşekkürler!
Alex
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.