docker daemon调试

看到这篇关于docker daemon调试的官方文档,觉得对从事docker的同学很有帮助。于是捡起丢了好几年的大学英语翻译,以便中文的同学方便。如有不准确的地方请不吝指出。

原版英文地址:https://docs.docker.com/engine/admin/#force-a-stack-trace-to-be-logged

摘要:

    通常我们可以打开docker daemon的debug选项来获docker的运行动态,以对可能出现的问题进行调试。如果daemon已经没有了反应,可以给docker daemon发送 SIGUSR 信号来“force a full stack trace ” docker daemom的堆栈。

一、Out Of memroy Exceptions (OOME)

    如果容器申请使用超过自己可用内存的大小,那么就可能引发OOME。这会导致内核杀掉一个容器或者docker daemon。因此我们需要为容器分配适量的内存,以防止这种情况发生,想要了解OOME的厉害,请看:https://docs.docker.com/engine/admin/resource_constraints/#memory  

二、日志

    Docker daemom的日志可以帮助我们诊断问题。不同的系统docker daemom的日志也存放在不同的地方,通常日志存放位置为:

Operating systemLocation
RHEL, Oracle Linux/var/log/messages
Debian/var/log/daemon.log
Ubuntu 16.04+, CentOSUse the command journalctl -u docker.service
Ubuntu 14.10-/var/log/upstart/docker.log
macOS~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/console-ring
WindowsAppData\Local

三、Debug

    有两种方式来使能debugging。

3.1 在daemon.json文件中设置debug=true

    这种方法适用于各种平台系统,同时也是推荐的方法。
  1.编辑daemon.json文件。通常情况下daemon.json放在/etc/docker目录下,如果没有这个文件,可以手动创建一个。
  2.如果daemon文件没有内容,则在文件中添加如下内容:
{
  "debug": true
}
    如果文件中已经包含JSON格式的“key/value”内容,则在里面添加一项"debug":true。添加时需要注意,如果添加的这行不是最后一行,需要在添加的这行行末加一个逗号","。
    同时,如果有“log-level”这个key存在则检查它的value是否是"info"或者"debug"。其中“info"是默认的调试级别,其他可选的级别有debug, info, warn, error, fatal。
  3.给daemon发送HUP信号以重新加载配置。linux下的操作如下:
$ sudo kill -SIGHUP $(pidof dockerd)
    如果是Windows系统,则重启docker。

3.2 使用“-D”选项

    除了上面的方法打开daemon的调试选项,还可以stop docker daemon,然后使用 -D选项重启。linux中如下:
$ sudo dockerd -D
    然而,停掉daemon再重启很可能会造成前后两次的运行环境发生改变,这就会增加调试的准备性和难度。

四、Force a stack trace to be logged

    如果daemo没有了响应,可以发送 SIGUSR1信号来获取daemon的堆栈回溯信息。
     Linux系统:
$ sudo kill -SIGUSR1 $(pidof dockerd)
    Windows Server:
    下载 docker-signal(https://github.com/jhowardmsft/docker-signal).
    使用--pid=<PID of daemon>标志运行下载的程序。
    这种方法可以在不停止daemon的情况下获取到堆栈回溯信息,它在接收SIGUSR1信号并打印出堆栈回溯日志后继续处理它的事情。
    堆栈回溯信息可以方便我们观察函数调用流程和线程信息。

五、Check whether Docker is running

    有多种检查docker运行状态的方法:
1.与系统无关的检查方式是使用命令"docker info";
2.使用系统相关的接口来查看,如:

$ sudo systemctl is-active docker 
  or 
$ sudo status docker 
  or 
$ sudo service docker status
  or 
使用Windows 提供的接口来检查服务状态。
3.直接查看daemon相关的进程情况
使用ps或者top命令查看docker daemon进程是否存在。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值