У меня есть папка проекта частной группы (назовем ее 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
с помощью контейнера?
-B
— правильный способ монтирования каталогов в контейнере. Несколько вариантов:
/gpfs/projects/oceanvideo/data
сама по себе является символической ссылкой, она не будет разрешаться внутри контейнера и выдавать этот код ошибки. readlink
решит только один уровень. Найдите оригинальный несвязанный путь и используйте его с -B
.singularity -vv run ...
, чтобы узнать, есть ли дополнительная информация о том, почему каталог не монтируется.На самом деле хорошо, только что попробовал, и флаг -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
обычно уже является символической ссылкой, а не папкой.
/gpfs/projects/oceanvideo/data
— исходный путь. Мне не удалось привязать эту папку к локальной папке, например:data
, но я заставил ее работать с-B $(readlink data):$(readlink data)
, привязав путь к себе в контейнере, и я также смог использовать символическую ссылку.