Docker:无法提取图片(收到超长记录,长度为20527

时间:2017-06-21 14:52:27

标签: docker kubernetes boot2docker docker-machine

我在尝试使用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

但是,按照上述步骤操作后,仍然无效,我也遇到了同样的错误。

有没有人遇到过这个问题的解决方案?还有什么我应该做的不同,以防止这个问题出现?

任何帮助都将不胜感激。

感谢。

1 个答案:

答案 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;状态。