Prv*_*aak 4 docker docker-registry docker-machine
背景
有一个我无法控制的私有 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
Run Code Online (Sandbox Code Playgroud)
问题
即使大多数 docker 层没有变化,我也需要保存、上传和加载整个 tarball 来推送图像。
我尝试使用 ssh 将 docker 注册表端口(5000)转发到我机器上的端口:
$ ssh -L 5042:REGISTRY:5000 SERVER
Run Code Online (Sandbox Code Playgroud)
现在我可以从我的机器与注册表进行通信:
$ curl localhost:5042/v2/
{}
Run Code Online (Sandbox Code Playgroud)
但是 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
Run Code Online (Sandbox Code Playgroud)
我有一种感觉,问题出在图像的不同名称/标签中。在服务器上,我需要将其标记为,REGISTRY:5000/IMAGE但在 localhost 上这是没有意义的,因为REGISTRY无法从我的计算机访问该url。
或者问题可能是由于我通过 docker-machine 运行 docker 造成的。
题
我可以以某种方式推送到端口转发到本地端口的私有 docker 注册表吗?
需要有两个 ssh 隧道。一台来自本地机器(此一台由 docker 客户端使用),另一台来自 docker-machine(此一台由 docker 守护程序使用)。
docker-machine ssh
ssh -L 5042:REGISTRY:5000 SERVER
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1430 次 |
| 最近记录: |