有没有一种方法可以使用Firefox下载Docker镜像/容器,而不使用内置的docker-pull。我被公司的防火墙和代理服务器封锁了,我无法通过它。我的问题是,我不能使用Docker来获取图像,也就是说,Docker保存/拉取和其他Docker提供的功能,因为它被防火墙阻止了。
docker-pull
oxiaedzo1#
只是一个替代方案-这是我在组织中为couchbase映像所做的,其中我被代理阻止。
~$ $ docker save couchbase > couchbase.tar ~$ ls -lh couchbase.tar -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
然后,我把压缩的焦油球上传到Dropbox,在我的工作机器上下载,由于某种原因Dropbox是打开的:)
$ docker load < couchbase.tar.xz
1wnzp6jl2#
我不得不自己处理这个问题-从一台可以访问互联网但没有Docker客户端的受限机器上下载镜像,以便在另一台可以访问互联网但没有Docker客户端的受限机器上使用。我将我的问题发布到DevOps Stack Exchange site:
在Docker社区的帮助下,我找到了解决问题的方法。下面是我的解决方案。因此,Moby Project在Moby GitHub account上有一个shell脚本,可以从Docker Hub下载图像,格式可以导入Docker:
脚本的用法语法如下所示:
download-frozen-image-v2.sh target_dir image[:tag][@digest] ...
然后可以使用tar和docker load导入图像:
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 -i ubuntu.tar user@hasdocker:~ docker run --rm -ti ubuntu bash root@1dd5e62113b9:/#
svgewumm3#
我改编了一个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
3pvhb19x4#
使用Skopeo。这是一个专门为这个(和其他)目的而设计的工具。安装后,只需执行:
mkdir ubuntu skopeo --insecure-policy copy docker://ubuntu ./ubuntu
复制这些文件并按您喜欢的方式导入。
c9qzyr3d5#
首先,检查您的Docker守护进程是否配置为使用代理。使用boot 2docker和docker-machine,例如this is done on docker-machine create,带有--engine-env选项。如果这只是一个证书问题(即Firefox确实访问了Docker Hub),请尝试安装该证书:
--engine-env
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
另一种解决方法(不推荐使用)是访问Docker Hub,而不依赖--insecure-registry证书:如果防火墙正在积极阻止任何Docker pull,以至于您甚至无法从Firefox访问Docker Hub,那么您需要docker save / docker load镜像存档。从您访问Docker Hub的机器(以及Docker pull成功的机器)保存它。将其加载到您的公司机器上(当然,在您的IT系统管理员批准之后)。注意:你不能轻易地“只”下载一个映像,因为它通常是基于你也需要下载的其他映像之上的。这是docker pull为你做的。这也是docker save做的(创建一个由 * 所有 * 必要映像组成的归档)。OP Ephreal在评论中补充道:[I]我也没有让我的公司镜像工作。但是我发现我可以下载Docker文件并从头开始重新创建镜像。这本质上与下载镜像相同。
--insecure-registry
docker save
docker pull
k10s72fa6#
因此,根据定义,Docker pull client命令实际上需要与Docker守护进程对话,因为Docker守护进程会为您逐个组装层。把它想象成一个POST请求--它在Docker守护进程本身中引起状态的变化。当你执行拉操作时,你并不是在HTTP上“拉”任何东西。你可以通过REST从Docker注册表中拉取所有单独的层,但这实际上与拉取的语义不同,因为拉取是一个专门告诉守护进程去获取你所关心的映像的所有层的操作。
t1rydlwq7#
另一个可能的选择是,如果您的公司防火墙(和策略)允许连接到远程SSH服务器。在这种情况下,您可以简单地设置SSH隧道,通过它将任何流量隧道传输到Docker注册表。
8yoxcaq78#
我最初问题的答案和解决方案是,我发现我可以下载Docker文件和所有必要的支持文件,并从头开始重新创建镜像。这与下载镜像基本相同。这个解决方案已经在上面的问题和评论中,我只是把它钉在这里。这对我来说已经不是问题了,因为我的公司已经改变了政策,允许docker pull命令工作。
hsvhsicv9#
谢谢@Ham Co的回答,我采用了一个golang工具来实现一个独立于操作系统的解决方案:golang http pull docker image
./gopull download redis
获取docker可导入的归档文件redis.tar参考文献:https://github.com/NotGlop/docker-drag
9条答案
按热度按时间oxiaedzo1#
只是一个替代方案-这是我在组织中为couchbase映像所做的,其中我被代理阻止。
在我的个人笔记本电脑(OS X)上
然后,我把压缩的焦油球上传到Dropbox,在我的工作机器上下载,由于某种原因Dropbox是打开的:)
在我的工作笔记本电脑上(CentOS 7)
1wnzp6jl2#
我不得不自己处理这个问题-从一台可以访问互联网但没有Docker客户端的受限机器上下载镜像,以便在另一台可以访问互联网但没有Docker客户端的受限机器上使用。我将我的问题发布到DevOps Stack Exchange site:
在Docker社区的帮助下,我找到了解决问题的方法。下面是我的解决方案。
因此,Moby Project在Moby GitHub account上有一个shell脚本,可以从Docker Hub下载图像,格式可以导入Docker:
脚本的用法语法如下所示:
然后可以使用
tar
和docker load
导入图像:为了验证脚本是否按预期工作,我从Docker Hub下载了一个Ubuntu镜像并将其加载到Docker中:
在实践中,我必须首先将数据从Internet客户端(它 * 没有 * 安装Docker)复制到目标/目的地计算机(它 * 有 * 安装Docker):
然后在目标主机上加载并使用映像:
svgewumm3#
我改编了一个python脚本,以获得独立于操作系统的解决方案:docker-drag
像这样使用它,它将创建一个TAR存档,您可以使用
docker load
导入:3pvhb19x4#
使用Skopeo。这是一个专门为这个(和其他)目的而设计的工具。
安装后,只需执行:
复制这些文件并按您喜欢的方式导入。
c9qzyr3d5#
首先,检查您的Docker守护进程是否配置为使用代理。使用boot 2docker和docker-machine,例如this is done on docker-machine create,带有
--engine-env
选项。如果这只是一个证书问题(即Firefox确实访问了Docker Hub),请尝试安装该证书:
另一种解决方法(不推荐使用)是访问Docker Hub,而不依赖
--insecure-registry
证书:如果防火墙正在积极阻止任何Docker pull,以至于您甚至无法从Firefox访问Docker Hub,那么您需要
docker save
/docker load
镜像存档。从您访问Docker Hub的机器(以及Docker pull成功的机器)保存它。将其加载到您的公司机器上(当然,在您的IT系统管理员批准之后)。注意:你不能轻易地“只”下载一个映像,因为它通常是基于你也需要下载的其他映像之上的。这是
docker pull
为你做的。这也是docker save
做的(创建一个由 * 所有 * 必要映像组成的归档)。OP Ephreal在评论中补充道:
[I]我也没有让我的公司镜像工作。但是我发现我可以下载Docker文件并从头开始重新创建镜像。这本质上与下载镜像相同。
k10s72fa6#
因此,根据定义,Docker pull client命令实际上需要与Docker守护进程对话,因为Docker守护进程会为您逐个组装层。
把它想象成一个POST请求--它在Docker守护进程本身中引起状态的变化。当你执行拉操作时,你并不是在HTTP上“拉”任何东西。
你可以通过REST从Docker注册表中拉取所有单独的层,但这实际上与拉取的语义不同,因为拉取是一个专门告诉守护进程去获取你所关心的映像的所有层的操作。
t1rydlwq7#
另一个可能的选择是,如果您的公司防火墙(和策略)允许连接到远程SSH服务器。在这种情况下,您可以简单地设置SSH隧道,通过它将任何流量隧道传输到Docker注册表。
8yoxcaq78#
我最初问题的答案和解决方案是,我发现我可以下载Docker文件和所有必要的支持文件,并从头开始重新创建镜像。这与下载镜像基本相同。
这个解决方案已经在上面的问题和评论中,我只是把它钉在这里。
这对我来说已经不是问题了,因为我的公司已经改变了政策,允许docker pull命令工作。
hsvhsicv9#
谢谢@Ham Co的回答,
我采用了一个golang工具来实现一个独立于操作系统的解决方案:
golang http pull docker image
获取docker可导入的归档文件redis.tar
参考文献:
https://github.com/NotGlop/docker-drag