Cloud Run memungkinkan Anda menghubungkan instance container ke fitur berbagi file dalam jaringan CIFS dan SMB sehingga Anda dapat membaca dan menulis file bersama. Anda dapat memasang
berbagi di ruang pengguna, bukan ruang kernel, menggunakan smbnetfs atau mentransfer
file menggunakan smbclient.
Untuk opsi penyimpanan lainnya di Cloud Run, lihat cara mengonfigurasi volume NFS atau Filestore untuk layanan, tugas, worker pool, atau instance. Anda juga dapat mengonfigurasi volume Cloud Storage FUSE untuk layanan, tugas, worker pool, atau instance.
Batasan
Anda harus menentukan lingkungan eksekusi generasi kedua saat menggunakan
smbnetfs.Karena batasan lingkungan eksekusi Cloud Run, CIFS/SMB tidak dapat dipasang 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, update Dockerfile Anda untuk menginstal smbnetfs dan dependensinya, serta mengonfigurasi kredensial.
Mengonfigurasi 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.
Memasang berbagi SMB selama startup container
Jalankan smbnetfs untuk memasang berbagi saat container dimulai dan sebelum aplikasi dimulai. Jika container Anda berjalan sebagai pengguna non-root, Anda mungkin perlu menyesuaikan izin atau konfigurasi FUSE.
Buat direktori pemasangan seperti
/mnt/smbseperti yang ditunjukkan dalam perintah berikut:mkdir /mnt/smbPasang sistem file SMB menggunakan perintah
smbnetfs:smbnetfs /mnt/smbAkses file yang Anda bagikan 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 mirip FTP untuk mengakses berbagi SMB. Anda dapat menggunakannya untuk mentransfer file atau menjalankan perintah di server SMB.
Agar tidak perlu memberikan 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 berbagi 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 akan mengidentifikasi Anda menggunakan kredensial yang Anda berikan. Hal ini memungkinkan server menerapkan izin file yang benar.
Untuk mengetahui daftar lengkap perintah smbclient, lihat dokumentasi resmi smbclient.