#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