【发布时间】:2021-05-20 00:59:49
【问题描述】:
我一直在使用谷歌的容器优化操作系统在 GCP 计算引擎虚拟机上部署容器。当主机 VM 在 GCP 中停止时,我一直在努力理解已部署容器的关闭行为。
当我的容器收到 SIGTERM 或 SIGINT 信号时,它们会执行一些清理行为并将一些文件写入已安装的卷中。我已经用docker stop 和docker kill -s SIGINT 对此进行了广泛的测试。但是,当我在 GCP 中停止主机时,似乎不会发生这种行为。
我不完全确定如何调试此过程。我尝试连接到 VM 的串行控制台,但它似乎没有任何与容器关闭逻辑有关的信息。
任何指导将不胜感激!作为参考,this 是我正在部署的镜像。
完整的复制步骤:
使用“将容器映像部署到此虚拟机”创建一个新的“计算引擎”虚拟机。我一直在使用带有 20GB 启动盘的 e2 介质。
使用“lloesche/valheim-server”图片。
设置以下环境变量:
SERVER_NAME: Test
WORLD_NAME: Test
SERVER_PASS: Password # must be at least 5 characters
添加类型为“Directory”的目录挂载,其中“/config”作为挂载路径,“/home/YOUR_GCP_USERNAME/valheim-server-config”作为“读/写”模式下的主机路径。
容器启动后,您应该在主机 (lloesche/valheim-server) 上运行映像。您还应该在~/valheim-server-config/worlds/ 创建一个名为Test.fw1 的文件。
现在,停止此容器 (docker stop) 应该会导致对该文件的写入。您可以通过停止容器然后观察该文件的修改日期来验证这一点。
但是,当 host 实例停止时,此过程似乎并未发生。如果您重新启动主机以使容器再次运行,然后向主机发出“停止”,则在容器被杀死之前不会保存该文件。
【问题讨论】:
-
您能否提供有关您如何测试关机行为或您拥有的任何日志的更多详细信息?您是如何尝试测试的 - 让我们称之为“GCP 关闭”?你能提供复制的步骤吗?你在这里的目标是什么?
-
@Wojtek_B - 我的部分问题是在关机期间我没有看到与主机上的 docker 相关的任何日志。我提供了完整的复制步骤。
-
我认为问题在于“INFO”中关闭的日志级别。容器操作系统日志级别设置得较低。我从来没有想出如何更改“持久”的意思,即更改重启实例后保持不变的级别。我对这个问题的 cmets 展示了如何更改日志记录级别(最后的第二条评论):stackoverflow.com/q/65721133/8016720
-
来自引用问题的详细信息:编辑文件 /etc/stackdriver/logging.config.d/fluentd-lakitu.conf 查找“收集所有具有优先级 >= 警告的日志日志”部分。优先级为 0 -> 4。如果将“5”和“6”添加到列表中,则启动脚本会记录在操作日志中。但是,此更改不会在重新启动后持续存在。现在的问题是如何使这种变化持久化。
-
@JohnHanley - 我的 docker 服务的日志通常写得很好(我在 gce 日志资源管理器中看到它们)。但是,我在关闭实例后看到的第一个日志是容器收到“停止”命令大约一秒钟后的“守护进程关闭完成”日志。
标签: docker google-cloud-platform google-compute-engine google-container-os