Could someone please let me know how one can access files in /home
within a singularity container?
I created a docker image. In this image, some packages are built and installed under /home
. Some of those are also added to PYTHONPATH
within the docker image. If I run the image, then a docker container is created. Within this container I can access all files under /home
and use the Python modules that I added. This is a fully working docker image.
I wanted to use the packages and Python modules on a HPC system. So, I converted the docker image to a singularity image. Then, I used the singularity shell <image_name.sif>
command to access the shell in the container. After that I see the prompt below.
Singularity> cat /etc/*-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.6 LTS"
NAME="Ubuntu"
VERSION="18.04.6 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.6 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic
Singularity>
The host OS on the HPC system is Red Hat Linux. Since the /etc/*-release
command shows Ubuntu, it seems like the /etc
directory is the one inside the container. This looks reasonable. However, when I type ls /home
, then I see the contents of /home
on the host OS. Howe could I find the files in /home
within the container?
If I type any commands to run the packages installed in /home
within the container, then the singularity shell prints command not found
. Also, if I run the Python interpreter, then I cannot import any modules installed within the container. Although the Python version matches the one in the container, the modules are not located. The PYTHONPATH
includes paths like /home/<a_directory_name>
, but the Python interpreter cannot locate the modules. Even though the docker image is fully functional, the corresponding singularity image is completely useless.
How could I use the packages and Python modules installed in /home
in the singularity container?
By default Singularity automatically mounts $HOME
into the container, which will shadow anything that was installed there during image creation.
To skip this, use the --no-home
flag when running your singularity command. Additional options, such as mounting home to a different location, are described in the online and CLI documentation.