Masalah ini hanya terjadi pada wadah buruh pelabuhan.
Hanya find
baik-baik saja:
find ${BASIN_SPIDER_CONFIG_PATH} -type f -name "*.json"
find
dengan sed
find ${BASIN_SPIDER_CONFIG_PATH} -type f -name "*.json"|xargs sed -i "s/10.142.55.199/host02/g"
memberikan kesalahan:
/xxx/config/sed8Ey5tD: Device or resource busy
Saya tidak mengerti apa itu sed8Ey5tD
, ls
tidak bisa melihatnya. Saya pikir itu dengan buruh pelabuhan, tetapi tidak bisa mengetahuinya.
Bagaimana cara mencapai sed
kesuksesan?
OK, saya menemukan file itu sedang di-volum oleh buruh pelabuhan, ada volumes: /xxx/config.json : /xxx/config/config.json
di docker-compose.yml
. Setelah itu docker-compose down
, file dapat diedit. Tetapi bagaimana cara mengedit file tanpa docker-compose down
?
sed
. Ketika Anda melakukan modifikasi di tempat,sed
akan membuat file sementara untuk dikerjakan untuk mencegah rusaknya dokumen asli Anda. Jika ada yang benar, maka ganti yang asli dengan yang sementara. Tapi apa pertanyaanmu? Anda ingin tahu yang menyebabkan kesalahan itu atau apa itused8Ey5tD
file?sed
untuk tidak membuat file cadanganxargs sed -i'' "s/10.142.55.199/host02/g"
(tambahkan tanda kutip tunggal tepat setelah-i
kunci)Jawaban:
Ya, seperti yang Anda temukan, file tersebut dipasang oleh buruh pelabuhan, yang berarti Anda tidak diizinkan untuk mengubah inode dari dalam wadah buruh pelabuhan. Tapi, bagaimana jika Anda hanya mengubah konten file tanpa menyentuh inode-nya, apakah itu berfungsi? Tentu saja. Jadi yang perlu Anda lakukan adalah menemukan cara untuk mengubah konten file asli saja, daripada membuat file baru dan kemudian ganti yang asli.
Perintah
sed
dengan opsi-i
memang membuat file baru, dan kemudian mengganti file lama dengan yang baru, yang pasti akan mengubah inode file. Itu sebabnya itu memberi Anda kesalahan.Jadi, cara mana yang bisa mengubah konten file? Banyak cara.
echo abc > file
cp
, misalnya,cp new old
Berikan Anda beberapa contoh cara memperbaiki masalah Anda:
The
cp
cara:The
vim
caraThe
ed
carasumber
Imho, cara termudah untuk dilakukan adalah dengan menggunakan yang berikut di Dockerfile:
sumber