Rumah Operasi dan penyelenggaraan Docker Bagaimana untuk menyelesaikan masalah bahawa aliran fail muat naik docker tidak boleh dibaca

Bagaimana untuk menyelesaikan masalah bahawa aliran fail muat naik docker tidak boleh dibaca

Mar 31, 2023 pm 06:38 PM

Dengan populariti teknologi kontena, Docker telah menjadi platform pilihan untuk pembangunan dan penggunaan banyak aplikasi asli awan. Salah satu senario aplikasi biasa ialah interaksi antara bekas dan sumber luaran, seperti memuat naik dan memuat turun fail, dsb. Tetapi kadangkala apabila menggunakan bekas Docker untuk memuat naik fail, anda mungkin mendapati bahawa aliran fail tidak boleh dibaca. Artikel ini akan meneroka sebab ini berlaku dan cara membetulkannya.

1. Penerangan Masalah

Apabila saya menggunakan bekas Docker untuk memuat naik fail, saya mendapati muat naik berjaya, tetapi terdapat masalah semasa membaca strim fail dan aliran fail adalah kosong. Saya telah mencuba pelbagai kaedah, termasuk menggunakan pembacaan fail tempatan dan pembacaan fail jauh, tetapi tidak dapat menyelesaikannya. Berikut ialah contoh kod saya:

import io
from datetime import datetime
from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/upload', methods=['POST'])
def upload_file():
    f = request.files['file']
    stream = io.StringIO()
    stream.write(f.stream.read())
    stream.seek(0)
    print(stream.read())
    return jsonify({'success': True})

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000, debug=True)
Salin selepas log masuk

Apabila menggunakan perintah curl untuk memuat naik fail, anda boleh melihat bahawa muat naik berjaya, tetapi apabila membaca aliran fail ia kosong:

$ curl -X POST -F "file=@test.txt" http://localhost:5000/upload
{"success": true}
$ python app.py
2019-12-26 16:10:10,990 - INFO - * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
2019-12-26 16:10:16,930 - INFO -
Salin selepas log masuk

2. Analisis Masalah

Di dalam bekas, anda boleh menggunakan perintah docker cp untuk menyalin fail ke bahagian dalam bekas untuk ujian dengan bacaan aliran fail. Jadi masalahnya jelas bukan dengan kod yang membaca aliran fail.

Saya menyemak beberapa maklumat dan mendapati Docker akan menggunakan TempFS sebagai direktori storan sementara untuk fail yang dimuat naik semasa memproses fail yang dimuat naik. Sebab yang mungkin ialah pengasingan sistem fail di dalam bekas menghalang fail yang dimuat naik daripada dibaca.

3. Penyelesaian

Untuk menyelesaikan masalah ini, anda perlu menggunakan mana-mana daripada tiga kaedah:

  1. Gunakan --privileged untuk menjalankan bekas

Dayakan mod istimewa, iaitu gunakan --privileged untuk menjalankan bekas. Pilihan ini akan memberikan akses akar kontena kepada hos.

$ docker run --privileged -d -p 5000:5000 my-image
Salin selepas log masuk
  1. Gunakan pilihan --tmpfs /path/to/tmpfs:rw

Gunakan --tmpfs untuk memasang sistem fail sementara bagi memastikan fail yang dimuat naik boleh dibaca dengan betul.

$ docker run -d -p 5000:5000 --tmpfs /tmp:rw my-image
Salin selepas log masuk
  1. Lekapkan direktori tempatan secara langsung pada bekas

Lekapkan direktori secara terus dalam sistem fail hos ke laluan tertentu bekas, yang boleh membuat dalam dan luar bekas Semua fail yang dimuat naik boleh dibaca dengan betul.

$ docker run -d -p 5000:5000 -v /path/to/host/drive:/path/to/container/drive my-image
Salin selepas log masuk

Gunakan mana-mana kaedah di atas dan muat naik ujian sekali lagi Anda boleh melihat bahawa kedua-dua muat naik dan membaca strim fail berjaya:

$ curl -X POST -F "file=@test.txt" http://localhost:5000/upload
{"success": true}
$ python app.py
2019-12-26 16:55:01,697 - INFO - * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
2019-12-26 16:55:03,428 - INFO - This is a test file.
Salin selepas log masuk

Ringkasnya, sistem fail Docker. mekanisme pengasingan kadangkala Ini akan menyebabkan fail yang dimuat naik tidak dibaca dengan betul, tetapi terdapat tiga penyelesaian di atas. Saya harap artikel ini dapat membantu anda dengan masalah yang anda hadapi semasa menggunakan aplikasi Docker.

Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan masalah bahawa aliran fail muat naik docker tidak boleh dibaca. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Soalan Temuduga Docker: Ace Wawancara Kejuruteraan DevOps Anda Soalan Temuduga Docker: Ace Wawancara Kejuruteraan DevOps Anda Apr 06, 2025 am 12:01 AM

