GCE 未正确部署 GCR 映像

Posted

技术标签:

【中文标题】GCE 未正确部署 GCR 映像【英文标题】:GCE doesn't deploy GCR image correctly 【发布时间】:2019-01-04 16:17:54 【问题描述】:

我已关注 Google 文档中的 this guide,以便能够将自定义 Docker 映像推送到 Google Container Registry,然后能够使用该映像启动新的 GCE 实例。起初我想尝试使用来自 docker hub 的 anaconda3 public image 而不做任何修改(为了测试)。

所以这是我安装 gcloud 和 docker 后到目前为止所做的步骤:

    gcloud auth configure-docker -> 使用我的 gcloud 凭据配置 docker docker pull continuumio/anaconda3 -> 拉取公众图片 docker tag continuumio/anaconda3 eu.gcr.io/my-project-id/anaconda3 -> 使用文档中指定的注册表名称标记本地图像 docker push eu.gcr.io/my-project-id/anaconda3 -> 将图片推送到 GCR

好!我现在可以通过 GCR 界面查看我的图像,并且还可以使用 GCE 部署它。我选择使用 f1-micro 实例、Container-Optimized OS 67-10575.62.0 stable、10 Go 启动盘、允许 HTTP 流量等来部署它。 p>

但是当我用ssh 连接到新创建的VM 实例时,我找不到anaconda3 库(应该在/opt/conda 中创建)。相反,我可以看到一个/opt/google 目录,这让我认为图像没有正确部署,GCE 正在使用默认图像...

所以我尝试检查图像是否在 GCR 中正确推送,因此我决定删除我的本地图像并再次从 GCR 中拉取它:

    docker rmi -f eu.gcr.io/my-project-id/anaconda3 docker pull eu.gcr.io/my-project-id/anaconda3:latest

我运行图像

docker run -t -i eu.gcr.io/my-project-id/anaconda3

我可以看到一切都很好,我在 /opt/conda 中正确安装了 anaconda3 以及所需的所有工具(Pandas、Numpy、Jupyter notebook 等)


我试图找到和我有同样问题的人但没有成功……也许我在我的过程中做错了什么? 谢谢!

TL;DR 我的问题是我在 Google GCR 上推送了 anaconda3 图像,但是当我使用此图像启动虚拟实例时,我没有 anaconda

【问题讨论】:

【参考方案1】:

在GCE实例上找不到直接安装的anaconda库是正常的。

实际上,当您选择在 GCE 虚拟机实例上部署容器镜像时,Docker 容器将从您提供的镜像启动(在您的示例中,eu.gcr.io/my-project-id/anaconda3)。这些库未安装在主机上,而是该容器中(运行docker ps 以查看它,但通常它与您的VM 实例具有相同的名称)。如果你运行类似的东西:

docker exec -it <docker_container_name> ls /opt/conda

然后您应该会看到 anaconda 库,仅存在于容器中

当您运行docker run -t -i eu.gcr.io/my-project-id/anaconda3 时,您实际上是在启动容器并在该容器内运行交互式 bash 会话(请参阅CMD here)。这就是为什么您可以找到 anaconda 库的原因:您在容器中!

容器化软件(此处为docker)提供主机和容器之间的隔离。我建议您阅读有关 containerization、Docker 和 how to run containers on Container-Optimized OS 的文档。

【讨论】:

所以如果我理解正确的话,将 GCR 容器镜像部署到 GCE 就像在经典的 linux 发行版上使用 docker,然后从 docker hub 拉取并运行我想要的镜像,是这样吗?但是当我运行docker ps 时,我可以使用gcr.io/gce-containers/konlet:v.0.8-latest 图像找到一个容器,而当我运行docker exec -it &lt;container_id&gt; ls /opt 时,没有打印任何内容。如果我运行docker images 我只能看到 konlet 图像,似乎我找不到 anaconda3 图像。无论如何感谢您的澄清,它非常有用!不幸的是,我还没有足够的声誉来投票,哈哈 @Sewake 你说得对,使用这种方法可以避免你自己安装Docker;此外,Container-Optimized OS 有很多benefits。 Konlet 容器应该只在 VM 启动时出现,它的目标只是启动你自己的容器,基于你在 gce-container-declaration(或在 Web UI 中)设置的内容。一旦您自己的容器启动,它就会停止。但奇怪的是你自己的容器没有出现。也许f1-micro 太小了?

以上是关于GCE 未正确部署 GCR 映像的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在不实际部署映像的情况下在 GCE 上配置容器优化的 OS VM?

无法 RDP 或 ping 从自定义映像创建的 GCE 实例

TensorFlow - 使用哪个 Docker 映像?

Google App Engine Docker容器502错误网关

Cloud Function 构建错误 - 无法从配置文件获取映像的操作系统

Docker 映像未使用 https 和 tomcat 运行