Singularity 是否有类似于 Docker 网络的东西?

Does Singularity have anything similar to a Docker network?

在Docker中,我可以创建一个私有网络:

docker network create my-net

运行 一个容器中的一个 MySQL 数据库:

docker run -d --rm --name mysql-server --network my-net -e MYSQL_ROOT_PASSWORD=secret mysql/mysql-server:latest

并使用创建的网络在该数据库和我的应用程序之间进行通信:

docker run -it --rm --network my-net my_app

所有三个调用都引用同一个“my-net”,通过它进行通信。现在,我需要 运行 使用 Singularity,而不是 Docker。在 Singularity 用户指南中没有提到网络选项,我似乎也没有找到任何关于它的信息。 Singularity 可以做类似的事情吗?如果可以,怎么做?

天真地,我试图用 'singularity'

替换 'docker'
docker network create my-net

但是发现Singularity没有这样的直接替换。我需要 运行 在我无权访问“root”的 HPC 环境中编写此代码。

如上面的评论所述,Singularity does have virtual network capabilities但它们通常至少在初始设置中涉及 root 权限。

但是,如果您只想在容器之间进行通信,则无需为此做任何特别的事情。默认情况下,您的奇点容器具有与直接在主机 OS 上 运行 相同的网络访问权限。同样,奇点容器使用的端口是使用主机服务器的主机名访问的。在 Docker 术语中,您可以将其视为就好像 EXPOSE 在容器中使用的端口上始终是 运行。

但是,如果您需要不同的虚拟网络,您可能需要与集群管理员合作。

因此,如果您在同一节点上有 mysql 和应用程序容器 运行ning,则应用程序只需要对数据库 url 使用 localhost:3306。如果它在另一个节点上 运行ning,请使用该节点的主机名而不是本地主机。它是双向的。因此,如果您的奇点容器尝试在默认端口上在内部启动 sshd,它将失败,因为主机 sshd 已经在使用该端口。