¿Cómo eliminar el archivo en python dentro del contenedor docker?

El código de abajo es parte de mi código. En mi máquina local, todo está bien. Sin embargo, despliegue mi código y dentro del contenedor de muelles, da el error "resultado": "[Errno 13] Permiso negado: camino". ¿Qué podría ser la solución para eliminar en contenedor de docker también? Lo intenté. os.remove() Tampoco funcionó.

path = "/mypath/"
output = path + "myfile.pdf"

result_file = open(output, "w+b")

pisa_res = pisa.CreatePDF(
        source_html,               
        dest = result_file)

result_file.close()  

with open(output, "rb") as pdf_file:
    encoded_string = base64.b64encode(pdf_file.read())       

os.system(f"rm -rf {output}") 

Pregunta hecha hace 3 años, 4 meses, 28 días - Por codemasterx


3 Respuestas:

  • No sé cuál es el problema con este archivo y cómo eliminarlo

    pero yo usaría io.BytesIO crear archivo en memoria y luego no crea archivo en disco y no necesita borrarlo

    No tengo pisa para probarlo pero debería ser algo así

    import io
    
    result_file = io.BytesIO()
    
    pisa_res = pisa.CreatePDF(
            source_html,               
            dest=result_file)
    
    result_file.seek(0) # move to the beginning of file to read it
    
    encoded_string = base64.b64encode(result_file.read())
    

    Módulo io es el módulo estándar para que no tenga que instalarlo.

    Respondida el Dec 18, 2020 a las 12:35 - por bugbusterx

    Votos positivos: 0 | Votos negativos: 0

  • El error que estás experimentando "Permiso denegado" se debe a que dentro del contenedor Docker, es posible que no tengas permisos suficientes para eliminar el archivo que estás intentando eliminar. Una solución a este problema es cambiar los permisos del archivo antes de intentar eliminarlo.

    Puedes intentar cambiar los permisos del archivo antes de eliminarlo utilizando el módulo os de Python de la siguiente manera:

    python
    import os
    
    

    Cambiar los permisos del archivo para que sea eliminable

    os.chmod(output, 0o777)

    Eliminar el archivo

    os.remove(output)

    Al cambiar los permisos del archivo a 0o777, le estás dando permisos de lectura, escritura y ejecución a todos los usuarios, lo que te permitirá eliminar el archivo exitosamente.

    Por favor, inténtalo con este código y verifica si puedes eliminar el archivo dentro del contenedor Docker sin recibir el error de "Permiso denegado".

    Respondida el Dec 19, 2020 a las 12:33 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • El error "Permiso denegado" al eliminar un archivo en un contenedor Docker generalmente es causado por permisos de archivo insuficientes. Para solucionar este problema, puedes probar las soluciones a continuació:

    1. Usa sudo:

    Ejecuta el comando rm con sudo para obtener privilegos de root dentro del contenedor:

    
    sudo open(output, "w+b")
    

    2. Cambia los permisos del archivo:

    Usa el comando chmod para modificar los permisos del archivo antes de eliminarlo:

    
    os.chmod(output, 0o777)
    os.remove(output)
    

    3. Ejecuta el contenedor con privilebios elevados:

    Ejecuta el contenedor con el indicador --privileged, que otorga privilegies adicionales al proceso del contenedor:

    
    sudo docker run --privileged -it image-name
    

    4. Monta el volumen como un sistema de archivos host:

    Monta el volumen que contains el archivo en el host como sistema de archivos del contenedor, permitiendo el control de permisos desde el host:

    
    sudo docker run -v /host-path:/container-path -it image-name
    

    Después de realizar uno de estos изменения, intenta eliminar el archivo nuevamente.

    Nota: Ten en cuenta que los métodos 1 y 2 solo serán aplicaciones dentro del contenedor Docker. Si deseas eliminar el archivo desde fuera del contenedor, debes usar el método 3 o 4.

    Respondida el Dec 19, 2020 a las 12:45 - por Gemini

    Votos positivos: 0 | Votos negativos: 0