Как проверить, находится ли он в контейнере Singularity|Apptainer?

Согласно оболочка документа:

The change in prompt indicates that you have entered the container (though you should not rely on that to determine whether you are in container or not).

Итак, кроме изменения приглашения, как должен определить, находятся ли они в контейнере или нет?

Стоит ли изучать 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 называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
28
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Один из способов сделать это — передать аргумент --cleanenv в команде оболочки сингулярности и проверить, совпадает ли переменная PATH с PATH вашего хост-пользователя:

#add an arbitrary file location to your PATH variable and check that it is present for the host
export PATH=$PATH:/path/to/foo/bar
echo $PATH

#now pull up a shell in your container with --cleanenv to ignore the environmental variables of the host - such as the PATH we just exported
singularity shell --cleanenv yourimage.sif
#check that /path/to/foo/bar is not in PATH in your container
echo $PATH
Ответ принят как подходящий

Есть несколько переменных среды, которые вы можете проверить:

  • SINGULARITY_BIND - может быть пустым, если не установлены бинды/маунты
  • SINGULARITY_COMMAND - например.,exec, shell и т. д.
  • SINGULARITY_CONTAINER - путь к образу на хост-ОС
  • SINGULARITY_ENVIRONMENT - обычно /.singularity.d/env/91-environment.sh или что-то подобное
  • SINGULARITY_NAME - имя файла изображения сингулярности

В качестве альтернативы, проверка существования /.singularity.d/Singularity. Если внутри контейнера сингулярности, это копия определения сингулярности, используемого при создании образа. В общем, маловероятно, что /.singularity.d будет существовать на обычной хост-ОС, если только кто-то не сделал что-то действительно странное.

Там много возможностей, но в примере контейнера, который я только что ввел, не было установленных привязок/монтирований, поэтому SINGULARITY_BIND существовал, но был пуст, как вы упомянули. SINGULARITY_COMMAND не существовало, и я не совсем уверен, что есть хороший способ проверить, существует ли exec или shell, когда whereis exec возвращает exec:. Я полагаю, что любой из этих env vars потенциально может быть создан в хост-системе по неизвестным причинам (хотя маловероятно, что все они будут существовать). Известны ли вам какие-либо поддерживаемые тесты/скрипты, которые будут проходить некоторые логические проверки, используя все/некоторые из них?

topher217 22.03.2022 08:22

Значение SINGULARITY_COMMAND не является фактическим двоичным файлом или чем-то подобным, это конкретное ключевое слово, которое использовалось при запуске сингулярности: singularity exec ..., singularity shell ... и т. д. Никаких сценариев, о которых я знаю, но проверка на /.singularity.d, вероятно, самая простая. надежен, так как для изменения требуются привилегии root /.

tsnowlan 22.03.2022 13:54

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