containers - 使用容器创建的 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)和相应的参数,然后实例化一个实例也会导致脚本多次运行。
备注:
启动脚本作为子进程运行,因此可以轻松地将标准输出发送到远程服务器,以便对其进行监视以进行调试。
启动脚本在第一次执行完成之前执行了多次(因为脚本的结尾成功杀死了实例)。
在本地运行此 docker build 时,只需执行一次代码即可按预期执行。
我在几个不同的 docker 映像上经历了多次启动脚本执行
仅创建一个实例。
一个解决方案似乎是在子进程产生并杀死任何重复项时检查它们,我只是不确定如何识别它们。
编辑:如果您有一些关于解决具有“崩溃循环”的容器问题的一般提示,我想接受它作为答案。我个人能够在上面的 gcloud 命令中添加以下标志--container-restart-policy="never"以使各种测试正常工作(不知道为什么),所以我现在已经完成了这个问题.
解决方案
这可能是众多原因之一。一个好的诊断方法是:
- 更改
--container-command "sleep 50000"
并创建一个虚拟机。 - SSH进入虚拟机并运行
sudo -i
- 运行
docker ps -a
直到你看到你的容器出现。 - 获取其容器 ID 和(如有必要,
docker exec -it <ID> bash
更改为)。sh
你的容器应该在睡觉。这将让您进入您的容器。 - 从您的容器中执行
Test.py
以查看是否有错误。
这需要您的图像具有sleep
.
推荐阅读
- javascript - 编写类并实现功能
- kotlin - 我如何从下面的代码中获取下载地址?
- c# - 在 Gridview 中显示反序列化 Json 的问题
- c# - 我无法在 Excel 中将数据插入到我想要的位置
- javascript - 仅当 Firestore 中的值为 true 时才使用 V-IF 显示按钮
- git - 用户名/project.git 的权限被拒绝
- xamarin - 如何在 Xamarin 表单上绘制 1/3 圆圈?
- apache-kafka - 代理在检测到配额违规(Kafka 配额延迟)时如何反应?
- angular - 我需要所有带有 [(ngModel)] 的单选按钮
- ios - WebRTC iOS 13 模拟器 - 红屏 H264 解码