Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将docker tar文件转换为奇点图像?_Docker_Singularity Container - Fatal编程技术网

将docker tar文件转换为奇点图像?

将docker tar文件转换为奇点图像?,docker,singularity-container,Docker,Singularity Container,我对Docker和Singularity都是新手。我最近创建了规范的main.c #include <stdio.h> #include <stdlib.h> int main(void){ printf("Hello Docker World!\n"); return 0; } 然后我构建了docker映像并可以运行它,即 dockerd & ## Start Docker daemon docker build --tag hello .

我对Docker和Singularity都是新手。我最近创建了规范的
main.c

#include <stdio.h>
#include <stdlib.h>

int main(void){
    printf("Hello Docker World!\n");
    return 0;
}
然后我构建了docker映像并可以运行它,即

dockerd &  ## Start Docker daemon
docker build --tag hello .
docker run hello   ## Outputs "Hello Docker World"
然后我将图像导出到第二台计算机(没有docker,但有奇点),即

现在在第二台机器上,没有docker,但是有奇点,我想创建一个奇点图像。t singularity给出了从docker Hub上的docker映像创建singularity映像的说明,但没有给出从docker tar文件转换的说明


问题:如何从我的
hello.tar

使用本地注册表容器创建奇点图像,如下所示:

# Start a docker registry
$ docker run -d -p 5000:5000 --restart=always --name registry registry:2
# Push local docker container to it
$ docker tag alpine localhost:5000/alpine
$ docker push localhost:5000/alpine
# Create def file for singularity like this..
# (add your modifications)
Bootstrap: docker
Registry: http://localhost:5000
Namespace:
From: alpine:latest
# Build singularity container
$ sudo SINGULARITY_NOHTTPS=1 singularity build alpine.simg def
  • 首先,保存您的docker图像

    sudo docker保存图像\u id-o local.tar

  • 然后以任何你喜欢的方式复制到另一台机器上

  • 最后,通过

    singularity build local\u tar.sif docker-archive://local.tar

    它使用docker archive引导代理。我能读懂它


  • 刘若林的答案是我建议先试试

    你还可以试试这个工具。 docker2singularity本身就是一个docker映像,因此易于安装。 此外,它还支持当前和旧版本的奇点

    作为如何在你的
    hello
    docker图像上使用docker2singularity的一个例子,你可以

  • 创建一个目录,将奇点图像文件写入其中

    mkdir -p /tmp/test
    
  • 使用docker图像上的docker2singularity
    hello
    和mount
    /tmp/test
    作为输出目录

    docker run -v /var/run/docker.sock:/var/run/docker.sock \
    -v /tmp/test:/output \
    --privileged -t --rm \
    quay.io/singularity/docker2singularity \
    hello
    
  • 将创建的奇点图像文件从
    /tmp/test
    移动到具有奇点的主机并运行它


  • 为什么不将它发布到dockerhub并使用呢?我有一些不想公开的代码。然后创建一个本地docker注册表并将图像推送到本地注册表。第二台机器是CentOS 6.9。Docker()似乎不支持它。我以前曾尝试在此计算机上安装docker,但无法获得工作版本。在这种情况下,您应该在第一台机器上使用singularity export,在另一台机器上使用import。如果在步骤3中我没有访问机器上docker的权限,我该怎么做?我得到
    错误:未知容器构建singularity配方格式:docker-archive://local.tar 中止:在RETVAL=255时中止,得到与@eric相同的错误_kernfeld@RuolinLiu我试过了同样的方法做转换,正如你提到的,在奇点官方网站上也有。但我面临的问题是,转换后的图像与原始图像(约1/3)相比非常小,这使我相信构建跳过了原始docker图像中的所有包(可能是自定义包)。你知道这里发生了什么事吗?
    
    mkdir -p /tmp/test
    
    docker run -v /var/run/docker.sock:/var/run/docker.sock \
    -v /tmp/test:/output \
    --privileged -t --rm \
    quay.io/singularity/docker2singularity \
    hello