我尝试从python3 docker容器内部通过ftp下载文件。容器是从官方docker hub python存储库构建的。
这是我尝试执行的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"]
我构建,使用以下序列输入容器和python shell:
docker build --tag bue/py3ftp .
docker images
docker run -ti --name=abc bue/py3ftp /bin/bash
python
我的框配置了以下软件:
有谁知道这个错误在哪里? 为什么这不起作用? 也许我必须打开一个端口或什么?
感谢任何输入! 最好, 艾玛
答案 0 :(得分:1)
终于发现了这个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
艾玛