docker daemon调试套路

容器突然退出?shim进程却还在?runc也在?daemon有句柄没释放?mount还在?这个该如何定位?
简单记录下常用方法

daemon的调用过程

1
docker daemon -> containerd -> shim -> runc

套路

看docker daemon log

  • centos系是systemd启动的,location is /var/log/message`
  • ubuntu是upstart, 在 /var/log/upstart/docker

如果需要更详细的log,在启动daemon的时候加上-D,即调试模式

containerd event

  • /var/run/docker/libcontainerd/containerd/event

看shim进程

  • ps,注意container ID

看句柄

  • 打开的句柄,lsof -p $(cat /var/run/docker.pid)
  • 泄漏, ls /proc//fd -l

看runc

  • docker-ruc list

看stack

cat /proc//stack

看容器的mount点

  • mount
  • /proc/pid/mount

pprof

  • daemon提供了pprof接口

实在不行,就只能fmt.print调试了

还可以strace


本博客欢迎转发,但请保留原作者信息
github:codejuan
博客地址:http://blog.decbug.com/