Kontainer Docker memiliki mode interaktif yang memungkinkan Anda melampirkan aliran input dan output terminal ke proses kontainer. Menekan Ctrl-C biasanya akan menghentikan
proses itu, menyebabkan penampung berhenti. Ini untuk melepaskan dari sesi tanpa menghentikan penampung.
Melepas Tanpa Berhenti
Docker mendukung kombinasi keyboard untuk melepaskan dengan anggun dari sebuah wadah. Tekan Ctrl-P, diikuti dengan Ctrl-Q, untuk melepaskan koneksi Anda.
Anda akan dikembalikan ke shell Anda, tetapi proses yang terpasang sebelumnya akan tetap hidup, menjaga container Anda tetap berjalan. Anda dapat memeriksa ini dengan menggunakan docker ps
untuk mendapatkan daftar container yang sedang berjalan.
Menekan Ctrl-C atau menjalankan exit
perintah biasanya akan mematikan proses latar depan wadah kecuali jika telah dikonfigurasi secara khusus. Wadah Docker harus memiliki proses latar depan yang berjalan; sebuah wadah tanpa satu akan memasuki keadaan berhenti.
Mengubah Urutan Lepas Keyboard
Anda dapat mengubah urutan pelepasan agar sesuai dengan preferensi Anda atau menghindari konflik dengan pintasan keyboard yang diterapkan oleh aplikasi Anda. Tambahkan detachKeys
properti ke ~/.docker/config.json
Anda file untuk menentukan kunci yang ingin Anda gunakan.
Docker mendukung a-z
karakter dan @
, ^
, dan _
, simbol, serta tanda kurung siku kiri ([
) dan dua garis miring terbalik (\
). Ini semua digunakan bersama dengan Ctrl-
kunci; huruf juga dapat digunakan satu per satu, tanpa Ctrl
.
Urutan kunci dinyatakan sebagai daftar yang dipisahkan koma:
{ "detachKeys": "Ctrl-d,d" }
Contoh ini akan terlepas dari wadah saat Anda menekan Ctrl-D
langsung diikuti oleh d
kunci.
Mengubah Urutan berdasarkan Per-Container
Selain mengubah konfigurasi global Anda, Docker menerima detachKeys
menimpa pada basis per-wadah dan per-attachment. Tambahkan --detach-keys
tandai ke perintah yang dapat dilampirkan ke proses kontainer untuk mengatur urutan tertentu.
Perintah yang mendukung ini adalah:
docker run
docker start
docker exec
docker attach
Berikut cara melampirkan ke wadah dan kemudian menggunakan Ctrl-d
, diikuti dengan garis bawah, untuk melepaskan:
docker attach my-container --detach-keys="Ctrl-d,_"
--detach-keys
flag menggunakan format urutan kunci yang sama dengan detachKeys
opsi konfigurasi. Bendera menimpa docker.json
. Anda pengaturan; ini pada gilirannya menimpa urutan Ctrl-P/Ctrl-Q default Docker.
Melepaskan Saat Urutan Keyboard Tidak Berfungsi
Terkadang Anda mungkin menemukan proses penampung yang menolak untuk melepaskan, bahkan saat Anda mengeluarkan urutan keyboard. Ini dapat terjadi jika aliran input container tidak terhubung ke terminal Anda (-i
flag) atau tidak memiliki pseudo-TTY yang dialokasikan (-t
bendera). Anda juga dapat menemukan masalah ini jika proses penampung Anda menangani urutan kunci pelepasan dan Anda tidak menimpanya saat Anda melampirkannya.
Masih mungkin untuk melepaskan terminal Anda dari wadah dalam keadaan ini. Anda perlu membuka sementara jendela shell lain dan menggunakannya untuk mematikan docker.attach
proses yang membuat lampiran tetap aktif.
Pertama-tama temukan ID proses dari proses lampiran:
ps -ef | grep attach
Gunakan output dari ps
untuk mengidentifikasi docker.attach
proses yang Anda butuhkan untuk membunuh. Perintah di CMD
kolom harus mengidentifikasi lampiran yang Anda cari. Catat nomor PID yang relevan dan gunakan kill
perintah untuk mematikan proses ini:
kill -9 <PID>
Anda akan melihat shell asli Anda terlepas dari wadah Docker Anda dan kembali ke status operasi normal. Anda sekarang dapat menutup cangkang kedua dan melanjutkan menggunakan yang asli.
Teknik ini bekerja dengan mematikan proses Docker CLI yang menghubungkan terminal ke container, bukan proses di dalam container yang membuatnya tetap berjalan. Terminal asli Anda dapat digunakan kembali dan wadah tetap menyala.
Menyambungkan kembali ke Container Anda
Anda dapat memasang kembali ke wadah menggunakan docker attach
memerintah. Ini secara otomatis melampirkan input, output, dan aliran kesalahan terminal Anda ke wadah yang ditentukan:
docker attach my-container
Ketiga aliran terhubung secara default. Anda dapat menghilangkan aliran input dengan meneruskan --no-stdin
bendera. Keluaran kontainer akan dialirkan ke terminal Anda, tetapi Anda tidak akan dapat memberikan masukan apa pun.
Gunakan urutan keyboard lagi untuk melepaskan, atau Ctrl-C
untuk menghentikan proses dan wadah. Jika Anda menggunakan Ctrl-C
atau exit
, docker attach
akan mengatur $?
variabel di shell Anda dengan benar sehingga Anda dapat memeriksa kode keluar container.
Ringkasan
Cara yang benar untuk melepaskan dari wadah Docker adalah urutan keyboard yang cukup tidak jelas yang menjatuhkan Anda kembali ke shell Anda. Anda dapat menyesuaikan urutan ini untuk meningkatkan daya ingat dan menghindari konflik dengan penanganan keyboard container Anda.
Urutan pelepasan keyboard bisa menjadi tidak efektif dalam beberapa keadaan. Masih mungkin untuk melepaskan dari wadah Anda dengan mengidentifikasi dan mematikan proses yang mendukung lampiran. Perintah Unix biasa seperti ps
dan kill
harus digunakan dalam skenario ini.
Terakhir, jika Anda ingin wadah Anda terlepas secara permanen, mulailah dengan -d
flag (docker run -d my-image:latest
). Ini akan mengirim wadah langsung ke latar belakang dan tidak mengeluarkan output ke shell Anda. Kontainer yang terpisah selalu terlihat menggunakan docker ps
perintah dan dapat dihentikan dengan docker stop my-container
.