Saya berhasil melakukan shell ke wadah Docker menggunakan:
docker exec -i -t 69f1711a205e bash
Sekarang saya perlu mengedit file dan saya tidak memiliki editor di dalamnya:
root@69f1711a205e:/# nano
bash: nano: command not found
root@69f1711a205e:/# pico
bash: pico: command not found
root@69f1711a205e:/# vi
bash: vi: command not found
root@69f1711a205e:/# vim
bash: vim: command not found
root@69f1711a205e:/# emacs
bash: emacs: command not found
root@69f1711a205e:/#
Bagaimana cara saya mengedit file?
Dockerfile
dan memasukkan perintah apt-get install dan hasilkan wadah Anda sendiri? Wadah Docker dirancang seperti ini, bukan dengan cara Anda.Jawaban:
Seperti dalam komentar, tidak ada set editor default - aneh -
$EDITOR
variabel lingkungan kosong. Anda dapat masuk ke dalam wadah dengan:Dan lari:
Atau gunakan Dockerfile berikut:
Gambar Docker dikirim dipangkas ke minimum - sehingga tidak ada editor yang diinstal dengan wadah yang dikirim. Itu sebabnya ada kebutuhan untuk menginstalnya secara manual.
EDIT
Saya juga mendorong Anda membaca posting saya tentang topik tersebut.
sumber
docker exec -u 0 -it container_name bash
.vim-tiny
./var/lib/docker/
apt-get
tidak berfungsi karena masalah izin di dalam wadah, jadi saya mencobased -i 's/texttobechanged/textwanted/g' filename
. Ini berhasil untuk saya.Jika Anda tidak ingin menambahkan editor hanya untuk membuat beberapa perubahan kecil (misalnya, mengubah konfigurasi Tomcat), Anda bisa menggunakan:
yang menyalinnya ke mesin lokal Anda (ke direktori Anda saat ini). Kemudian edit file secara lokal menggunakan editor favorit Anda, dan kemudian lakukan
untuk mengganti file lama.
sumber
docker cp <container>:C:\inetpub\wwwroot\Web.config .
dandocker cp Web.config <container>:C:\inetpub\wwwroot\Web.config
.docker exec -u 0 -it mycontainer bash
) dan kemudian menjalankanchown
perintah.Anda dapat menggunakannya
cat
jika sudah terpasang, yang kemungkinan besar akan terjadi jika itu bukan wadah kosong / mentah. Ini berfungsi dalam keadaan darurat, dan ok ketika menyalin + menempel ke editor yang tepat secara lokal.cat
akan menampilkan setiap baris saat menerima baris baru. Pastikan untuk menambahkan baris baru untuk baris terakhir itu. ctrl-c mengirimkanSIGINT
kucing for untuk keluar dengan anggun. Dari komentar Anda melihat bahwa Anda juga dapat menekan ctrl-d untuk menunjukkan akhir file ("tidak ada lagi input yang masuk").Pilihan lain adalah sesuatu seperti
infilter
yang menyuntikkan proses ke dalam wadah namespace dengan beberapa keajaiban ptrace: https://github.com/yadutaf/infiltersumber
ctrl+D
lebih baik daripadactrl+C
.ctrl+D
mengirimkan sebuahEOF
. Anda tidak perlu menambahkan baris baru ekstra di akhir. Denganctrl+C
, jika Anda lupa menambahkan baris baru, Anda akan kehilangan baris terakhir!Agar gambar Docker Anda kecil, jangan pasang editor yang tidak perlu. Anda dapat mengedit file melalui SSH dari host Docker ke wadah:
sumber
vim scp://
vim.wikia dengan lebih baik . Juga, untuk mendapatkan alamat IP kontainer Anda, Anda dapat menggunakansudo docker inspect <container_id> | grep "IPAddress"
vim scp://[email protected]//data/gitea/conf/app.ini
sertavim scp://[email protected]//data/gitea/conf/app.ini
dan mereka berdua hanya membuat baru, file yang kosong.ssh
pada wadah buruh pelabuhan Anda terlebih dahulu. Lihat blog.softwaremill.com/… . Tetapi Anda umumnya tidak ingin memasangssh
di wadah Anda.Kadang-kadang Anda harus menjalankan wadah dengan
root
:Kemudian dalam wadah, untuk menginstal Vim atau yang lain:
sumber
Saya menggunakan "docker run" (bukan "docker exec"), dan saya berada di zona terbatas tempat kami tidak dapat menginstal editor. Tapi saya punya editor di host Docker.
Solusi saya adalah: Bind mount volume dari host Docker ke wadah ( https://docs.docker.com/engine/reference/run/#/volume- Shared-filesystems), dan edit file di luar wadah. Ini terlihat seperti ini:
Ini sebagian besar untuk percobaan, dan kemudian saya akan mengubah file ketika membangun gambar.
sumber
Setelah Anda mengupas wadah Docker, ketik saja:
sumber
Anda dapat membuka file yang ada dengan
dan salin semua teks yang ada di clipboard.
Kemudian hapus file lama dengan
atau ganti nama file lama dengan
Buat file baru dengan
Kemudian rekatkan semua teks yang disalin pada clipboard, tekan
Enter
dan keluar dengan menyimpan dengan menekanctrl+z
. Dan voila tidak perlu menginstal editor apa pun.sumber
Anda bisa mengedit file di host dan menyalinnya dengan cepat dan menjalankannya di dalam wadah. Berikut ini pintasan satu-baris untuk menyalin dan menjalankan file Python:
sumber
Untuk operasi edit umum saya lebih suka menginstal
vi
( vim-tiny ), yang hanya menggunakan 1491 kB ataunano
yang menggunakan 1707 kB .Di sisi lain
vim
menggunakan 28,9 MB .Kita harus ingat bahwa untuk
apt-get install
dapat bekerja, kita harus melakukanupdate
yang pertama kali, jadi:Untuk memulai editor di CLI kita harus masuk
vi
.sumber
Jika Anda menggunakan wadah Windows dan ingin mengubah file apa pun, Anda bisa mendapatkan dan menggunakan Vim di konsol Powershell dengan mudah.
Untuk dikupas ke wadah Windows Docker dengan PowerShell:
docker exec -it <name> powershell
Pertama instal manajer paket Chocolatey
Invoke-WebRequest https://chocolatey.org/install.ps1 -UseBasicParsing | Invoke-Expression;
Instal Vim
choco install vim
Refresh VARIABEL LINGKUNGAN Anda dapat
exit
dan kembali ke wadahPergi ke lokasi file dan VIM
vim file.txt
sumber
Agak edan, tetapi dalam keadaan darurat Anda dapat menggunakan
sed
atauawk
untuk mengedit kecil atau menghapus teks. Berhati-hatilah dengan target regex Anda dan berhati-hatilah bahwa Anda kemungkinan beradaroot
di wadah Anda dan mungkin harus menyesuaikan kembali izin.Misalnya, menghapus baris penuh yang berisi teks yang cocok dengan regex:
(Lebih)
sumber
Cara mudah untuk mengedit beberapa baris adalah:
sumber
Lihat pertanyaan Stack Overflow dan edit file pada tempatnya
Ini akan menjadi pilihan yang baik di sini, jika:
cat
.Instal Vim tidak diperbolehkan atau terlalu lama. Situasi saya menggunakan MySQL 5.7 gambar ketika saya ingin mengubah
my.cnf
berkas, tidak adavim
,vi
dan Vim menginstal terlalu lama (Cina Great Firewall).sed
disediakan dalam gambar, dan itu cukup sederhana. Penggunaan saya sepertised -i /s/testtobechanged/textwanted/g filename
Gunakan
man sed
atau cari tutorial lain untuk penggunaan yang lebih kompleks.sumber
Anda dapat menggunakan
cat
jika terpasang, dengan>
caracter. Ini manipulasi:Sekarang Anda dapat melihat hasilnya dengan perintah
sumber
Anda juga dapat menggunakan wadah khusus yang hanya akan berisi perintah yang Anda butuhkan: Vim. Saya memilih python-vim . Diasumsikan bahwa data yang ingin Anda edit berada dalam wadah data yang dibangun dengan Dockerfile berikut:
Anda akan dapat mengedit data Anda dengan memasang volume Docker (src_volume) yang akan dibagikan oleh wadah data Anda (src_data) dan wadah python-vim.
Dengan begitu, Anda tidak mengubah wadah Anda. Anda cukup menggunakan wadah khusus untuk pekerjaan ini.
sumber