如何在不使用pull命令的情况下下载Docker镜像?

Eph*_*eal 39 docker docker-registry

有没有办法我可以使用Firefox下载Docker镜像/容器,而不使用内置的docker-pull.

我被公司的防火墙和代理阻止了,我无法通过它来解决问题.

我的问题是我无法使用Docker来获取图像,即Docker保存/拉动和其他Docker提供的功能,因为它被防火墙阻止.

vik*_*027 33

只是一个替代方案 - 这就是我在我的组织中为couchbase图像所做的,我被代理阻止了.

在我的个人笔记本电脑上(OS X)

~$ $ docker save couchbase > couchbase.tar
~$ ls -lh couchbase.docker
-rw-------  1 vikas  devops   556M 12 Dec 21:15 couchbase.tar
~$ xz -9 couchbase.tar
~$ ls -lh couchbase.tar.xz
-rw-r--r--  1 vikas  staff   123M 12 Dec 22:17 couchbase.tar.xz
Run Code Online (Sandbox Code Playgroud)

然后,我将压缩的tar球上传到Dropbox并下载到我的工作机器上.由于某些原因Dropbox开放:)

在我的工作笔记本电脑上(CentOS 7)

$ docker load < couchbase.tar.xz
Run Code Online (Sandbox Code Playgroud)

参考

  • 这是一种解决方法,不直接回答OP的问题 (4认同)
  • 这并没有回答问题,即如何在不先执行“docker pull”的情况下保存图像。据我所知,“docker save”仅适用于本地图像。所以你必须先拉一下。 (4认同)

iga*_*gal 13

我只需要自己处理这个问题 - 从具有Internet访问权限的受限计算机上下载映像,但没有Docker客户端可以在另一台使用Docker客户端的受限计算机上使用,但无法访问Internet.我将我的问题发布到DevOps Stack Exchange站点:

在Docker社区的帮助下,我能够找到解决问题的方法.以下是我的解决方案.


事实证明,Moby项目Moby GitHub帐户上有一个shell脚本,可以从Docker Hub下载图像,格式可导入Docker:

脚本的用法语法如下:

download-frozen-image-v2.sh target_dir image[:tag][@digest] ...
Run Code Online (Sandbox Code Playgroud)

然后可以使用tar和导入图像docker load:

tar -cC 'target_dir' . | docker load
Run Code Online (Sandbox Code Playgroud)

为了验证脚本是否按预期工作,我从Docker Hub下载了一个Ubuntu映像并将其加载到Docker中:

user@host:~$ bash download-frozen-image-v2.sh ubuntu ubuntu:latest
user@host:~$ tar -cC 'ubuntu' . | docker load
user@host:~$ docker run --rm -ti ubuntu bash
root@1dd5e62113b9:/#
Run Code Online (Sandbox Code Playgroud)

在实践中,我将不得不首先将数据从互联网客户端(它复制安装多克)到目标/目的的机器(这确实安装了码头工人):

user@nodocker:~$ bash download-frozen-image-v2.sh ubuntu ubuntu:latest
user@nodocker:~$ tar -C 'ubuntu' -cf 'ubuntu.tar' .
user@nodocker:~$ scp ubuntu.tar user@hasdocker:~
Run Code Online (Sandbox Code Playgroud)

然后加载并使用目标主机上的图像:

user@hasdocker:~ docker load ubuntu.tar
user@hasdocker:~ docker run --rm -ti ubuntu bash
root@1dd5e62113b9:/#
Run Code Online (Sandbox Code Playgroud)


ipt*_*zer 6

使用斯科皮奥。它是专门为此(和其他)目的而设计的工具。

安装后只需执行:

mkdir ubuntu
skopeo --insecure-policy copy docker://ubuntu ./ubuntu
Run Code Online (Sandbox Code Playgroud)

复制这些文件并根据需要导入。


Ham*_* Co 5

我改编了python脚本以具有独立于操作系统的解决方案: docker-drag

这样使用它,它将创建一个TAR存档,您可以使用导入docker load

python docker_pull.py hello-world
python docker_pull.py alpine:3.9
python docker_pull.py kalilinux/kali-linux-docker
Run Code Online (Sandbox Code Playgroud)


Eph*_*eal 0

我最初问题的答案和解决方案是,我发现我可以下载 Docker 文件和所有必要的支持文件,并从头开始重新创建镜像。这本质上与下载图像相同。

这个解决方案已经在上面的问题和评论中了,我只是将其固定在这里。

这对我来说不再是问题,因为我的公司已经改变了政策并允许 docker pull 命令工作。