推送到端口转发的Docker Registry

4

背景

有一个私有的docker镜像仓库,但我无法控制。该仓库无法从我的电脑访问,但可以从我可以访问的远程服务器上访问。

这是我的当前(相当低效)的工作流程:

# On my machine
$ docker save IMAGE > FILE
$ scp FILE SERVER
$ ssh SERVER
# On the server
$ docker load < FILE
$ docker tag -f IMAGE REGISTRY:5000/IMAGE
$ docker push REGISTRY:5000/IMAGE

问题

需要保存、上传和加载整个tarball,即使大部分Docker层没有变化,也需要很长时间才能推送镜像。

我尝试使用ssh将docker注册表端口(5000)转发到我的机器上的一个端口:

$ ssh -L 5042:REGISTRY:5000 SERVER

现在我可以从我的计算机与注册表进行通信:
$ curl localhost:5042/v2/
{}

但是Docker无法将镜像推送到其中:
$ docker tag IMAGE localhost:5042/IMAGE
$ docker push localhost:5042/IMAGE
The push refers to a repository [localhost:5042/IMAGE] (len: 1)
Sending image list
FATA[0000] Put http://localhost:5042/v1/repositories/IMAGE/: dial tcp 127.0.0.1:5042: connection refused

我有一种感觉,问题在于图像的不同名称/标签。在服务器上,我需要将其标记为REGISTRY:5000 / IMAGE,但在本地主机上,这是没有意义的,因为REGISTRY URL 无法从我的计算机访问。
或者问题可能是由于我通过docker-machine运行docker引起的。
问题:
我能否以某种方式推送到端口转发到本地端口的私有docker注册表?
1个回答

5

需要建立两个ssh隧道。一个从本地机器建立(这个由docker客户端使用),另一个从docker-machine建立(这个由docker守护进程使用)。

docker-machine ssh
ssh -L 5042:REGISTRY:5000 SERVER

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接