Docker 容器中的 FTP 客户端

Docker 容器中的 FTP 客户端

我正在尝试以编程方式连接到 FTP 服务器。我选择的语言是 Python,它很简单:

from ftplib import FTP
ftp = FTP(host=FTP_HOST, user=FTP_USERNAME, passwd=FTP_PASSWORD)
ftp.dir()

如果我在本地机器上运行这三行,它会返回一个文件列表(顺便说一下,nlst 也很好用)。如果我现在运行我的 Docker 容器,进入它(docker exec),然后转到 python,并尝试在那里运行相同的三个命令,它会产生超时。

我最初怀疑它与端口有关,因此我暴露了端口 21,并指示 ftplib 通过暴露的端口进行操作,但这给出了相同的行为。

有谁知道如何弄清楚为什么它在本地运行良好,但在容器中却拒绝?

编辑:我正在使用被动 FTP,并且服务器没有在我的本地机器上运行。

答案1

问题尚未发现,但似乎仅限于 Windows 上的 Docker。同一容器在其他系统上运行良好。在 Windows 下,客户端与服务器之间存在通信,服务器响应正常,但实际传输文件/数据会导致超时。

答案2

我碰巧遇到了同样的问题,当我在开发机器上的 venv 中执行代码时,我能够访问 FTP。但是,当在同一台机器(Windows 版 Docker 桌面)上的 docker 容器中执行相同的代码时,它超时了。我通过公共 IP 地址访问 FTP 站点使其正常工作。

相关内容