簡體   English   中英

將外部文件掛載到Docker容器中

[英]Mount external files into Docker container

我有一個具有以下文件夾結構的預測應用程序:

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'

但是,如果我從gunicorn --chdir src --bind 0.0.0.0:80 action_items_api:app文件夾運行,則保持相同的文件夾結構: gunicorn --chdir src --bind 0.0.0.0:80 action_items_api:app它起作用。

Dockerfile或docker docker run什么問題?

因為您將WORKDIR /Docker設置為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

docker:來自守護程序的錯誤響應:create ./folder:“./folder”包含本地卷名的無效字符,只有“ [a-zA-Z0-9] [a-zA-Z0-9 _.-]”允許的。 如果要傳遞主機目錄,請使用絕對路徑。

這是一個例子:

docker run -v的示例

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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