Монтирование внешних файлов в контейнер Docker - PullRequest
1 голос
/ 13 марта 2019

У меня есть приложение прогнозирования со следующей структурой папок:

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 я пытаюсь только скопировать папку src, в которой находятся все файлы Python. Я хочу, чтобы 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?

Ответы [ 2 ]

3 голосов
/ 13 марта 2019

Поскольку вы установили 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 голос
/ 13 марта 2019

docker: Ответ об ошибке от демона: create ./folder: «./folder» включает недопустимые символы для имени локального тома, только «[a-zA-Z0-9] [a-zA-Z0-9 _.- ]" разрешены. Если вы намеревались передать каталог хоста, используйте абсолютный путь.

Вот пример:

example of docker run -v

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...