有没有办法可以使用Firefox下载Docker镜像/容器,而不使用内置的docker-pull
。
我被公司防火墙和代理阻止,我无法通过它。
我的问题是我无法使用Docker获取图像,即Docker保存/拉动以及其他Docker提供的功能,因为它被防火墙阻止。
答案 0 :(得分:23)
只是另一种选择 - 这就是我在我的组织中为couchbase图片所做的,我被代理阻止了。
~$ $ 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
然后,我将压缩的tar球上传到Dropbox并下载到我的工作机器上。出于某种原因Dropbox开放了:)
$ docker load < couchbase.tar.xz
参考
答案 1 :(得分:10)
我不得不自己处理这个问题 - 从具有Internet访问权限的受限制机器下载图像,但没有Docker客户端用于使用Docker客户端的另一台受限制机器,但没有Internet访问权限。我将问题发布到DevOps Stack Exchange site:
在Docker社区的帮助下,我找到了解决问题的方法。以下是我的解决方案。
事实证明,Moby Project在Moby GitHub account上有一个shell脚本,可以以可以导入Docker的格式从Docker Hub下载图像:
脚本的用法语法如下:
download-frozen-image-v2.sh target_dir image[:tag][@digest] ...
然后可以使用tar
和docker load
导入图片:
tar -cC 'target_dir' . | docker load
为了验证脚本是否按预期工作,我从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:/#
实际上,我必须首先将数据从Internet客户端(不安装了Docker)复制到目标/目标计算机( 具有Docker)安装的):
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:~
然后加载并使用目标主机上的图像:
user@hasdocker:~ docker load ubuntu.tar
user@hasdocker:~ docker run --rm -ti ubuntu bash
root@1dd5e62113b9:/#
答案 2 :(得分:1)
首先,检查您的Docker守护程序是否配置为使用代理。例如,使用boot2docker和docker-machine this is done on docker-machine create,--engine-env
选项。
如果这只是证书问题(即Firefox确实访问了Docker Hub),try and install that certificate:
openssl s_client -connect index.docker.io:443 -showcerts /dev/null | openssl x509 -outform PEM > docker.pem
sudo cp docker.pem /etc/pki/ca-trust/source/anchors/
sudo update-ca-trust
sudo systemctl restart docker
sudo docker run hello-world
其他解决方法(不是推荐的解决方案)would be to access Docker Hub without relying on certificate with --insecure-registry
:
如果防火墙主动阻止任何Docker拉动,那么您甚至无法从Firefox访问Docker Hub,那么您需要docker save
/docker load
一个图像存档。将它从您访问Docker Hub的机器(以及docker pull成功的位置)中保存。将其加载到公司计算机上(当然,在获得IT系统管理员批准后)。
注意:你不能轻易地&#34;只是&#34;下载图像,因为它通常基于您需要下载的其他图像。这就是docker pull
为你做的事情。这就是docker save
所做的事情(创建一个由 all 组成的必要图像的档案)。
[我]也没有让我的公司形象工作。 但我发现我可以下载Docker文件并从头开始重新创建我自己的图像。 这与下载图像基本相同。
答案 3 :(得分:1)
我最初的问题的答案和解决方案是,我发现我可以下载Docker文件和所有必要的支持文件,并从头开始重新创建自己的映像。这与下载图片基本相同。
这个解决方案已经存在于上面的问题和评论中,我只是将其固定在这里。
尽管这对我来说不再是一个问题,因为我的公司已更改政策并允许docker pull命令正常工作。
答案 4 :(得分:0)
因此,根据定义,Docker pull client命令实际上需要与Docker守护程序通信,因为Docker守护程序会为您逐个组装层。
将其视为POST请求 - 它在Docker守护程序本身中导致状态突变。当你做拉动时,你不会通过HTTP“拉”任何东西。
你可以从Docker注册表中通过REST获取所有单独的层,但这实际上与pull不同,因为pull是一个专门告诉守护进程去获取所有层的动作。你关心的形象。
答案 5 :(得分:0)
如果您公司的防火墙(和策略)允许连接到远程SSH服务器,则可能会选择另一个选项。在这种情况下,您只需设置SSH隧道即可通过它将所有流量隧道传输到Docker注册表。
答案 6 :(得分:0)
我改编了一个python脚本以拥有一个与操作系统无关的解决方案: react-native-simple-dialogs
这样使用它,它将创建一个TAR归档文件,您可以使用docker load
进行导入:
python docker_pull.py hello-world
python docker_pull.py alpine:3.9
python docker_pull.py kalilinux/kali-linux-docker
答案 7 :(得分:0)
使用Skopeo。这是专门用于(和其他)目的的工具。
安装后,只需执行:
mkdir ubuntu
skopeo --insecure-policy copy docker://ubuntu ./ubuntu
复制这些文件并根据需要导入。