Проблема при монтировании каталога хоста через файл docker, получение невозможно открыть file .h5

#python #python-3.x #docker #docker-volume

#python #python-3.x #docker #docker-volume

Вопрос:

Я пытаюсь создать образ из приведенного ниже файла docker

 FROM tensorflow/tensorflow:latest-py3
RUN pip install -q keras==2.3.1 
RUN pip install pillow 
RUN mkdir -p /edge_app/src WORKDIR /edge_app/src 
COPY model_1.py /edge_app/src 
EXPOSE 31700 
VOLUME ["/testdata"] 
CMD ["python", "model_1.py"]
  

моя древовидная структура

 ├── data
│   └── predictions_result.npy
├── Dockerfile
├── m1.h5
├── model_1.py
├── testdata
│   ├── 0.jpg
│   ├── 10.jpg
│   ├── 1.jpg
│   ├── 2.jpg
│   ├── 3.jpg
│   ├── 4.jpg
│   ├── 5.jpg
│   ├── 6.jpg
│   ├── 7.jpg
│   └── m1.h5
  

model_1.py файл

 import  socket,keras,sys,os,csv,subprocess,time,shutil
from keras.preprocessing import image
from socket import *
import numpy as np
from keras.applications.vgg19 import VGG19,preprocess_input,decode_predictions
from keras.preprocessing.image import img_to_array,load_img
from keras import models,layers,Model,Input
from keras import backend as K
import tensorflow as tf
from keras.models import load_model

 model=load_model('m1.h5',compile=False)

 images=[]
 for img in os.listdir('testdata'):
     img=os.path.join('testdata', img)
     img=image.load_img(img,target_size=(224,224))
     img=image.img_to_array(img)
     img=np.expand_dims(img,axis=0)
     img=preprocess_input(img.copy())
     images.append(img)
 images=np.vstack(images)
 predictions=model.predict(images)
 np.save('/workdir/data/predictions_result',predictions)
  

Запуск образа Docker с помощью приведенной ниже команды

 sudo docker run --rm  -it tensor-keras
  

Когда я пытаюсь запустить приведенную выше команду docker run в Linux, я получаю приведенную ниже ошибку помощь высоко ценится спасибо за вашу замечательную помощь

   OSError: Unable to open file (unable to open file: name = 'm1.h5', errno = 2, error message = 'No such file or directory', flags = 0, o_flags = 0)
  

Комментарии:

1. Единственный файл, который вы COPY вводите в образ, — это исходный код Python; там нет никаких фактических данных. Если вы docker run --rm -it tensor-keras bash запустите временный контейнер с отладочной оболочкой, и вы сможете увидеть, что было помещено в изображение.

2. @DavidMaze, спасибо, ваша помощь высоко ценится. Я использую эту команду docker run —rm -it -v $ (pwd):/workdir -w /workdir tensor-keras, он работает нормально. любое предложение, как бы мне изменить свой Dockerfile для достижения этой цели.

3. Вы никогда не сможете указать каталоги хоста или иным образом принудительно использовать ресурсы хоста в Dockerfile. (Вы могли бы включить WORKDIR директиву для замены этой -w опции.) Вы можете рассматривать виртуальную среду Python как еще более облегченную схему изоляции, которая не требует специальных разрешений, но может напрямую использовать файлы хоста без специальной настройки.