在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
艾玛