Доступ к файлам локальных каталогов из API-интерфейса flask, работающего в контейнере docker

#python #docker #docker-volume

Вопрос:

Мой API должен получить доступ к изображению, расположенному в каталоге на хост-сервере, сохранить его в другом каталоге и несколько раз получить доступ ко всему каталогу на хост-сервере.

В настоящее время, когда я запускаю API в контейнере docker и он пытается получить доступ к изображению, находящемуся в каталоге на хосте, я получаю сообщение об ошибке-

 FileNotFoundError: [Errno 2] No such file or directory: 'W:/datasets/tmp/users/1.jpg'
 

Я понимаю, что это связано с тем, что API работает на независимом сервере. Каталог не может быть смонтирован в контейнере, так как он большой и будет постоянно увеличиваться в режиме реального времени.

Как мне получить доступ к файловой системе в этой ситуации? Поможет ли SSH с помощью paramiko в этом случае или есть другой способ сделать это?

Комментарии:

1. возможно ли подключить том NFS к обеим машинам? это позволит добавлять файлы с удаленной машины и получать к ним доступ из контейнера docker с подключенным томом NFS

2. Я так не думаю. Не могли бы вы предложить другой способ?

3. как вы подключаетесь для доступа к изображению с удаленного сервера? у вас есть соответствующие учетные данные, настроенные для метода подключения?

4. Объемное крепление не заботится о размерах. На самом деле ничего не копируется

5. вы можете создать крепление привязки, которое похоже на связывание каталога хоста и каталога в контейнере

Ответ №1:

Поможет ли SSH с помощью paramiko в этом случае

Нет, вам нужен файловый сервер, а не оболочка. Если бы у вас был SSH-сервер на хосте, вы могли бы использовать SFTP, но вы также могли бы использовать NFS, как прокомментировано

В конечном счете, если вы пытаетесь получить доступ к каталогам на той же машине, что и контейнер, вам следует использовать монтирование томов в контейнер

не может быть смонтирован на контейнере, так как он большой, а также будет продолжать увеличиваться в режиме реального времени.

Ну и что? Вы пробовали использовать крепление? Какие конкретные проблемы у вас возникли с тем, что он «большой» и смонтирован?

Комментарии:

1. Проблема с монтированием заключается в том, что каталог, к которому мне нужен доступ, будет постоянно обновляться в режиме реального времени другим api и храниться на компьютере локально. Мой постоянно работающий api будет вызываться, когда в каталог будет добавлено еще одно дополнение. Если я смонтирую каталог при первом запуске контейнера, я не получу обновленные файлы, которые будут добавлены в будущем. Под «большим» я подразумеваю, что каталог будет постоянно обновляться и увеличивать количество файлов.

2. Ну и что? Как я уже сказал, ничто не копируется. Файлы всегда синхронизированы, поэтому «первый запуск» не имеет значения, и будущие обновления из контейнера отображаются на хосте, а обновления с хоста отображаются контейнером

3. Теперь я понимаю. Тогда я просто попробую смонтировать каталоги. Спасибо!

4. Предположим, что файлы присутствуют на сервере 1, а контейнер docker запущен на сервере 2. Как тогда я смонтирую файлы, которые присутствуют на другой машине?

5. Если это внешний хост, то вы бы использовали файловый сервер, как было указано в ответе. Docker предоставляет решение NFS для монтирования, но также будет работать FTP или внешний вызов API, совместимый с S3