Utiliser le système de fichiers réseau CIFS/SMB

Cette page décrit l'utilisation des systèmes de fichiers réseau CIFS/SMB avec Cloud Run.

Si vous utilisez NFS, Filestore ou Cloud Storage FUSE sur Cloud Run, consultez les pages suivantes :

Limites

  • Vous devez spécifier l'environnement d'exécution de deuxième génération lorsque vous utilisez smbnetfs.

  • En raison de la restriction de l'environnement d'exécution Cloud Run, CIFS/SMB ne peut pas être installé directement dans Cloud Run. Toutefois, vous pouvez utiliser des clients SMB qui ne s'appuient pas sur le montage du noyau, comme smbnetfs (basé sur FUSE) ou smbclient.

  • Cloud Run est conçu pour évoluer rapidement vers un grand nombre d'instances. Cependant, la plupart des systèmes de fichiers réseau ne sont pas conçus pour être utilisés simultanément par un grand nombre de clients. Pour les services Cloud Run, envisagez d'utiliser la fonctionnalité de nombre maximal d'instances pour limiter le nombre d'instances Cloud Run.

Utiliser smbnetfs

smbnetfs est un système de fichiers basé sur FUSE qui vous permet d'installer des partages SMB dans la hiérarchie du système de fichiers local.

Pour utiliser smbnetfs avec Cloud Run, mettez à jour votre fichier Dockerfile afin d'installer smbnetfs et ses dépendances, et configurez les identifiants.

Configurer smbnetfs dans le fichier Dockerfile

Ajoutez les instructions suivantes à votre fichier 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

Remplacez <smb-server-ip>, <smb-username> et <smb-password> par les informations de connexion de votre serveur SMB.

Installer le partage SMB lors du démarrage du conteneur

Exécutez smbnetfs pour installer le partage au démarrage de votre conteneur et avant le démarrage de votre application. Si votre conteneur s'exécute en tant qu'utilisateur non racine, vous devrez peut-être ajuster les autorisations ou la configuration FUSE.

  1. Créez un point de montage tel que /mnt/smb, comme indiqué dans la commande suivante :

    mkdir /mnt/smb

  2. Installez le système de fichiers SMB à l'aide de la commande smbnetfs :

    smbnetfs /mnt/smb

  3. Accédez à votre partage sous /mnt/smb/<smb-server-ip>/<share-name>, comme indiqué dans la commande suivante :

    ls /mnt/smb/smb-server-ip/share-name

Dépannage

Vous pouvez rencontrer des erreurs d'entrée/sortie lorsque vous écrivez dans des fichiers à l'aide de l'indicateur O_APPEND avec smbnetfs. Pour en savoir plus, consultez la discussion sur Stack Overflow.

Utiliser smbclient

smbclient est un outil de ligne de commande qui fournit une interface de type FTP pour accéder aux partages SMB. Vous pouvez l'utiliser pour transférer des fichiers ou exécuter des commandes sur un serveur SMB.

  • Pour éviter de fournir des identifiants à chaque commande, vous pouvez les stocker dans un fichier.

    1. Stockez vos identifiants dans un fichier, par exemple smb-cred.txt :

      username = <smb-username>
      password = <smb-password>
      
    2. Au lieu d'utiliser un fichier d'identifiants, vous pouvez fournir des identifiants avec chaque commande à l'aide de l'option -U ou --user, par exemple : --user=[DOMAIN\]USERNAME[%PASSWORD].

    3. Utilisez l'outil smbclient avec l'option -A pour spécifier le fichier d'identifiants. Par exemple, pour lister les fichiers d'un partage, exécutez la commande suivante :

      smbclient //smb-server-ip/share-name -A smb-cred.txt -c 'ls'

  • Pour modifier des fichiers avec l'outil smbclient, téléchargez le fichier, modifiez-le localement, puis importez-le de nouveau dans le partage, comme indiqué dans les étapes suivantes.

    1. Téléchargez un fichier en exécutant la commande "get" :

      smbclient //smb-server-ip/share-name -A smb-cred.txt -c 'get remote local'

    2. Modifiez votre fichier en local.

    3. Après avoir modifié le fichier, importez-le en exécutant la commande "put" :

      smbclient //smb-server-ip/share-name -A smb-cred.txt -c 'put local remote'

Lorsque vous utilisez l'outil smbclient, le serveur SMB vous identifie à l'aide des identifiants que vous fournissez. Cela permet au serveur d'appliquer les autorisations de fichier appropriées. Pour obtenir la liste complète des commandes smbclient, consultez la documentation officielle de smbclient.