Mencoba memperbaiki kesalahan dan masalah debug dengan aplikasi saya yang terbagi menjadi beberapa kontainer, saya sering mengedit file dalam kontainer:
entah saya malas sekali dan menginstal nano dan mengedit langsung di container atau
Saya buruh pelabuhan cp file keluar dari wadah, mengeditnya, menyalinnya kembali dan memulai ulang wadah
Itu adalah langkah-langkah perantara sebelum datang ke konten baru untuk pembuatan kontainer, yang membutuhkan waktu lebih lama daripada melakukan hal di atas (yang tentu saja hanya perantara / mengutak-atik).
Sekarang saya sering memutus program awal wadah, yang dalam kasus pelanggaran adalah skrip node atau skrip server web python, keduanya biasanya gagal karena kesalahan sintaks.
Apakah ada cara untuk menyimpan kontainer itu? Karena mereka tidak mulai, saya tidak bisa menjadi buruh pelabuhan eksekutif ke mereka, dan dengan demikian mereka hilang dari saya. Saya kemudian pergi ke rute rm / rmi / build / run setelah memperbaiki file yang menyinggung di input build.
Bagaimana cara mengedit file dalam penampung yang dihentikan, atau memasukkannya ke dalam atau memulai shell di penampung yang dihentikan - apa pun yang memungkinkan saya untuk memperbaiki penampung ini?
(Sepertinya bekerja pada komputer jarak jauh dan merusak konfigurasi jaringan - koneksi hilang "selamanya" dengan cara ini dan seseorang harus menggunakan fallback, jika ada.)
Bagaimana cara mengedit file kontainer Docker dari host? terlihat relevan tetapi sudah usang.
docker cp
file ke penampung (atau membuat gambar baru)docker commit
perintah untuk memecah gambar baru.name=$(docker commit); docker run -it $name /bin/sh
akan melakukan apa yang kamu inginkan.Jawaban:
Saya mengalami masalah dengan penampung yang tidak dapat dimulai karena perubahan konfigurasi yang buruk yang saya buat. Saya dapat menyalin file dari penampung yang dihentikan dan mengeditnya. sesuatu seperti:
(perbaiki file)
sumber
UpperDir
Anda dapatkan daridocker container inspect
- Anda harus bereksperimen untuk melihat bagaimana sistem overlay merepresentasikan file dalam struktur dasar yang telah dihapus di lapisan atas.Menjawab pertanyaanku sendiri .. masih berharap untuk jawaban yang lebih baik dari orang yang lebih berpengetahuan !!
Ada 2 kemungkinan.
1) Mengedit sistem file di host secara langsung . Ini agak berbahaya dan memiliki peluang untuk benar-benar merusak penampung, mungkin data lain tergantung pada apa yang salah.
2) Mengubah skrip startup menjadi sesuatu yang tidak pernah gagal seperti memulai bash, melakukan perbaikan / pengeditan dan kemudian mengubah program startup lagi ke program yang diinginkan (seperti node atau apa pun sebelumnya).
Keterangan lebih lanjut:
1) Menggunakan
untuk menemukan wadah yang sedang berjalan atau
untuk menemukan semua kontainer (termasuk yang dihentikan) dan
cari "Id", salah satu nilai pertama.
Ini adalah bagian yang berisi detail implementasi dan mungkin berubah, ketahuilah bahwa Anda mungkin kehilangan penampung dengan cara ini.
Pergi ke
dan di sana Anda akan menemukan semua file yang diubah menjadi gambar yang menjadi dasar container. Anda dapat menimpa file, menambah atau mengedit file.
Sekali lagi, saya tidak akan merekomendasikan ini.
2) Seperti yang dijelaskan di https://stackoverflow.com/a/32353134/586754 Anda dapat menemukan konfigurasi json config.json di jalur seperti
Di sana Anda dapat mengubah args dari misalnya "nodejs app.js" menjadi "/ bin / bash". Sekarang restart layanan buruh pelabuhan dan mulai penampung (Anda akan melihat bahwa sekarang dimulai dengan benar). Kamu harus menggunakan
untuk memastikannya tidak langsung berhenti. Anda sekarang dapat bekerja dengan wadah dan / atau nanti memasang dengan
docker exec -ti (containername) /bin/bash
Selain itu, docker cp cukup berguna untuk menyalin file yang diedit di luar container.
Juga, seseorang hanya boleh kembali ke langkah-langkah tersebut jika wadahnya lebih atau kurang "hilang", jadi setiap perubahan akan menjadi perbaikan.
sumber
config.json
file setiap kali saya mengeditnyaAnda dapat mengedit sistem file kontainer secara langsung, tetapi saya tidak tahu apakah itu ide yang bagus. Pertama, Anda perlu menemukan jalur direktori yang digunakan sebagai root runtime untuk container. Lari
docker container inspect id/name
. Cari kunciUpperDir
dalam keluaran JSON.Itu adalah direktori Anda.
sumber
Jika Anda mencoba untuk memulai ulang penampung yang dihentikan dan perlu mengubah penampung karena kesalahan konfigurasi tetapi penampung tidak dapat dimulai, Anda dapat melakukan hal berikut yang berfungsi menggunakan perintah "docker cp" (mirip dengan saran sebelumnya). Prosedur ini memungkinkan Anda menghapus file dan melakukan perubahan lain yang diperlukan. Jika beruntung, Anda dapat melewati banyak langkah di bawah ini.
Ubah atau buat skrip entrypoint baru misalnya
#!/bin/bash tail -f /etc/hosts
sumber