Halaman ini menjelaskan penggunaan sistem file jaringan CIFS/SMB dengan Cloud Run.
Jika Anda menggunakan NFS, Filestore, atau Cloud Storage FUSE di Cloud Run, lihat halaman berikut:
- Konfigurasi volume NFS untuk layanan, tugas, atau kumpulan worker.
- Konfigurasi volume Cloud Storage untuk layanan, tugas, atau kumpulan pekerja.
Batasan
Anda harus menentukan lingkungan eksekusi generasi kedua saat menggunakan
smbnetfs.Karena batasan lingkungan eksekusi Cloud Run, CIFS/SMB tidak dapat dipasang secara langsung di dalam Cloud Run. Namun, Anda dapat menggunakan klien SMB yang tidak mengandalkan pemasangan kernel, seperti
smbnetfs(berbasis FUSE) atausmbclient.Cloud Run dirancang untuk diskalakan dengan cepat ke jumlah instance yang sangat banyak. Namun, sebagian besar sistem file jaringan tidak didesain untuk digunakan serentak oleh klien dalam jumlah besar. Untuk layanan Cloud Run, pertimbangkan untuk menggunakan fitur instance maksimum untuk membatasi jumlah instance Cloud Run.
Menggunakan smbnetfs
smbnetfs adalah sistem file berbasis FUSE yang memungkinkan Anda memasang berbagi SMB sebagai bagian dari hierarki sistem file lokal.
Untuk menggunakan smbnetfs dengan Cloud Run, perbarui Dockerfile Anda untuk menginstal smbnetfs dan dependensinya, serta mengonfigurasi kredensial.
Konfigurasi smbnetfs di Dockerfile
Tambahkan petunjuk berikut ke Dockerfile Anda:
# 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
Ganti <smb-server-ip>, <smb-username>, dan <smb-password> dengan detail koneksi untuk server SMB Anda.
Pasang berbagi SMB selama startup penampung
Jalankan smbnetfs untuk memasang share saat container Anda dimulai dan sebelum aplikasi Anda dimulai. Jika container Anda berjalan sebagai pengguna non-root, Anda mungkin perlu menyesuaikan izin atau konfigurasi FUSE.
Buat titik pemasangan seperti
/mnt/smbseperti yang ditunjukkan pada perintah berikut:mkdir /mnt/smbPasang sistem file SMB menggunakan perintah
smbnetfs:smbnetfs /mnt/smbAkses bagian yang dibagikan di bagian
/mnt/smb/<smb-server-ip>/<share-name>, seperti yang ditunjukkan dalam perintah berikut:ls /mnt/smb/smb-server-ip/share-name
Pemecahan masalah
Anda mungkin mengalami error input/output saat menulis ke file menggunakan flag O_APPEND dengan smbnetfs. Temukan detail selengkapnya dalam diskusi Stack Overflow.
Menggunakan smbclient
smbclient adalah alat command line yang menyediakan antarmuka seperti FTP untuk mengakses berbagi SMB. Anda dapat menggunakannya untuk mentransfer file atau menjalankan perintah di server SMB.
Untuk menghindari pemberian kredensial dengan setiap perintah, Anda dapat menyimpannya dalam file.
Simpan kredensial Anda dalam file, misalnya,
smb-cred.txt:username = <smb-username> password = <smb-password>Sebagai alternatif untuk file kredensial, Anda dapat memberikan kredensial dengan setiap perintah menggunakan opsi
-Uatau--user, misalnya:--user=[DOMAIN\]USERNAME[%PASSWORD].Gunakan alat
smbclientdengan flag-Auntuk menentukan file kredensial. Misalnya, untuk mencantumkan file dalam berbagi, jalankan perintah berikut:smbclient //smb-server-ip/share-name -A smb-cred.txt -c 'ls'
Untuk mengubah file dengan alat smbclient, download file, ubah secara lokal, lalu upload kembali ke share seperti yang ditunjukkan dalam langkah-langkah berikut.
Download file dengan menjalankan perintah get:
smbclient //smb-server-ip/share-name -A smb-cred.txt -c 'get remote local'
Ubah file Anda secara lokal.
Upload file setelah modifikasi dengan menjalankan perintah put:
smbclient //smb-server-ip/share-name -A smb-cred.txt -c 'put local remote'
Saat Anda menggunakan alat smbclient, server SMB mengidentifikasi Anda menggunakan kredensial yang Anda berikan. Dengan demikian, server dapat menerapkan izin file yang benar.
Untuk mengetahui daftar lengkap perintah smbclient, lihat dokumentasi smbclient resmi.