【问题标题】:Docker container volume binding on Google CloudGoogle Cloud 上的 Docker 容器卷绑定
【发布时间】:2021-11-27 20:20:51
【问题描述】:

我有一个小问题。因此,我构建了需要在 Google Cloud 上运行的 docker 映像,而我的问题是运行它们需要两个卷绑定标志。而且我似乎无法弄清楚它们是如何在 Google Cloud 控制台中的 Cloud Run 中作为容器参数传递的。如果我要在本地运行 docker 映像,这是命令:

docker run -v /var/run/docker.sock:/var/run/docker.sock -v /tmp:/tmp --gpus all -it --rm --name ner  -p 5000:5000 electra_mlflow

对不起,这条线很长,但唯一重要的是两个卷绑定参数。我已经阅读了 Google Cloud 的文档,但我无法弄清楚。然后我遇到了这个博客,上面说 Google Cloud 不允许卷,但提出了使用 Secret Manager 的解决方法。 https://medium.com/google-cloud/mount-a-file-as-a-volume-in-cloud-run-facc74c02cc6

然而,我离如何在我的应用程序中使用此解决方法还差得很远,特别是:我会在秘密中保存什么字符串才能使其工作?另外,据我了解,还有一个文件解决方法的大小限制,这是一个问题,但对我来说是可以解决的。

【问题讨论】:

  • 我的评论是对@DazWilin 的好回答的称赞。 Cloud Run 不在 Docker 下运行,并且大多数 Docker 样式选项不可用。如果您需要卷挂载(持久存储),我建议使用 Compute Engine 和本地持久存储。 Cloud Run 被设计成一个无状态的 HTTP 请求/响应系统,没有后台线程或任务。由于您需要存储状态,请使用提供该功能的服务。否则,您将破解精心设计的服务来满足您的需求,同时带来相关的麻烦和降低的服务可靠性。
  • 为什么需要挂载 /tmp 和 docker.sock 卷?你的容器有什么要求? /tmp 是无用的,因为它是无状态环境,您将无法保留 /tmp 数据,它是短暂的。 docker.sock 是 Cloud Run 上不会考虑的 docker 配置(因为在运行时不使用 Docker)。那么,为什么会有这些要求?

标签: docker google-cloud-platform


【解决方案1】:

Cloud Run 是所谓的“无服务器”平台,您无权访问运行容器的底层主机。

因此,当使用docker run 和--volumes 运行时,没有与使用 Docker 将主机的目录卷挂载到容器中的等价物。

您的 Cloud Run 服务可以通过多种方式访问​​,例如外部文件。使用 Secret Manager 是一种方法,尽管这种方法通常最适用于机密的使用。

如果您希望 Cloud Run 服务能够像访问本地文件一样访问文件,例如Linux 机器,您可能想要评估 NFS 服务器解决方案。如果文件在本地可用,就像您使用 docker run ... --volumes=... 实现的那样,这些使您的 Cloud Run 实例能够运行。

见:

我鼓励您彻底研究这些选项,并注意实现这些结果的替代 (!) 方法。

例如,您可以:

  • 将/tmp目录内容捆绑到镜像中
  • 将您的容器部署到运行容器运行时的 Compute Engine 虚拟机。
  • &c.

【讨论】:

  • 这个解决方法怎么样? medium.com/google-cloud/…
  • 我不会推荐我没有尝试过的解决方案。我对将一种解决方案塞进另一种解决方案持怀疑态度。 Secret Manager 最适合秘密。老实说,我认为您应该确定您要实现的具体目标,然后确定最佳解决方案。除了docker.sock,您也许可以简单地将文件捆绑到图像中。
猜你喜欢
  • 2016-07-27
  • 2019-12-21
  • 2019-12-06
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 2020-06-06
  • 2019-08-17
相关资源
最近更新 更多