apa itu flag docker run -it?

111

Saya melakukan beberapa hal rumit dengan buruh pelabuhan, tapi ternyata saya tidak tahu apa -itarti bendera. Baru-baru ini saya menemukan beberapa contoh docker runperintah yang sedikit membingungkan saya.

docker run -itd ubuntu:xenial /bin/bash 

Pertanyaan saya adalah apa artinya menulis -itbendera di sini, jika wadah selama instantiation dijalankanbin/bash

Dalam dokumentasi kami memiliki contoh

docker run --name test -it debian

dengan penjelasan

-It memerintahkan Docker untuk mengalokasikan pseudo-TTY yang terhubung ke stdin kontainer; membuat shell bash interaktif dalam wadah.

dan penjelasan untuk -t flag dari halaman bantuan

-t, --tty Alokasikan pseudo-TTY

jika saya menghapus flag -it selama

docker run -d ubuntu:xenial /bin/bash

penampung saya yang baru dibuat tidak terlalu hidup

di docker ps -a

itu ditetapkan sebagai keluar

Maaf, jika pertanyaan saya cukup bodoh, saya tidak dapat menemukan penjelasan di Internet (Saya memiliki kesalahpahaman yang signifikan tentang hal itu).

Alex
sumber
Jika /bin/bashtidak ada konten yang tersedia di stdin, ia tidak memiliki perintah untuk dijalankan dan tidak ada cara untuk meminta pengguna, jadi ia keluar. Ini 100% normal dan perilaku yang diharapkan.
Charles Duffy

Jawaban:

99

-itadalah singkatan --interactive + --ttyketika Anda docker rundengan perintah ini .. ini akan membawa Anda langsung ke dalam wadah ,, di mana -dkependekan dari --detachyang berarti Anda hanya menjalankan wadah dan kemudian melepaskannya sehingga pada dasarnya Anda menjalankan wadah di latar belakang .. edit: jadi jika Anda menjalankan penampung buruh pelabuhan dengan -itditu akan menjalankan -itopsi dan melepaskan Anda dari penampung, sehingga penampung Anda masih berjalan di latar belakang bahkan tanpa aplikasi default untuk dijalankan ..

Fendi jatmiko
sumber
Ini bukan jawaban yang benar, karena penampung saya dihentikan setelah berjalan tanpa opsi -it.
Alex
1
itu berarti ada kesalahan dalam penampung Anda .. jadi penampung Anda gagal untuk memulai ... atau mungkin tidak memiliki CMDperintah apa pun secara default ,, jadi tidak menjalankan aplikasi apa pun secara default. . jadi jika Anda menjalankannya di latar belakang, itu akan segera keluar karena tidak ada tugas yang harus dilakukan. .
Fendi jatmiko
@Alex, jika program dalam penampung Anda adalah sesuatu yang keluar ketika stdin ditutup, ada jawaban Anda (mengapa itu tidak akan berjalan tanpa -i). Demikian pula, jika menjalankan perintah yang berperilaku berbeda berdasarkan apakah ada TTY, Anda bisa mendapatkan perilaku berbeda bergantung pada keberadaan -t.
Charles Duffy
@Alex, ... dan agar jelas, /bin/bash </dev/nullsegera keluar juga, jika Anda menjalankannya tanpa Docker. Menjalankan docker runtanpa -imelakukan hal yang sama dengan salinan bashyang dimulai. (Tanpa -t, ia memiliki stdin tetapi bukan TTY, jadi ia tidak mendeteksi dirinya sebagai shell interaktif, sehingga Anda mendapatkan sekumpulan perilaku yang sedikit berbeda).
Charles Duffy
1
@AdmiralAdama, yang memperbaiki masalah warna adalah opsi -t. TTY diperlukan untuk memahami token warna.
kroiz
43

docker run -it ubuntu:xenial /bin/bashmemulai penampung dalam mode interaktif (karenanya -ittandai) yang memungkinkan Anda untuk berinteraksi dengan /bin/bashpenampung. Berarti bahwa sekarang Anda akan memiliki bashsesi di dalam wadah, sehingga Anda dapat ls, mkdir, atau melakukan perintah bash di dalam wadah.

Kuncinya di sini adalah kata "interaktif". Jika Anda menghilangkan flag tersebut, container masih dijalankan /bin/bashtetapi segera keluar. Dengan bendera, kontainer dijalankan /bin/bashkemudian dengan sabar menunggu masukan Anda.

dvnguyen.dll
sumber
2
untuk apa saya perlu menggunakan -t flag? docker run -i ubuntu:xenial /bin/bash
Alex
4
-t: pseudo tty, atau "pseudo terminal". Tanpa terminal, Anda tidak dapat mengirim masukan ke penampung.
dvnguyen
docker run -it ubuntu:xenial terima kasih atas jawabannya, tetapi saya akan memiliki sesi terminal dengan perintah ini dari awal juga (untuk apa saya perlu menjalankan bin / bash). Ini juga membuat sesi terminal
Alex
2
Kamu benar. Aku akan menarik kembali kata-kataku. Tanpa -ttag, seseorang masih dapat berinteraksi dengan penampung, tetapi dengannya, Anda akan memiliki terminal fitur yang lebih bagus dan lebih banyak. Anda dapat menjalankan dengan -idan dengan -ituntuk melihat perbedaannya.
dvnguyen
Saya tidak dapat menemukan perbedaan apapun. Terima kasih atas usaha Anda!
Alex