[英]Calling files in the host system from a Docker container
我希望我能盡可能清楚地解釋我的問題。 我創建了一個 Docker 圖像,其中包括一個 python 腳本,在這個腳本中,要求用戶提供希望操作的文件的路徑和名稱。
這是我的 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)
在您提供的示例中,日志 state 表明 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。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.