En esta página, se describe el uso de los sistemas de archivos de red CIFS/SMB con Cloud Run.
Si usas NFS, Filestore o Cloud Storage FUSE en Cloud Run, consulta las siguientes páginas:
- Configuración de volúmenes NFS para servicios, trabajos o grupos de trabajadores
- Configuración del volumen de Cloud Storage para servicios, trabajos o grupos de trabajadores.
Limitaciones
Debes especificar el entorno de ejecución de segunda generación cuando uses
smbnetfs.Debido a la restricción del entorno de ejecución de Cloud Run, no se puede activar CIFS/SMB directamente dentro de Cloud Run. Sin embargo, puedes usar clientes SMB que no dependan del montaje del kernel, como
smbnetfs(basado en FUSE) osmbclient.Cloud Run está diseñado para escalar con rapidez a una gran cantidad de instancias. Sin embargo, la mayoría de los sistemas de archivos de red no están diseñados para su uso simultáneo por una gran cantidad de clientes. En el caso de los servicios de Cloud Run, considera usar la función de cantidad máxima de instancias para limitar la cantidad de instancias de Cloud Run.
Usa smbnetfs
smbnetfs es un sistema de archivos basado en FUSE que te permite activar recursos compartidos de SMB como parte de la jerarquía del sistema de archivos local.
Para usar smbnetfs con Cloud Run, actualiza tu Dockerfile para instalar smbnetfs y sus dependencias, y configura las credenciales.
Configura smbnetfs en Dockerfile
Agrega las siguientes instrucciones a tu Dockerfile:
# Install smbnetfs, fuse and other dependencies
RUN apt-get update && apt-get install -y smbnetfs fuse && rm -rf /var/lib/apt/lists/*
# Setup smbnetfs configuration
RUN mkdir -p ~/.smb
# Check if files exist before copying, as strict locations might vary or be missing in minimal images
RUN [ -f /etc/smbnetfs.conf ] && cp /etc/smbnetfs.conf ~/.smb/ || echo "smbnetfs.conf not found"
# Create the auth file
# In production, use mechanisms like [Secret Manager](/run/docs/configuring/services/secrets) to handle credentials
# securely instead of placing them directly in the Dockerfile.
RUN echo 'auth "<smb-server-ip>" "<smb-username>" "<smb-password>"' > ~/.smb/smbnetfs.auth
RUN chmod 600 ~/.smb/smbnetfs.auth
# Create the host file
RUN echo 'host <smb-server-ip> visible=true' > ~/.smb/smbnetfs.host
RUN chmod 600 ~/.smb/smbnetfs.host
# Enable the includes in the main config if they exist
RUN if [ -f ~/.smb/smbnetfs.conf ]; then \
sed -i 's/^#include "smbnetfs.auth"/include "smbnetfs.auth"/' ~/.smb/smbnetfs.conf && \
sed -i 's/^#include "smbnetfs.host"/include "smbnetfs.host"/' ~/.smb/smbnetfs.conf; \
fi
Reemplaza <smb-server-ip>, <smb-username> y <smb-password> por los detalles de conexión de tu servidor SMB.
Activa el recurso compartido de SMB durante el inicio del contenedor
Ejecuta smbnetfs para activar el recurso compartido cuando se inicie tu contenedor y antes de que se inicie tu aplicación. Si tu contenedor se ejecuta como un usuario no raíz, es posible que debas ajustar los permisos o la configuración de FUSE.
Crea un punto de activación, como
/mnt/smb, como se muestra en el siguiente comando:mkdir /mnt/smbActiva el sistema de archivos SMB con el comando
smbnetfs:smbnetfs /mnt/smbAccede a tu recurso compartido en
/mnt/smb/<smb-server-ip>/<share-name>, como se muestra en el siguiente comando:ls /mnt/smb/smb-server-ip/share-name
Soluciona problemas
Es posible que encuentres errores de entrada/salida cuando escribas en archivos con la marca O_APPEND y smbnetfs. Encontrarás más detalles en la discusión de Stack Overflow.
Cómo usar smbclient
smbclient es una herramienta de línea de comandos que proporciona una interfaz similar a FTP para acceder a los recursos compartidos de SMB. Puedes usarlo para transferir archivos o ejecutar comandos en un servidor SMB.
Para evitar proporcionar credenciales con cada comando, puedes almacenarlas en un archivo.
Almacena tus credenciales en un archivo, por ejemplo,
smb-cred.txt:username = <smb-username> password = <smb-password>Como alternativa a un archivo de credenciales, puedes proporcionar credenciales con cada comando usando la opción
-Uo--user, por ejemplo:--user=[DOMAIN\]USERNAME[%PASSWORD].Usa la herramienta
smbclientcon la marca-Apara especificar el archivo de credenciales. Por ejemplo, para enumerar los archivos en un recurso compartido, ejecuta el siguiente comando:smbclient //smb-server-ip/share-name -A smb-cred.txt -c 'ls'
Para modificar archivos con la herramienta smbclient, descarga el archivo, modifícalo de forma local y, luego, vuelve a subirlo al recurso compartido, como se muestra en los siguientes pasos.
Descarga un archivo ejecutando el comando get:
smbclient //smb-server-ip/share-name -A smb-cred.txt -c 'get remote local'
Modifica el archivo de forma local.
Después de la modificación, sube el archivo ejecutando el comando put:
smbclient //smb-server-ip/share-name -A smb-cred.txt -c 'put local remote'
Cuando usas la herramienta smbclient, el servidor SMB te identifica con las credenciales que proporcionas. Esto permite que el servidor aplique los permisos de archivo correctos.
Para obtener una lista completa de los comandos de smbclient, consulta la documentación oficial de smbclient.