【发布时间】:2020-03-12 19:38:23
【问题描述】:
我希望我能尽可能清楚地解释我的问题。我创建了一个包含 python 脚本的 Docker 映像,在此脚本中,要求用户提供希望操作的文件的路径和名称。
这是我的 Dockerfile:
FROM python:2.7.16
ADD my_script.py /
RUN pip install Pillow
RUN pip install numpy ==1.16.2
CMD [ "python", "./my_script.py" ]
由于无法从容器访问主机系统中的文件,我认为最好创建一个卷以在主机和容器之间共享文件,并且我保存了一些文件以在“主机数据”中尝试我的脚本文件夹,所以我做了:
docker run -d -P --name script-container -v ~/host-data/:container-data my_image
它一直有效,直到给出文件的路径和名称并且我不断收到此错误消息
Traceback (most recent call last):
File "./my_script.py", line 14, in <module>
image = Image.open("path+name")
File "/usr/local/lib/python2.7/site-packages/PIL/Image.py", line 2766, in open
Path: File name: fp = builtins.open(filename, "rb")
IOError: [Errno 2] No such file or directory: 'path+name'
我对 Docker 比较陌生,因此非常感谢一些帮助。
这是发生错误的代码部分。
from __future__ import division
from PIL import Image
import numpy as np
path = str(raw_input("path to the file "))
name = str(raw_input("name of the file "))
image = Image.open(path + nombre)
【问题讨论】:
-
在错误日志中,它特别指出执行脚本PIL(python图像库)时找不到图像。我认为在脚本中修复图像的路径应该可以解决您的问题。
-
我不知道,因为我的脚本在独立于 Docker 执行时可以工作
-
您能否提供您的脚本中使用的代码?如果您的代码较长,请提供相关部分,例如导致错误的部分以及定义
path和name的部分。 -
当然,错误部分是这样的:
from __future__ import division from PIL import Image import numpy as np path = str(raw_input("path to the file ")) name = str(raw_input("name of the file ")) image = Image.open(path + nombre)当然对于 python 3,必须将 raw_input() 更改为 input() -
从错误消息中,您似乎已将文件名作为
"path+name"的字符串传递,去掉这些引号应该可以,因为这实际上会返回完整路径。