首页 > 解决方案 > 使用容器创建的 Google 计算引擎实例执行多次而不是一次

问题描述

使用运行启动脚本多达 10-20 次的容器创建的 Google 计算实例存在问题。

案例1:通过Docker构建容器,然后推送到在线注册中心,然后用该容器创建一个实例。启动脚本“Test.py”是通过容器创建来实例化的,而不是直接构建到 Docker 文件中。以下命令用于创建带有容器和参数的实例:

gcloud compute instances create-with-container busybox-vm --container-image gcr.io/example-project-id/ttime2 --container-command python --container-arg="/Test.py" --container-arg="Args"

案例 2:在 docker 镜像本身中包含启动脚本(Test.py)和相应的参数,然后实例化一个实例也会导致脚本多次运行。

备注

  1. 启动脚本作为子进程运行,因此可以轻松地将标准输出发送到远程服务器,以便对其进行监视以进行调试。

  2. 启动脚本在第一次执行完成之前执行了多次(因为脚本的结尾成功杀死了实例)。

  3. 在本地运行此 docker build 时,只需执行一次代码即可按预期执行。

  4. 我在几个不同的 docker 映像上经历了多次启动脚本执行

  5. 仅创建一个实例。

一个解决方案似乎是在子进程产生并杀死任何重复项时检查它们,我只是不确定如何识别它们。

编辑:如果您有一些关于解决具有“崩溃循环”的容器问题的一般提示,我想接受它作为答案。我个人能够在上面的 gcloud 命令中添加以下标志--container-restart-policy="never"以使各种测试正常工作(不知道为什么),所以我现在已经完成了这个问题.

标签: containersgoogle-compute-enginegcloud

解决方案


这可能是众多原因之一。一个好的诊断方法是:

  1. 更改--container-command "sleep 50000"并创建一个虚拟机。
  2. SSH进入虚拟机并运行sudo -i
  3. 运行docker ps -a直到你看到你的容器出现。
  4. 获取其容器 ID 和(如有必要,docker exec -it <ID> bash更改为)。sh你的容器应该在睡觉。这将让您进入您的容器。
  5. 从您的容器中执行Test.py以查看是否有错误。

这需要您的图像具有sleep.


推荐阅读