我有一个具有以下文件夹结构的预测应用程序:
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 && \
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文件中,我仅尝试复制放置所有Python文件的src文件夹。我想让fastTest,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
有什么问题?
答案 0 :(得分:3)
由于您设置了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
答案 1 :(得分:1)