推送到端口转发的dockerregistry

背景

有一个私人dockerregistry我无法控制。 此registry不能从我的电脑访问,但可以从我有权访问的远程服务器访问。

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

# 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。

我试图用ssh将dockerregistry端口(5000)转发到我的机器上的一个端口:

 $ ssh -L 5042:REGISTRY:5000 SERVER 

现在我可以从我的机器与registry进行通信:

 $ 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的事实造成的。

我可以以某种方式推送到端口转发到本地端口的私人dockerregistry?

需要有两个ssh隧道。 一个来自本地机器(这个被docker客户端使用)和一个来自docker-machine(这个被docker守护进程使用)。

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