我有两台都装有docker的计算机,我想将我制作的docker映像保留到另一台主机,该主机不连接到互联网,但是在本地LAN上。
这是我的机器(我使用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
我在做什么错了?
答案 0 :(得分:0)
Docker Registry是特定的软件;您不能直接将docker push
图像复制到另一个系统。
几乎可以肯定,最好的工作流程是写一个Dockerfile
来描述如何构建图像。这是一个简单的文本文件,与外壳脚本完全不同,通常会添加到源代码存储库中。然后,在另一个系统上,您可以检出存储库并运行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
如果“其他地方”系统实际上与网络断开连接,并且“将其复制到另一个系统”步骤涉及将映像文件复制到可移动媒体上,则您将被迫执行此操作。但是,如果您只是定期执行此操作,或者具有多个目标系统,则可能会发现建立本地注册表是一项不错的投资。