繁体   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