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

PHPz
PHPzasal
2023-03-31 18:38:541449semak imbas

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)

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 -

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
  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
  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

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.

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:
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