The squashfs image should be read-only so that makes sense.
When you are going to use the container as a user, since /nfshome doesn't exist it's trying to use overlay... check your configuration in /etc/singularity/singularity.conf or in /usr/local/etc/singularity/singularity.conf depending on how you configured it. Check if you have overlay disabled. You may simply be using a kernel that's too old. It's more than likely too, that your root home /root is not on NFS.
You need that directory to exist so one way to do this is:
sudo singularity build -s hello-world shub://vsoch/hello-world
then go into that hello-world folder and create the directory /nfshome. You can then run it with
singularity run hello-world
If you want, once you've made the change you can turn it back into a squashfs image with
sudo singularity build hello-world.simg hello-world
if you were to delete /root then you'll get the same behavior when trying to shell in as root. You can avoid it by specifying an alternate home directory such as:
singularity shell --home / hello-world.simg
this doesn't work with exec or run though as one might assume.
to troubleshoot you can always try:
singularity -vvv --debug shell hello-world.simg
that will provide more info.