无法使用群集上的 Singularity 登录私有 Docker 注册表

Unable to login to private Docker registry using Singularity on cluster

我一直在尝试登录我所在大学的 GitLab 实例的私有 Docker 注册表。由于 Docker 未安装在我正在使用的集群上,因此我正在使用 Singularity。

尝试登录时遇到错误:

 while login to docker://git.tu-berlin.de:5000: Get "https://git.tu-berlin.de:5000/v2/": Forbidden

现在,当我在 Firefox 中使用 URL 时,我得到:

但我也从未被要求输入密码,所以我想很明显我没有获得授权。我不确定这是否相关,但我的 ~.bashrc 中有两个代理定义,因为计算节点无法直接访问互联网:

export https_proxy=http://[nodeurl]:port/
export http_proxy=http://[nodeurl]:port/

其中 nodeurlport 当然会替换为实际值。这可能是问题所在吗?我很困惑,因为在我的本地笔记本电脑上输入 URL https://git.tu-berlin.de:5000/v2/ 会给我未经授权,但我可以通过 Singularity 登录到私有注册表并在之前未使用 Docker 登录时提取图像。

使用 docker 凭据(无论是用于私有还是 public 注册表)的最简单方法是使用环境变量 SINGULARITY_DOCKER_USERNAMESINGULARITY_DOCKER_PASSWORD。如果设置,singularity 会尝试将这些用于 all docker 注册表交互,因此仅在需要时设置它们通常很有用。文档中提供了其他信息:Authentication via Environment Variables

代理问题有点棘手。奇点似乎并没有直接处理这些问题,而是依靠 OS 来做它的事情。尝试在本地使用 env 变量(或文档中也列出的交互方法)以确保其正常工作,然后在集群中尝试一下。如果它仍然在那里玩得不好,你可能需要有点创意或联系管理员寻求指导。