Saya melakukan beberapa hal rumit dengan buruh pelabuhan, tapi ternyata saya tidak tahu apa -it
arti bendera. Baru-baru ini saya menemukan beberapa contoh docker run
perintah yang sedikit membingungkan saya.
docker run -itd ubuntu:xenial /bin/bash
Pertanyaan saya adalah apa artinya menulis -it
bendera 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).
sumber
/bin/bash
tidak 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.Jawaban:
-it
adalah singkatan--interactive + --tty
ketika Andadocker run
dengan perintah ini .. ini akan membawa Anda langsung ke dalam wadah ,, di mana-d
kependekan dari--detach
yang 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-itd
itu akan menjalankan-it
opsi dan melepaskan Anda dari penampung, sehingga penampung Anda masih berjalan di latar belakang bahkan tanpa aplikasi default untuk dijalankan ..sumber
CMD
perintah 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. .-i
). Demikian pula, jika menjalankan perintah yang berperilaku berbeda berdasarkan apakah ada TTY, Anda bisa mendapatkan perilaku berbeda bergantung pada keberadaan-t
./bin/bash </dev/null
segera keluar juga, jika Anda menjalankannya tanpa Docker. Menjalankandocker run
tanpa-i
melakukan hal yang sama dengan salinanbash
yang 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).docker run -it ubuntu:xenial /bin/bash
memulai penampung dalam mode interaktif (karenanya-it
tandai) yang memungkinkan Anda untuk berinteraksi dengan/bin/bash
penampung. Berarti bahwa sekarang Anda akan memilikibash
sesi di dalam wadah, sehingga Anda dapatls
,mkdir
, atau melakukan perintah bash di dalam wadah.Kuncinya di sini adalah kata "interaktif". Jika Anda menghilangkan flag tersebut, container masih dijalankan
/bin/bash
tetapi segera keluar. Dengan bendera, kontainer dijalankan/bin/bash
kemudian dengan sabar menunggu masukan Anda.sumber
docker run -i ubuntu:xenial /bin/bash
-t
: pseudo tty, atau "pseudo terminal". Tanpa terminal, Anda tidak dapat mengirim masukan ke penampung.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-t
tag, seseorang masih dapat berinteraksi dengan penampung, tetapi dengannya, Anda akan memiliki terminal fitur yang lebih bagus dan lebih banyak. Anda dapat menjalankan dengan-i
dan dengan-it
untuk melihat perbedaannya.