![](/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.