docker - 在 kubernetes 中获取已杀死的 docker 容器的日志

标签 docker kubernetes

代码的简化版本

trap 'rm /tmp/not_done; echo "trap command got executed"; sleep 10' SIGTERM

wait_sigterm() {

  touch /tmp/not_done
  while [ -f /tmp/not_done ]
  do
      sleep 60 &
      wait $!  
  done
}

wait_sigterm

如何确保 trap 命令已执行?

一种方法是我可以访问被杀死的容器的日志并检查我的回显消息。

我尝试在 while 循环中获取日志(kubectl -n 命名空间名称日志 pod-name 容器名称),以便我能够选择最后写入的日志,直到容器处于事件状态。

但是回显消息不存在。 我的猜测是,一旦我们杀死容器或其他东西,日志就不会被写入。 有什么方法可以获取已杀死容器的日志或测试上述场景吗?

最佳答案

方法 1

如果您想从 pod POD_NAME 查看之前终止的容器的日志。 您可以使用以下带 -p 标志的命令

kubectl logs POD_NAME -c CONTAINER_NAME -p

您可以使用以下命令获取更多信息,例如选项和标志

kubectl logs --help

方法 2

确定终止消息的另一种方法是在 Pod 对象的 Status 字段中。

kubectl get pod $POD_NAME -o yaml

检查containerStatuses的字段lastState:

status:
  conditions:

  containerStatuses:
  - containerID: 
    image: registry.access.redhat.com/rhel7:latest
    imageID:
    lastState: {}

    state:
      running:

这里有更多详细信息reading-a-termination-message

关于docker - 在 kubernetes 中获取已杀死的 docker 容器的日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54808573/

相关文章:

api - Docker:Docker运行后无法在浏览器上启动.Net Core 3.1 Web Api

kubernetes - 如何水平自动缩放 Kubernetes 部署

deployment - 在自动缩放条件下重新部署时,Kubernetes滚动更新不遵循 'maxUnavailable'副本

azure - 使用 Kubeadm 创建高可用性 Kubernetes 集群时出错

docker - 基本 Dockerfile 不运行 CMD 命令

java - 从在 docker 容器内运行的应用程序连接到在本地运行的数据库

json - kubectl 应用错误 : error converting YAML to JSON

kubernetes - 如何创建匹配 Kubernetes API 的网络策略

reactjs - 未找到 npm 包 - SyntaxError : Unexpected token '<'

amazon-web-services - 在Docker容器中设置AWS RDS持久层