尝试使用Kubernetes(容器管理平台)从本地注册表中提取docker镜像时遇到问题。
当前的情况是我将Docker镜像存储在运行于地址192.168.99.103的Docker VM中。我正在Windows机器上运行docker。
我有一个在本地创建的镜像,名为“tomcat-test:dockerfile”。
接下来,我使用以下命令创建并运行本地注册表:
docker run -d -p 5000:5000 --restart always --name registry registry:2
在这一点上,我像这样标记图像:
docker tag tomcat-test:dockerfile localhost:5000/tomcat-test:latest
最后,我使用以下命令推送到本地注册表:
docker push localhost:5000/tomcat-test:latest
这已成功推送到注册表。
现在我想使用Kubernetes从本地docker注册表中提取信息。为此,我必须提供镜像在docker注册表中的位置的URL:
我认为该网址是:
192.168.99.103:5000/tomcat-test:latest
但是,出现以下错误:
Failed to pull image "192.168.99.103:5000/tomcat-test": rpc error: code = 2 desc = Error response from daemon: Get https://192.168.99.103:5000/v1/_ping: tls: oversized record received with length 20527
我怀疑这是来自Docker的错误消息。
现在我已经在网上进行了研究,并且有人建议创建一个新的docker计算机,在其中指定不安全注册表的IP。因此,我使用了以下命令:
docker-machine create -d virtualbox --engine-insecure-registry localhost:5000 dev2
但是,按照上面的步骤操作后,此操作仍然无效,并且出现了相同的错误。
有没有人遇到这个问题的解决方案?还有什么我应该做些别的事情来防止出现此问题?
任何帮助,将不胜感激。
谢谢。
最佳答案
找到了解决方法:
如果您使用的是minikube,则可以使用“ssh”命令进入minikube VM:
minikube ssh
这将启动 shell 。在这里,您可以通过输入命令从Docker Hub提取Docker镜像:
docker pull <repo_name>
这样,您便可以将镜像拉入minikube VM。
之后,下一步是退出minikube ssh shell,并在命令行上运行以下命令:
kubectl.exe run <YOUR_POD_NAME> --image=<docker_repo_name>
其中kubectl.exe是kubernetes可执行文件,是您要从中提取最新镜像的存储库的名称
例如:
kubectl.exe run ubuntu-test-3 --image=rm12345/ubuntutest3:latest
这应该成功运行。
请注意,为了使Pod在kubernetes中成功运行,必须确保Docker容器具有一个可以无限期运行应用程序的入口点。如果不是,那么您可能会在Pod上看到“CrashBackLoop”状态,而不是“正在运行”状态。
关于docker - Docker:无法提取图像(收到长度为20527的超大记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44679516/