在dockerized python3 ftp命令中RETR引发ConnectionResetError

我尝试通过ftp从一个python3docker容器中下载一个文件,该容器是从官方的docker中心Python库build立的。

下面是我尝试执行的python代码的一个简单例子:

import ftplib ftp = ftplib.FTP("ftp.geneontology.org") ftp.login() ftp.sendcmd("MDTM /go/ontology/go-basic.obo") ftp.retrbinary("RETR /go/ontology/go-basic.obo", callback=open("go-basic.obo", "wb").write) 

该代码的MDTM和RETR命令在主机中运行良好。

但是,在python3 docker容器中,只有MDTM命令有效。 RETR命令会引发以下错误消息:

 >>> ftp.retrbinary("RETR /go/ontology/go-basic.obo", callback=open("ich.obo", "wb").write) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/local/lib/python3.5/ftplib.py", line 443, in retrbinary data = conn.recv(blocksize) ConnectionResetError: [Errno 104] Connection reset by peer >>> 

我的Dockerfile看起来像这样:

 FROM python:3 CMD ["/bin/bash"] 

我build立,input容器和pythonshell与这个序列:

 docker build --tag bue/py3ftp . docker images docker run -ti --name=abc bue/py3ftp /bin/bash python 

我的盒子configuration有以下软件:

  • OSX 10.11.6 ElCapitan
  • docker-machine使用的VirtualBox版本5.1.8 r111374(Qt5.5.1)
  • docker机0.8.2版,build e18a919
  • docker版本1.12.3,版本6b644ec
  • python 3.5.2(默认,2016年11月10日,08:25:20)docker集装箱内

有没有人知道错误在哪里? 为什么这不起作用? 也许一个端口,我必须打开什么?

感激任何input! 最好的,艾玛

终于find了这个bug。 代替:

 docker run -ti --name=abc bue/py3ftp /bin/bash 

使用:

 docker run -ti -P --name=abc bue/py3ftp /bin/bash 

要么:

 docker run -ti -p 21:21 --name=abc bue/py3ftp /bin/bash 

艾玛