推送到端口转发的docker注册表

时间:2016-01-25 16:19:01

标签: docker docker-registry docker-machine

背景

我无法控制私人码头工作室。此注册表无法从我的计算机访问,但可以从我有权访问的远程服务器访问。

这是我目前(效率很低)的工作流程:

# 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

问题

即使大多数docker图层没有变化,我需要保存,上传和加载整个tarball,这需要永远推送图像。

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

$ ssh -L 5042:REGISTRY:5000 SERVER

现在我可以通过我的机器与注册表进行通信了:

$ curl localhost:5042/v2/
{}

但码头工人不会把图像推到它上面:

$ 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,但在localhost上没有任何意义,因为无法从我的计算机访问REGISTRY网址。

或者问题可能是由于我通过docker-machine运行docker这一事实。

问题

我可以以某种方式推送到端口转发到本地端口的私有docker注册表吗?

1 个答案:

答案 0 :(得分:4)

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

docker-machine ssh
ssh -L 5042:REGISTRY:5000 SERVER
相关问题