python - 从 Docker 容器调用主机系统中的文件
问题描述
我希望我能尽可能清楚地解释我的问题。我创建了一个包含 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" ]
由于无法从容器访问主机系统中的文件,我认为最好创建一个卷以在主机和容器之间共享文件,并且我保存了一些文件以在“host-data”文件夹中尝试我的脚本,所以我做了:
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 无法在“路径+名称”处打开文件。看起来你打算连接变量path
,name
就像这样
image = Image.open(path + name)
但是,您将串联用引号括起来,从而产生"path+name"
. 当然,这只是猜测,因为我不知道您的代码是什么样的。
我还应该在这里指出,使用os.path.join
连接路径通常是更好的做法,因为它比简单地添加它们更健壮。在这种情况下,您的代码将变为
image = Image.open(os.path.join(path, name))
另外,我看到您使用的是 Python 2.7。如果可能的话,我建议过渡到 Python 3,因为 Python 2 将在 2020 年达到 EOL。
推荐阅读
- react-native - 使用 react-native-google-drive-api-wrapper 将文件上传到 Google Drive 时出现 403
- ionic-framework - 移除离子标签边框离子 4
- html - HTML , 选择选项内容对齐
- c++ - QT TCP 套接字连接异常。太多参数无法运行
- excel - 合并 Excel 工作表中的行并显示为逗号分隔
- python - WebDriverException:消息:“chromedriver.exe”可执行文件可能通过 Selenium Python 使用 Google Colaboratory 具有错误权限
- python - 如何在python中按月分组日期
- spring - 在 Thymeleaf(和 spring)中为表单创建一个片段
- c# - @inject HttpClient httpClient 与 Blazor 中的 builder.Services.AddHttpClient
- node.js - 如何访问消息中的表情符号