Чтобы получить доступ к данным на внешнем диске, добавьте их как том в docker -compose, а затем используйте docker -compose - PullRequest
0 голосов
/ 05 апреля 2020

У меня есть контейнер docker, на котором запущено простое приложение python flask. Это контейнер linux, но моя машина - машина windows. Я подключил внешний жесткий диск через USB, и он отображается в windows как диск E. Я дал docker разрешение на доступ ко всему через C и E. через настройки.

Все, что я хочу сделать python, это отобразить содержимое папки из папки в E. Но ничего не происходит нашел! Ранее я получал сообщение о том, что путь к файлу не существует, но я смог это исправить. Тем не менее, теперь он даже, кажется, не находит никакого содержимого на моем желаемом пути. Я видел примеры запуска контейнера docker с томом в качестве параметра, но я запускаю его с docker -compose.

Вот мой Dockerfile:

FROM python:3
WORKDIR /code
ENV FLASK_APP practice.py
ENV FLASK_RUN_HOST 0.0.0.0
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt

COPY . .

CMD ["flask", "run"]

Вот мой docker -компонентный файл:

version: '3'
services:
    web:
        build: .
        ports:
            - "5000:5000"
        volumes:
            - .:/code
            - /mnt/e/folderWithStuff/
        environment:
            FLASK_ENV: development
    redis:
        image: "redis:alpine"

Причина, по которой второй том имеет путь / mnt / e / folderWithStuffInIt потому, что это путь, к которому я могу получить доступ из подсистемы Ubuntu моего компьютера Windows. Это заставляет меня поверить, что при доступе изнутри контейнера linux это должен быть тот же путь.

Конечная точка, к которой я обращаюсь, делает это:

@app.route('/list')
def list_files():
    files = os.listdir("/mnt/e/folderWithStuff")
    result = ""

    for file in files:
        result = result + file

    return result

Все, что я получаю назад пустая страница. Маршрут хорош, потому что если я изменю его, чтобы вернуть строку, я вижу строку на этом маршруте. Он не жалуется на каталог, поэтому кажется, что в этом каталоге должно быть что-то. Это просто не похоже на то, что он на самом деле обращается к папке на внешнем диске, к которому я дал разрешение на доступ. Что мне не хватает или недоразумение?

1 Ответ

0 голосов
/ 05 апреля 2020

Я понял это!

В разделе томов, который я определил в моем docker -компонентном файле, вам нужно создать отображение!

Так что на самом деле это должно выглядеть так :

    volumes:
        - .:/code
        - E:\\files:/mnt/e/files

Путь на вашем компьютере, на котором запущен контейнер, должен быть представлен слева от символа:. Путь справа может быть таким, каким вы хотите. Ваш код сможет получить доступ к пути справа, а сопоставление позволит вашему коду получить доступ к тому, что находится на диске C или E или X, который вы подключили к хост-компьютеру.

...