Temukan id kontainer Anda yang terhenti
docker ps -a
Komit wadah yang dihentikan:
Perintah ini menyimpan keadaan wadah yang dimodifikasi menjadi gambar baru user/test_image
docker commit $CONTAINER_ID user/test_image
Mulai / jalankan dengan titik masuk yang berbeda:
docker run -ti --entrypoint=sh user/test_image
Deskripsi argumen titik masuk: https://docs.docker.com/engine/reference/run/#/entrypoint-default-command-to-execute-at-runtime
catatan:
Langkah-langkah di atas hanya memulai wadah yang dihentikan dengan keadaan sistem file yang sama. Itu bagus untuk penyelidikan cepat. Tetapi variabel lingkungan, konfigurasi jaringan, volume terlampir dan staf lain tidak diwariskan, Anda harus menentukan semua argumen ini secara eksplisit.
Langkah-langkah untuk memulai wadah yang dihentikan telah dipinjam dari sini: (komentar terakhir) https://github.com/docker/docker/issues/18078
inspect
output menjadi konfigurasi yang digunakan dengan proses selanjutnya?Edit file ini (sesuai dengan wadah Anda yang dihentikan):
Ubah parameter "Path" untuk menunjuk pada perintah baru Anda, misalnya / bin / bash. Anda juga dapat mengatur parameter "Args" untuk meneruskan argumen ke perintah.
Mulai ulang layanan buruh pelabuhan (perhatikan ini akan menghentikan semua wadah yang berjalan):
Daftar wadah Anda dan pastikan perintah telah berubah:
Mulai wadah dan pasangkan, Anda sekarang harus berada di shell Anda!
Bekerja pada Fedora 22 menggunakan Docker 1.7.1.
CATATAN: Jika shell Anda tidak interaktif (misalnya Anda tidak membuat wadah asli dengan opsi -it), Anda dapat mengubah perintah menjadi "/ bin / sleep 600" atau "/ bin / tail -f / dev / null" untuk memberi Anda cukup waktu untuk melakukan "docker exec -it CONTID / bin / bash" sebagai cara lain untuk mendapatkan shell.
CATATAN2: Versi buruh pelabuhan yang lebih baru memiliki config.v2.json, di mana Anda harus mengubah Entri atau Cmd (terima kasih pengguna 60561).
sumber
..."Path":"tail","Args":["-f","/dev/null"]...
config.v2.json
, di mana Anda perlu mengubah salah satuEntrypoint
atauCmd
.Tambahkan tanda centang di bagian atas skrip Entrypoint Anda
Docker benar-benar perlu mengimplementasikan ini sebagai fitur baru, tetapi inilah pilihan solusi lain untuk situasi di mana Anda memiliki Entrypoint yang berakhir setelah sukses atau gagal, yang dapat menyulitkan untuk debug.
Jika Anda belum memiliki skrip Entrypoint, buat skrip yang menjalankan perintah apa pun yang Anda perlukan untuk wadah Anda. Kemudian, di bagian atas file ini, tambahkan baris ini ke
entrypoint.sh
:Untuk memastikan yang
cat
memegang koneksi, Anda mungkin perlu memberikan TTY. Saya menjalankan wadah dengan skrip Entrypoint saya seperti:Ini akan menyebabkan skrip dijalankan sekali, membuat file yang mengindikasikan skrip tersebut sudah berjalan (dalam sistem file virtual kontainer). Anda kemudian dapat memulai kembali wadah untuk melakukan debugging:
Ketika Anda me-restart wadah,
already_ran
file akan ditemukan, menyebabkan skrip Entrypoint berhenticat
(yang hanya menunggu selamanya untuk input yang tidak akan pernah datang, tetapi menjaga wadah tetap hidup). Anda kemudian dapat menjalankanbash
sesi debugging :Saat wadah berjalan, Anda juga dapat menghapus
already_ran
dan menjalankanentrypoint.sh
skrip secara manual untuk menjalankannya kembali, jika Anda perlu men-debug dengan cara itu.sumber
/bin/sh
alih-alihcat
- maka Anda selalu bisa masuk hanya dengan memulai ulang. Batuan solusi Anda!Masalahku:
docker run <IMAGE_NAME>
docker ps -a
saya bisa melihat dua kontainer.docker run <IMAGE_NAME>
perintah, gambar baru mulai dibuatSolusi: Untuk mengerjakan wadah yang sama yang Anda buat di tempat pertama jalankan ikuti langkah-langkah ini
docker ps
untuk mendapatkan wadah dari wadah Andadocker container start <CONTAINER_ID>
untuk memulai wadah yang adadocker exec -it <CONTAINER_ID> /bin/bash
sumber
docker run <containerID>
Saya mengambil jawaban @ Dmitriusan dan membuatnya menjadi alias:
Tambahkan ini ke
~/.bashrc
file alias Anda , dan Anda akan memilikidocker-run-prev-container
alias baru yang bagus yang akan menjatuhkan Anda ke shell di wadah sebelumnya.Bermanfaat untuk debugging gagal
docker build
s.sumber
Ini bukan apa yang Anda minta, tetapi Anda dapat menggunakan
docker export
wadah yang sudah berhenti jika yang Anda inginkan adalah memeriksa file.sumber
Tidak ditentukan apakah wadahnya keluar, hanya saja kode Anda mogok dan Anda perlu melihat apa yang terjadi di dalam wadah. Jika tidak keluar, berikut adalah solusi potensial lainnya.
Dapatkan id kontainer
docker ps
docker exec -it 665b4a1e17b6 /bin/sh
Jika titik masuk diatur ke sesuatu yang bermasalah, itu juga dapat diganti seperti yang disarankan dalam jawaban Dmitriusan. Perlu juga dicatat bahwa Anda dapat menempel pada wadah berjalan dengan
docker attach
. Begitu banyak solusi solusi yang berbeda. Saya hanya tidak melihat perlunya komitmen pada gambar. Sepertinya tidak perlu.Documents for Docker exec - https://docs.docker.com/engine/reference/commandline/exec/
Lampirkan Documents untuk Docker - https://docs.docker.com/engine/reference/commandline/attach/
sumber
Saya sebenarnya tidak setuju dengan kedua jawaban ini. Jika Anda hanya ingin melihat apa yang ada di dalam wadah, maka Anda dapat menjalankan perintah ini untuk mendapatkan shell. Tidak perlu mengubah titik masuk sama sekali atau konfigurasi apa pun.
sumber
docker logs <container_id> --follow
akan memberikan apa yang Anda butuhkan. Alternatif lain adalah dengan menggunakan perintah di atas kemudian mulai layanan mogok pada gambar itu dengan perintah yang sama di dockerfile dan debug dari sana.sumber