Di Docker 1.1.2 (terbaru), apa cara yang benar untuk melepaskan dari wadah tanpa menghentikannya?
Jadi misalnya, jika saya mencoba:
docker run -i -t foo /bin/bash
ataudocker attach foo
(untuk wadah yang sudah berjalan)
keduanya membawa saya ke terminal dalam wadah, bagaimana cara keluar dari terminal wadah tanpa menghentikannya?
exit
dan CTR+C
keduanya menghentikan wadah.
Jawaban:
Pembaruan: Seperti yang disebutkan di bawah jawaban Ctrl+ p, Ctrl+ qsekarang akan mengubah mode interaktif menjadi mode daemon.
Nah Ctrl+ C(atau Ctrl+ \) harus melepaskan Anda dari wadah tetapi itu akan membunuh wadah karena proses utama Anda adalah bash.
Sedikit pelajaran tentang buruh pelabuhan. Wadah bukan OS fungsional penuh nyata. Saat Anda menjalankan sebuah wadah, proses yang Anda luncurkan mengambil PID 1 dan mengasumsikan daya init. Jadi, ketika proses itu dihentikan daemon menghentikan wadah sampai proses baru diluncurkan (melalui buruh pelabuhan mulai) (Penjelasan lebih lanjut tentang masalah ini http://phusion.github.io/baseimage-docker/#intro )
Jika Anda ingin wadah yang berjalan dalam mode terpisah setiap saat, saya sarankan Anda gunakan
Dengan server ssh di wadah. (Cara termudah adalah mengikuti tutorial dockerizing openssh https://docs.docker.com/engine/examples/running_ssh_service/ )
Atau Anda bisa meluncurkan kembali wadah Anda via
(itu akan terlepas secara default)
sumber
-ti -d
, kemudian melampirkan dengandocker attach
, kemudian lepaskan dengan pertama ctrl + p dan kemudian ctrl + q. Saya pikir, saya bisa menggunakan salah satu cara pintas keyboard.Ketik Ctrl+ plalu Ctrl+ q. Ini akan membantu Anda mengubah mode interaktif ke mode daemon.
Lihat https://docs.docker.com/v1.7/articles/basics/#running-an-interactive-shell .
sumber
Saya menggali ini dan semua jawaban di atas sebagian benar. Itu semua tergantung pada bagaimana wadah diluncurkan. Itu datang ke berikut ini ketika wadah diluncurkan:
-t
)-i
)^P^Q
tidak berfungsi, TETAPI hanya ketika-t
dan-i
digunakan untuk meluncurkan wadah:ctrl+c
tidak berfungsi, TETAPI hanya ketika-t
( tanpa-i
) digunakan untuk meluncurkan wadah:Cara ketiga untuk melepaskan
Ada cara untuk melepaskan tanpa membunuh wadah; Anda perlu shell lain. Singkatnya, menjalankan ini di shell lain terlepas dan membiarkan wadah berjalan
pkill -9 -f 'docker.*attach'
:Mengapa? Karena Anda membunuh proses yang menghubungkan Anda ke wadah, bukan wadah itu sendiri.
sumber
kill -9
sinyal tidak. Proses ini dihentikan dan tidak memiliki jalan lain. Dugaan saya adalah bahwa sinyal lain memberi wadah peluang untuk ditutup, sementara-9
tidak.Jika Anda melakukan "docker pasang" id kontainer "Anda masuk ke dalam wadah. Untuk keluar dari wadah tanpa menghentikan wadah Anda harus memasukkan Ctrl+ P+Q
sumber
Error response from daemon: Container f560a0ad6806150b2775d0b6e6d5f7065a03775bae858fb4fb7df05a277976db is not running
Saya menganggap jawaban Ashwin sebagai yang paling benar, jawaban lama saya ada di bawah.
Saya ingin menambahkan opsi lain di sini yaitu menjalankan wadah sebagai berikut
Anda kemudian dapat memasuki wadah dan menjalankan bash dengan
Tidak perlu menginstal sshd :)
sumber
docker attach
akan lebih standar, dengan memasang kembali ke bash run pertama.docker exec
juga berfungsi di sini, namun itu menciptakan proses bash baru selain yang pertama. Tentu, proses ini dibuat dalam konteks / lingkungan / wadah yang sama dengan yang pertama, namun ini berbeda (analoginya adalah dengan membuka tab terminal baru di emulator terminal favorit Anda).Cara default untuk melepaskan dari wadah interaktif adalah Ctrl+ P Ctrl+ Q, tetapi Anda dapat menimpanya ketika menjalankan wadah baru atau melampirkan wadah yang ada menggunakan flag --detach-keys .
sumber
Jika dilampirkan
docker attach
, Anda dapat melepaskannya dengan mematikan proses pemasangan docker. Cara yang lebih baik adalah dengan menggunakan parameter sig-proxy untuk menghindari melewatkan Ctrl + C ke wadah Anda:Opsi yang sama tersedia untuk
docker run
perintah.sumber
php:7.3-apache
Jika Anda hanya ingin melihat output dari proses yang berjalan dari dalam wadah, Anda dapat melakukan yang sederhana
docker container logs -f <container id>
.The
-f
bendera membuatnya begitu bahwa output dari wadahfollowed
dan diperbarui secara real-time. Sangat berguna untuk debugging atau pemantauan.sumber
Anda dapat menggunakan
--detach-keys
opsi saat Anda menjalankandocker attach
untuk menimpa defaultCTRL + P, CTRL+ Qurut (yang tidak selalu bekerja).Misalnya, saat Anda berlari
docker attach --detach-keys="ctrl-a" test
dan Anda menekan CTRL+ AAnda akan keluar dari wadah, tanpa membunuhnya.Contoh lain:
docker attach --detach-keys="ctrl-a,x" test
- tekanCTRL+A
dan kemudianX
untuk keluardocker attach --detach-keys="a,b,c" test
- tekanA
, laluB
, laluC
untuk keluarAmbil dari dokumentasi resmi:
Jika Anda mau, Anda bisa mengonfigurasi urutan Docker key untuk dilepaskan. Ini berguna jika urutan default Docker bertentangan dengan urutan kunci yang Anda gunakan untuk aplikasi lain. Ada dua cara untuk menentukan urutan kunci pelepasan Anda sendiri, sebagai penggantian per-wadah atau sebagai properti konfigurasi di seluruh konfigurasi Anda.
Untuk mengganti urutan untuk wadah individu, gunakan
--detach-keys="<sequence>"
bendera dengan perintah lampiran buruh pelabuhan. Format<sequence>
huruf dapat berupa huruf[a-Z]
, atauctrl-
digabungkan dengan yang berikut ini:Ini
a
,ctrl-a
,X
, atauctrl-\\
nilai-nilai merupakan contoh urutan kunci yang valid. Untuk mengonfigurasi urutan kunci default konfigurasi yang berbeda untuk semua wadah, lihat bagian File konfigurasi .Catatan: Ini berfungsi sejak versi buruh pelabuhan 1.10+ (pada saat jawaban ini, versi saat ini adalah 18.03)
sumber
Posting lama tetapi keluar begitu saja kemudian mulai lagi ... masalahnya adalah jika Anda menggunakan mesin windows Ctrl p atau Ctrl P terikat untuk mencetak ... keluar dari awal wadah tidak boleh melukai apa pun
sumber