Docker adalah kemahiran yang mesti ada untuk jurutera DevOps. 1.Docker adalah platform kontena sumber terbuka yang mencapai pengasingan dan mudah alih dengan aplikasi pembungkusan dan kebergantungan mereka ke dalam bekas. 2. Docker bekerja dengan ruang nama, kumpulan kawalan dan sistem fail bersekutu. 3. Penggunaan asas termasuk mencipta, menjalankan dan menguruskan bekas. 4. Penggunaan lanjutan termasuk menggunakan DockerCompose untuk menguruskan aplikasi multi-kontainer. 5. Kesilapan umum termasuk kegagalan kontena, masalah pemetaan pelabuhan, dan masalah ketekunan data. Kemahiran penyahpepijatan termasuk log melihat, memasukkan bekas, dan melihat maklumat terperinci. 6. Pengoptimuman prestasi dan amalan terbaik termasuk pengoptimuman imej, kekangan sumber, pengoptimuman rangkaian dan amalan terbaik untuk menggunakan Dockerfile.

Jilid Docker: Menguruskan data berterusan dalam bekas Jilid Docker: Menguruskan data berterusan dalam bekas Apr 04, 2025 am 12:19 AM

Dockervolumes memastikan data tetap selamat apabila bekas dimulakan semula, dipadam, atau berhijrah. 1. Buat Jilid: DockervolumecreatemyData. 2. Jalankan bekas dan gunung: dockerrun-it-vmydata:/app/dataubuntubash. 3. Penggunaan lanjutan termasuk perkongsian data dan sandaran.

Docker Security Hardening: Melindungi bekas anda dari kelemahan Docker Security Hardening: Melindungi bekas anda dari kelemahan Apr 05, 2025 am 12:08 AM

Kaedah Peningkatan Keselamatan Docker termasuk: 1. Gunakan parameter-cap-drop untuk menghadkan keupayaan Linux, 2. Buat bekas baca sahaja, 3 set tag Selinux. Strategi ini melindungi bekas dengan mengurangkan pendedahan kelemahan dan mengehadkan keupayaan penyerang.

Cara mengemas kini imej Docker Cara mengemas kini imej Docker Apr 15, 2025 pm 12:03 PM

Langkah -langkah untuk mengemas kini imej Docker adalah seperti berikut: Tarik tag imej terkini imej baru memadam imej lama untuk tag tertentu (pilihan) mulakan semula bekas (jika diperlukan)

Cara menggunakan desktop docker Cara menggunakan desktop docker Apr 15, 2025 am 11:45 AM

Bagaimana cara menggunakan desktop Docker? Docktop Docktop adalah alat untuk menjalankan bekas Docker pada mesin tempatan. Langkah -langkah untuk digunakan termasuk: 1. Pasang desktop Docker; 2. Mulakan desktop Docker; 3. Buat imej Docker (menggunakan Dockerfile); 4. Membina imej Docker (menggunakan Docker Build); 5. Jalankan bekas Docker (menggunakan Docker Run).

Cara menyalin fail di Docker ke luar Cara menyalin fail di Docker ke luar Apr 15, 2025 pm 12:12 PM

Kaedah untuk menyalin fail ke tuan rumah luaran di Docker: Gunakan arahan CP Docker: Jalankan Docker CP [Options] & lt; Container Path & GT; & lt; PATH HOST & GT;. Menggunakan jumlah data: Buat direktori pada tuan rumah, dan gunakan parameter -V parameter untuk memasang direktori ke dalam bekas apabila membuat bekas untuk mencapai penyegerakan fail bidirectional.

Cara keluar dari bekas dengan Docker Cara keluar dari bekas dengan Docker Apr 15, 2025 pm 12:15 PM

Empat cara untuk keluar dari Docker Container: Gunakan Ctrl D di terminal kontena masukkan perintah keluar di terminal kontena Gunakan Docker Stop & lt; container_name & gt; Perintah Gunakan Docker Kill & lt; container_name & gt; Perintah di terminal tuan rumah (keluar kuasa)

Menggunakan Docker dengan Linux: Panduan Komprehensif Menggunakan Docker dengan Linux: Panduan Komprehensif Apr 12, 2025 am 12:07 AM

Menggunakan Docker di Linux dapat meningkatkan kecekapan pembangunan dan penempatan. 1. Pasang Docker: Gunakan skrip untuk memasang Docker di Ubuntu. 2. Sahkan pemasangan: Jalankan Sudodockerrunhello-World. 3. Penggunaan Asas: Buat kontena Nginx Dockerrun-Namemy-Nginx-P8080: 80-Dnginx. 4. Penggunaan Lanjutan: Buat imej tersuai, bina dan lari menggunakan Dockerfile. 5. Pengoptimuman dan amalan terbaik: Ikuti amalan terbaik untuk menulis dockerfiles menggunakan pelbagai peringkat membina dan dockercompose.

See all articles