我有两台计算机都有docker,我想保留我的docker镜像我做的另一台主机没有连接到互联网但是在本地局域网上。
所以这是我的机器(我使用hello-world图像示例)
macHost:~ ciasto$ docker tag hello-world 192.168.0.6:5000/hello-world
然后我尝试docker push 192.168.0.6:5000/hello-world
但这会引发错误:
The push refers to a repository [192.168.0.6:5000/hello-world]
Get https://192.168.0.6:5000/v2/: dial tcp 192.168.0.6:5000: getsockopt: connection refused
所以我尝试没有5000端口。
$ docker push 192.168.0.6/hello-world-2
那也扔错了:
The push refers to a repository [192.168.0.6/hello-world-2]
Get https://192.168.0.6/v2/: dial tcp 192.168.0.6:443: getsockopt: connection refused
我究竟做错了什么 ?
Docker Registry是一个特定的软件;你不能直接docker push
图像到另一个系统。
最好的工作流程几乎肯定是写一个描述如何构建图像的Dockerfile
。这是一个简单的文本文件,与shell脚本完全不同,您通常会将其添加到源代码存储库中。然后在另一个系统上,您可以检查存储库并运行docker build
并获得功能相同的图像。
如果您有半隔离网络,则可以始终运行自己的注册表。假设您设置了本地DNS,主机名my-registry.local
解析为192.168.0.123;然后你可以docker tag
你的本地图像作为my-registry.local/me/imagename
,docker push
他们从一个系统,和docker pull
他们从另一个。
最低维护,最不可重复,最长期努力的路径是docker save
第一个系统上的图像,scp
或以其他方式将其传输到第二个系统,然后docker load
它在那里。如果你有动力,你甚至可以一步到位
docker save me/imagename | ssh elsewhere docker load
如果“其他”系统实际上与网络断开连接并且“将其复制到其他系统”步骤涉及将映像文件复制到可移动介质上,则必须执行此操作。如果您经常这样做,或者有多个目标系统,您可能会发现设置本地注册表是一项很好的投资。