CIFS/SMB-Netzwerkdateisystem verwenden

Auf dieser Seite wird die Verwendung von CIFS/SMB-Netzwerkdateisystemen mit Cloud Run beschrieben.

Wenn Sie NFS, Filestore oder Cloud Storage FUSE in Cloud Run verwenden, lesen Sie die folgenden Seiten:

Beschränkungen

  • Wenn Sie smbnetfs verwenden, müssen Sie die Ausführungsumgebung der zweiten Generation angeben.

  • Aufgrund der Einschränkung der Cloud Run-Ausführungsumgebung kann CIFS/SMB nicht direkt in Cloud Run bereitgestellt werden. Sie können jedoch SMB-Clients verwenden, die nicht auf der Kernel-Bereitstellung basieren, z. B. smbnetfs (FUSE-basiert) oder smbclient.

  • Cloud Run wurde für eine schnelle Skalierung auf eine große Anzahl von Instanzen entwickelt. Die meisten Netzwerkdateisysteme sind jedoch nicht für die gleichzeitige Verwendung durch eine große Anzahl von Clients konzipiert. Für Cloud Run-Dienste sollten Sie das Feature für eine maximale Anzahl von Instanzen verwenden, um die Anzahl der Cloud Run-Instanzen zu begrenzen.

smbnetfs verwenden

smbnetfs ist ein FUSE-basiertes Dateisystem, mit dem Sie SMB-Freigaben als Teil der lokalen Dateisystemhierarchie bereitstellen können.

Wenn Sie smbnetfs mit Cloud Run verwenden möchten, müssen Sie Ihr Dockerfile aktualisieren, um smbnetfs und seine Abhängigkeiten zu installieren und Anmeldedaten zu konfigurieren.

smbnetfs im Dockerfile konfigurieren

Fügen Sie Ihrem Dockerfile die folgenden Anweisungen hinzu:

# 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

Ersetzen Sie <smb-server-ip>, <smb-username> und <smb-password> durch die Verbindungsdetails für Ihren SMB-Server.

SMB-Freigabe beim Start des Containers bereitstellen

Führen Sie „smbnetfs“ aus, um die Freigabe beim Start des Containers und vor dem Start der Anwendung zu mounten. Wenn Ihr Container als Nutzer ohne Root-Berechtigung ausgeführt wird, müssen Sie möglicherweise Berechtigungen oder die FUSE-Konfiguration anpassen.

  1. Erstellen Sie einen Bereitstellungspunkt wie /mnt/smb, wie im folgenden Befehl gezeigt:

    mkdir /mnt/smb

  2. Stellen Sie das SMB-Dateisystem mit dem Befehl smbnetfs bereit:

    smbnetfs /mnt/smb

  3. Greifen Sie unter /mnt/smb/<smb-server-ip>/<share-name> auf die Freigabe zu, wie im folgenden Befehl gezeigt:

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

Fehlerbehebung

Beim Schreiben in Dateien mit dem Flag O_APPEND und smbnetfs können Ein-/Ausgabefehler auftreten. Weitere Informationen finden Sie in der Stack Overflow-Diskussion.

smbclient verwenden

smbclient ist ein Befehlszeilentool, das eine FTP-ähnliche Schnittstelle für den Zugriff auf SMB-Freigaben bietet. Sie können damit Dateien übertragen oder Befehle auf einem SMB-Server ausführen.

  • Wenn Sie nicht bei jedem Befehl Anmeldedaten angeben möchten, können Sie sie in einer Datei speichern.

    1. Speichern Sie Ihre Anmeldedaten in einer Datei, z. B. smb-cred.txt:

      username = <smb-username>
      password = <smb-password>
      
    2. Alternativ zu einer Anmeldedatendatei können Sie Anmeldedaten mit jedem Befehl über die Option -U oder --user angeben, z. B. --user=[DOMAIN\]USERNAME[%PASSWORD].

    3. Verwenden Sie das smbclient-Tool mit dem Flag -A, um die Datei mit den Anmeldedaten anzugeben. Wenn Sie beispielsweise Dateien in einer Freigabe auflisten möchten, führen Sie den folgenden Befehl aus:

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

  • Wenn Sie Dateien mit dem Tool „smbclient“ ändern möchten, laden Sie die Datei herunter, bearbeiten Sie sie lokal und laden Sie sie dann wieder in die Freigabe hoch.

    1. Laden Sie eine Datei herunter, indem Sie den Befehl „get“ ausführen:

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

    2. Ändern Sie die Datei lokal.

    3. Laden Sie die Datei nach der Änderung mit dem Befehl „put“ hoch:

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

Wenn Sie das smbclient-Tool verwenden, identifiziert der SMB-Server Sie anhand der von Ihnen angegebenen Anmeldedaten. So kann der Server die richtigen Dateiberechtigungen anwenden. Eine vollständige Liste der smbclient-Befehle finden Sie in der offiziellen smbclient-Dokumentation.