Контейнер Singularity — привязка папки к отдельному разделу

У меня есть папка проекта частной группы (назовем ее data_dir) в высокопроизводительном кластере, где у меня нет привилегий root. Папка находится в отдельном разделе.
У меня есть контейнер сингулярности, к которому мне нужно получить доступ data_dir. Официальный флаг документация говорит-B предназначен для привязки пути, но я не могу получить доступ к папке в контейнере с помощью -B. Это то, что я пробовал до сих пор:

XXXXXX  login1[~/work/subcam] master ⦿ ➜  readlink data
/gpfs/projects/oceanvideo/data
XXXXXX  login1[~/work/subcam] master ⦿ ➜  singularity run -B $(readlink data):$(pwd)/data container.sif
WARNING: skipping mount of /local_scratch: no such file or directory

________                               _______________
___  __/__________________________________  ____/__  /________      __
__  /  _  _ \_  __ \_  ___/  __ \_  ___/_  /_   __  /_  __ \_ | /| / /
_  /   /  __/  / / /(__  )/ /_/ /  /   _  __/   _  / / /_/ /_ |/ |/ /
/_/    \___//_/ /_//____/ \____//_/    /_/      /_/  \____/____/|__/


You are running this container as user with ID 21530 and group 21500,
which should map to the ID and group for your user on the Docker host. Great!

tf-docker ~/work/subcam > cd data
bash: cd: data: No such file or directory
tf-docker ~/work/subcam > cd /gpfs/
tf-docker /gpfs > ls
work
tf-docker /gpfs > cd projects
bash: cd: projects: No such file or directory

Как я могу получить доступ к data_dir с помощью контейнера?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
844
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

-B — правильный способ монтирования каталогов в контейнере. Несколько вариантов:

  1. Если /gpfs/projects/oceanvideo/data сама по себе является символической ссылкой, она не будет разрешаться внутри контейнера и выдавать этот код ошибки. readlink решит только один уровень. Найдите оригинальный несвязанный путь и используйте его с -B.
  2. Если это не так, запустите с помощью singularity -vv run ..., чтобы узнать, есть ли дополнительная информация о том, почему каталог не монтируется.
  3. Убедитесь, что кластер разрешает привязку пользователей
/gpfs/projects/oceanvideo/data — исходный путь. Мне не удалось привязать эту папку к локальной папке, например: data, но я заставил ее работать с -B $(readlink data):$(readlink data), привязав путь к себе в контейнере, и я также смог использовать символическую ссылку.
MuhsinFatih 10.07.2019 16:13

На самом деле хорошо, только что попробовал, и флаг -v также помог с локальной привязкой. Это была ошибка: container creation failed: unable to add /gpfs/projects/oceanvideo/data to mount list: destination must be an absolute path. Таким образом, локальный data не является абсолютным путем, и когда вместо этого я использовал $(realpath data), это сработало. Также я мог бы сделать это с другими локальными путями, такими как data_dir; Я думаю, что это перезаписывает папку назначения внутри контейнера, потому что data обычно уже является символической ссылкой, а не папкой.

MuhsinFatih 10.07.2019 16:20

Другие вопросы по теме