Mit Cloud Run können Sie Containerinstanzen mit CIFS- und SMB-Netzwerkfreigaben verbinden, um freigegebene Dateien zu lesen und zu schreiben. Sie können Freigaben im Nutzerbereich statt im Kernelbereich mit smbnetfs bereitstellen oder Dateien mit smbclient übertragen.
Weitere Speicheroptionen für Cloud Run finden Sie unter „NFS- oder Filestore-Volumes konfigurieren“ für Dienste, Jobs, Worker-Pools oder Instanzen. Sie können Cloud Storage FUSE-Volumes auch für Dienste, Jobs, Worker-Pools oder Instanzen konfigurieren.
Beschränkungen
Wenn Sie
smbnetfsverwenden, 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 Kernel-Mounting angewiesen sind, z. B.
smbnetfs(FUSE-basiert) odersmbclient.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. Verwenden Sie für Cloud Run-Dienste das Feature für eine maximale Anzahl von Instanzen, 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, aktualisieren Sie Ihr Dockerfile, um smbnetfs und die zugehörigen Abhängigkeiten zu installieren, und konfigurieren Sie die Anmeldedaten.
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 Containerstart bereitstellen
Führen Sie „smbnetfs“ aus, um die Freigabe beim Start des Containers und vor dem Start der Anwendung bereitzustellen. Wenn Ihr Container als Nicht-Root-Nutzer ausgeführt wird, müssen Sie möglicherweise die Berechtigungen oder die FUSE-Konfiguration anpassen.
Erstellen Sie einen Bereitstellungspunkt wie
/mnt/smb, wie im folgenden Befehl gezeigt:mkdir /mnt/smbStellen Sie das SMB-Dateisystem mit dem Befehl
smbnetfsbereit:smbnetfs /mnt/smbGreifen Sie mit dem folgenden Befehl auf Ihre Freigabe unter
/mnt/smb/<smb-server-ip>/<share-name>zu:ls /mnt/smb/smb-server-ip/share-name
Fehlerbehebung
Beim Schreiben in Dateien mit dem Flag O_APPEND und smbnetfs können Eingabe-/Ausgabefehler auftreten. Weitere Informationen finden Sie in der Stack Overflow-Diskussion.
smbclient verwenden
smbclient ist ein Befehlszeilentool, das eine FTP-ähnliche Oberfläche für den Zugriff auf SMB-Freigaben bietet. Sie können damit Dateien übertragen oder Befehle auf einem SMB-Server ausführen.
Damit Sie nicht bei jedem Befehl Anmeldedaten angeben müssen, können Sie sie in einer Datei speichern.
Speichern Sie Ihre Anmeldedaten in einer Datei, z. B.
smb-cred.txt:username = <smb-username> password = <smb-password>Als Alternative zu einer Datei mit Anmeldedaten können Sie Anmeldedaten mit jedem Befehl über die Option
-Uoder--userangeben, z. B.--user=[DOMAIN\]USERNAME[%PASSWORD].Verwenden Sie das Tool
smbclientmit dem Flag-A, um die Datei mit den Anmeldedaten anzugeben. Führen Sie beispielsweise den folgenden Befehl aus, um Dateien in einer Freigabe aufzulisten:smbclient //smb-server-ip/share-name -A smb-cred.txt -c 'ls'
Wenn Sie Dateien mit dem smbclient-Tool ändern möchten, laden Sie die Datei herunter, ändern Sie sie lokal und laden Sie sie dann wieder in die Freigabe hoch, wie in den folgenden Schritten beschrieben.
Laden Sie eine Datei mit dem Befehl „get“ herunter:
smbclient //smb-server-ip/share-name -A smb-cred.txt -c 'get remote local'
Ändern Sie die Datei lokal.
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 Sie der SMB-Server 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.