我在尝试使用Kubernetes(容器管理平台)从本地注册表中提取docker镜像时遇到问题。
目前的情况是我的docker VM存储在docker VM中,它运行在地址:192.168.99.103。我正在从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
但是,按照上述步骤操作后,仍然无效,我也遇到了同样的错误。
有没有人遇到过这个问题的解决方案?还有什么我应该做的不同,以防止这个问题出现?
任何帮助都将不胜感激。
感谢。
答案 0 :(得分:0)
找到了解决方法:
如果您使用的是minikube,则可以使用' ssh'命令进入minikube VM:
$string = 'uint32_t key['.count($parts).'] = {'. implode(',', $parts). '};';
echo $string;
// uint32_t key[4] = {0x6f6e6e61,0x676e6979,0x6e6f6d20,0x0079656b};
这会打开shell。在这里,您可以通过输入命令从Docker hub中提取泊坞窗图像:
minikube ssh
通过这样做,您可以将图像拉入minikube VM。
在此之后,下一步是退出minikube ssh shell并在命令行上运行以下命令:
docker pull <repo_name>
其中kubectl.exe是kubernetes可执行文件,是您要从中提取最新图像的存储库的名称
例如:
kubectl.exe run <YOUR_POD_NAME> --image=<docker_repo_name>
这应该成功运行。
请注意,为了使pod在kubernetes中成功运行,您必须确保Docker容器具有一个将无限期运行应用程序的入口点。如果没有,那么你可能会看到一个&#39; CrashBackLoop&#39;在pod上的状态,而不是&#39;运行&#39;状态。