如何将Docker Hub镜像拉取到Google Cloud Run?

42

我正在尝试将Docker镜像导入Google Cloud Run。我看到我可能需要首先将其拉入Google容器注册表,但我是否可以避免这样做?此外,我更希望直接从源头获取以保持最新。

enter image description here


你可以在那里使用普通的Docker镜像名称吗?例如thecodingmachine/gotenbergdocker.io/thecodingmachine/gotenberg?尽管它被标记为“URL”,但图像中的示例实际上并不是标准的URL。 - David Maze
不好意思,这里没有任何线索。看起来他们对此有特定的要求。 - jean d'arme
@jeand'arme,别试了,我在看到你的帖子时已经尝试过了。我将图像拉到本地并将其推送到GCR。但是最后,即使我在Cloud Run上部署,并设置了正确的端口,仍然存在运行时问题,因为在根路径(/tiny)创建了一个目录。今天这个容器无法在Cloud Run上运行... - guillaume blaquiere
那个问题还有其他解决方案吗? - jean d'arme
1
这是一个开源项目。我把它放在我的待办事项里,打算看一看,这是一个有趣的案例。 - guillaume blaquiere
显示剩余4条评论
2个回答

64

我看了一下这个项目,最终成功在Cloud Run上运行。

首先,你不能从Google容器注册表Artifact Registry之外拉取镜像。因此,你需要在GCP中拉取镜像,标记它并推送它(可以是你的项目或不是你的项目,但必须在GCP上)。

以下是步骤:

# Pull the image (I did it on Cloud Shell)
docker pull thecodingmachine/gotenberg:6

# Tag the image
docker tag thecodingmachine/gotenberg:6 gcr.io/<MY_PROJECT_ID>/thecodingmachine/gotenberg:6

#Push the image (no authentication issue on Cloud Shell)
docker push gcr.io/<MY_PROJECT_ID>/thecodingmachine/gotenberg:6

# Deploy on Cloud Run
gcloud run deploy --image=gcr.io/<MY_PROJECT_ID>/thecodingmachine/gotenberg:6 \
  --port=3000 --region=us-central1 --allow-unauthenticated --platform=managed \
  --command=gotenberg gotenberg

在 Cloud Run 部署的技巧是:
  • 您需要指定端口,而不是使用默认的 8080 端口,这里使用的是 3000 端口
  • 您需要明确指定命令。默认情况下,会使用入口点(/tini),并且容器构建可能不太好,因为存在权限问题。有关详细信息,请参见 Dockerfile

然后,使用 Cloud Run URL 而不是文档中的 http://localhost:3000,然后尽情享受吧!


哇!明天起床后我会立即实现它 - 谢谢! - jean d'arme
我认为在Cloud Run上使用tini没有问题。 tini应该可以正常工作。 - ahmet alp balkan
@AhmetB-Google 是的,应该可以工作。Dockerfile执行了chmod +x,但我不知道为什么在Cloud Run日志中没有指定command参数时会出现“终止:应用程序启动失败:无法创建init进程:无法加载/tini:权限被拒绝”的错误。你可以试一下。 - guillaume blaquiere
2
成功了!非常感谢。 - jean d'arme
3
对于需要这样做的人(例如,不使用云shell,而是从工作站),要从CLI身份验证到GCR,请使用 gcloud auth configure-docker - thisjustin
显示剩余2条评论

18
Google 已更新 Cloud Run 的设置,现在支持直接使用 Docker Hub 镜像。只需添加您的 Repo 路径(如果需要,可以加上标签),不需要任何地区或主机,Docker Hub 就会自动拉取镜像。

use Docker Hub image in Google Cloud Run


那你的代码仓库只需要有 Dockerfile 或 .yaml 文件就可以了,是吗? - jean d'arme
3
不,图像需要托管在dockerhub.com上,然后您可以执行我在这里描述的操作。使用Dockerfile,您可以使用docker build命令创建图像。此图像可以推送到像DockerHub这样的容器注册表。 - eddex
请解释一下这个格式是什么意思?例如,我有一个用于我的Grafana镜像的格式:"docker.io/grafana/grafana-oss" - undefined
你贴的链接无效,但是可以在Docker Hub上找到这个镜像:https://hub.docker.com/r/grafana/grafana-oss。要在"Google Cloud Run"中使用它,只需在输入框中输入grafana/grafana-oss,如果你想使用特定版本,则输入类似grafana/grafana-oss:9.5.12的内容。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接