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

标签 docker docker-registry docker-machine

背景

有一个我无法控制的私有(private) 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但在 localhost 上,REGISTRY 毫无意义无法从我的计算机访问 url。

或者问题可能是由于我通过 docker-machine 运行 docker 造成的。

问题

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

最佳答案

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

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

关于docker - 推送到端口转发的 docker 注册表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34997254/

相关文章:

docker - 安装自定义插件 odoo docker v.12

docker - HTTP状态:使用docker-machine在docker pull上出现500错误

docker - 使用docker机器初始化docker swarm:超出上下文期限

docker - 使用Windows为Docker安装卷时的目录为空

powershell - 尽管有正在运行的服务,Docker 容器仍会退出

docker - 如何在 popper 工作流的 step 属性中正确引用 `dir`?

docker - Spring Boot应用程序在Docker容器中带有点燃缓存

docker - 无法将 docker 镜像推送到 docker 私有(private)注册表

docker - Docker Registry存储未更新

docker - 无法将图像推送到配置为代理缓存的 docker 注册表