如何在不使用存储库的情况下将Docker映像从一台机器传输到另一台机器,无论是私有还是公共的?

我在VirtualBox中创建了自己的映像,完成后,我尝试部署到其他机器上以获得实际使用。

由于它基于我自己的镜像(如Red Hat Linux),因此无法从Dockerfile中重新创建。我的dockerfile不容易移植。

有没有简单的命令可以使用?还是另一种解决方案?


当前回答

要将图像从本地Docker安装传输到minikube VM:

docker save <image> | (eval $(minikube docker-env) && docker load)

其他回答

根据@kolypto的回答,这对我来说很有用,但只适用于docker加载的sudo:

docker save <image> | bzip2 | pv | ssh user@host sudo docker load

或者如果您没有/不想安装pv:

docker save <image> | bzip2 | ssh user@host sudo docker load

无需手动压缩或类似操作。

如果您在Windows计算机上工作,并将命令(如

docker save <image> | ssh user@host docker load

如果您使用的是powershell,则不会起作用,因为它似乎在输出中添加了一个额外的字符。但是,如果使用cmd(命令提示符)运行该命令,则该命令将起作用。附带说明的是,您也可以使用Chocolatey安装gzip,以下内容也可以在cmd中使用。

docker save <image> | gzip | ssh user@host docker load

真实世界示例

#host1
systemctl stop docker
systemctl start docker
docker commit -p 1d09068ef111 ubuntu001_bkp3
#create backup
docker save -o ubuntu001_bkp3.tar ubuntu001_bkp3

#upload ubuntu001_bkp3.tar to my online drive
aws s3 cp ubuntu001_bkp3.tar s3://mybucket001/


#host2
systemctl stop docker
systemctl start docker
cd /dir1

#download ubuntu001_bkp3.tar from my online drive
aws s3 cp s3://mybucket001/ubuntu001_bkp3.tar /dir1

#restore backup
cat ./ubuntu001_bkp3.tar  | docker load
docker run --name ubuntu001 -it ubuntu001_bkp3:latest bash
docker ps -a
docker attach ubuntu001




使用docker机器时,您可以使用以下方式在机器mach1和mach2之间复制图像:

docker $(docker-machine config <mach1>) save <image> | docker $(docker-machine config <mach2>) load

当然,您也可以将pv放在中间以获得进度指示器:

docker $(docker-machine config <mach1>) save <image> | pv | docker $(docker-machine config <mach2>) load

您还可以省略docker机器配置子shell之一,以使用当前默认的docker主机。

docker save <image> | docker $(docker-machine config <mach>) load

将图像从当前docker主机复制到mach

or

docker $(docker-machine config <mach>) save <image> | docker load

从mach复制到当前docker主机。

对于容器文件系统的扁平导出,请使用;

docker导出CONTAINER_ID>my_CONTAINER.tar

使用cat my_container.tar | docker import-导入所述图像。