簡體   English   中英

從 Docker 容器中運行的 Python 代碼訪問 Windows CIFS 共享

[英]Accessing a Windows CIFS share from Python code running in a Docker container

我正在嘗試從將在 Docker 容器中運行的 Python 代碼訪問多個 Windows CIFS 共享。 我已經看到有多個 SMB 庫(如pysmbsmbprotocol聲稱它們可用於訪問 CIFS 共享,但我還沒有設法讓它工作,也沒有在網上看到一個使用它們的示例訪問 CIFS 共享。

我知道一個解決方案是將共享掛載到主機上並將其掛載到容器中,但如果可能的話,我寧願避免這種情況,因為代碼需要訪問多個共享,並且當容器時並非所有共享都被知道開始。

我錯過了什么嗎? 關於如何從在 Linux 上運行的 Python 代碼訪問 CIFS 共享的在線好方法或好示例? (我知道在 Windows 上你可以簡單地打開文件夾,但我需要它在 Linux 上工作)。

眾所周知, 除非容器以特權啟動,否則在容器內調用mount是行不通的。 然而,客戶端代碼也可以連接到 CIFS 驅動器而無需先掛載目錄(例如,對於 Java,它是jcifs-ng )。

了解您使用的庫在內部是如何工作的。 如果可以直接連接 go 就可以了。 否則,您也可以將smbclient添加到容器中並調用它來訪問 CIFS 端的文件。

沒有 CIFS 特定示例,因為它應該與 linux 中的 SMB 一樣工作。 我已經為這兩個庫( pysmbsmbprotocol )苦苦掙扎了一段時間,我已經讓它們工作了。

對於pysmb ,我發現唯一不同的是示例通常告訴您可以將域留空或不告訴它。 在 windows 上,它是工作組。 如果將其留空不起作用,您可以通過右鍵單擊“我的電腦”並選擇“屬性”來檢查它。 您會在那里找到它以及機器名稱。

這是從 linux 到 windows 機器的pysmb的工作示例:

from smb.SMBConnection import SMBConnection
conn = SMBConnection(username="user", password="my_passwrd", my_name="name", remote_name="WINDOWS-MACHINE", domain="WORKGROUP", use_ntlm_v2=True)
conn.connect(my_server_ip_addr)

for file in conn.listPath("shared_dir", "/"):
   print(file.filename)
conn.close()

您可以在此處查看使用smbprotocol的示例(其中“服務器”是您的 IP 地址或主機並“共享”您的共享目錄名稱)。 您可以在沒有 remote_name 或域的情況下使其工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM