簡體   English   中英

從 Docker 容器調用主機系統中的文件

[英]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 無法在“路徑+名稱”處打開文件。 看起來您打算像這樣連接變量pathname

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM