#python-3.x #docker
#python-3.x #docker
Вопрос:
У меня есть приложение для прогнозирования с приведенной ниже структурой папок:
Docker
├── dataset
│ └── fastText
│ └── crawl-300d-2M.vec
├── Dockerfile
├── encoder
│ └── sentencoder2.pkl
├── pyt_models
│ └── actit1.pt
├── requirements.txt
└── src
├── action_items_api.py
├── infer_predict.py
├── model.py
├── models.py
└── sent_enc.py
Dockerfile:
FROM python:3.6
EXPOSE 80
# copy and install packages for flask
COPY /requirements.txt /tmp/
RUN cd /tmp amp;amp;
pip3 install --no-cache-dir -r ./requirements.txt
WORKDIR /Docker
COPY src src
CMD gunicorn -b 0.0.0.0:80 --chdir src action_items_api:app
В файле Docker я пытаюсь скопировать только папку src, в которой размещены все файлы Python. Я хочу, чтобы самые быстрые, ecnode, pyt_models были доступны за пределами контейнера.
Когда я попытался:
docker run -p8080:80 -v /encoder/:/encoder/;/pyt_models/:/pyt_models/;/dataset/:/dataset/ -it actit_mount:latest
Но, делая это, мой код дает мне FileNotFoundError
No such file or directory: 'encoder/sentencoder2.pkl'
Но сохраняя ту же структуру папок, если я запускаюсь из папки docker: gunicorn --chdir src --bind 0.0.0.0:80 action_items_api:app
Это работает.
Что не так с Dockerfile или docker run
?
Комментарии:
1. Команда run определенно неверна. Для исправления нам нужно знать, на какой ОС вы пытаетесь это сделать.
2. @Henry Ubuntu 18.04
Ответ №1:
Поскольку вы установили WORKDIR /Docker
, для процесса gunicorn будет установлен рабочий каталог, равный /Docker
. Это означает, что относительные пути к файлам в вашем приложении python будут разрешены из /Docker
.
Попробуйте
docker run -p8080:80
-v $(pwd)/encoder/:/Docker/encoder/
-v $(pwd)/pyt_models/:/Docker/pyt_models/
-v $(pwd)/dataset/:/Docker/dataset/
-it actit_mount:latest