![](/img/trans.png)
[英]debug python code running in docker container from host using vscode
[英]Accessing a Windows CIFS share from Python code running in a Docker container
我正在嘗試從將在 Docker 容器中運行的 Python 代碼訪問多個 Windows CIFS 共享。 我已經看到有多個 SMB 庫(如pysmb
和smbprotocol
聲稱它們可用於訪問 CIFS 共享,但我還沒有設法讓它工作,也沒有在網上看到一個使用它們的示例訪問 CIFS 共享。
我知道一個解決方案是將共享掛載到主機上並將其掛載到容器中,但如果可能的話,我寧願避免這種情況,因為代碼需要訪問多個共享,並且當容器時並非所有共享都被知道開始。
我錯過了什么嗎? 關於如何從在 Linux 上運行的 Python 代碼訪問 CIFS 共享的在線好方法或好示例? (我知道在 Windows 上你可以簡單地打開文件夾,但我需要它在 Linux 上工作)。
眾所周知, 除非容器以特權啟動,否則在容器內調用mount
是行不通的。 然而,客戶端代碼也可以連接到 CIFS 驅動器而無需先掛載目錄(例如,對於 Java,它是jcifs-ng )。
了解您使用的庫在內部是如何工作的。 如果可以直接連接 go 就可以了。 否則,您也可以將smbclient
添加到容器中並調用它來訪問 CIFS 端的文件。
沒有 CIFS 特定示例,因為它應該與 linux 中的 SMB 一樣工作。 我已經為這兩個庫( pysmb
和smbprotocol
)苦苦掙扎了一段時間,我已經讓它們工作了。
對於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.