Back to "ImageSharp con Docker"

This is a viewer only at the moment see the article on how this works.

To update the preview hit Ctrl-Alt-R (or ⌘-Alt-R on Mac) or Enter to refresh. The Save icon lets you save the markdown file to disk

This is a preview from the server running through my markdig pipeline

Docker ImageSharp

ImageSharp con Docker

Thursday, 01 August 2024

ImageSharp es una gran biblioteca para trabajar con imágenes en.NET. Es rápido, fácil de usar, y tiene un montón de características. En este post, te mostraré cómo usar ImageSharp con Docker para crear un simple servicio de procesamiento de imágenes.

¿Qué es ImageSharp?

ImageSharp me permite trabajar sin problemas con imágenes en.NET. Es una biblioteca multiplataforma que admite una amplia gama de formatos de imagen y proporciona una API sencilla para el procesamiento de imágenes. Es rápido, eficiente y fácil de usar.

Sin embargo hay un problema en mi configuración usando Docker e ImageSharp. Cuando intento cargar una imagen de un archivo, obtengo el siguiente error: 'Acceso denegado a la ruta /wwroot/cache/ etc...' Esto es causado por las instalaciones Docker ASP.NET que no permiten el acceso de escritura al directorio de caché ImageSharp utiliza para almacenar archivos temporales.

Solución

La solución es montar un volumen en el contenedor Docker que apunte a un directorio en la máquina host. De esta manera, la biblioteca ImageSharp puede escribir en el directorio de caché sin ningún problema.

Aquí está cómo hacerlo:

mostlylucid:
image: scottgal/mostlylucid:latest
volumes:
- /mnt/imagecache:/app/wwwroot/cache

Aquí puede ver que mapeo el archivo /app/wwwroot/cache a un directorio local en mi máquina de host. De esta manera, ImageSharp puede escribir en el directorio de caché sin ningún problema.

En mi máquina Ubuntu creé un directorio /mnt/imagecache y luego corrí el comando folowing para que sea escribible (por cualquiera, sé que esto no es seguro pero no soy un gurú de Linux :))

chmod  777 -p /mnt/imagecache

En mi program.cs tengo esta línea:

builder.Services.AddImageSharp().Configure<PhysicalFileSystemCacheOptions>(options => options.CacheFolder = "cache");

Como el cacheroot predeterminado a wwwroot esto ahora escribirá en el directorio /mnt/imagecache en el equipo host.

logo

©2024 Scott Galloway