调试容器
不少刚接触Docker的同学,通常面对docker容器起不来,或者一直在重复启动中不知措施。
docker提供了一系列简单命令,很容易调试容器运行中的问题。
原理很简单,就是可以直接输出容器运行时(或过去式的)的日志。
通常有4种方式:
- docker run (控制台上启动容器)
- docker exec (附加进入后台容器)
- docker logs
- docker service logs
下面依次介绍之
控制台启动容器
打个比如调试启动redis容器
docker run -it -rm redis redis-server [redis 启动参数略...]
这样redis-server的日志输出直接打印到控制台上
缺点是,这种方式仅供启动容器调试时使用,无法操作后台运行中的容器,或已失效的容器。
docker exec 附加进入后台容器
有时候需要进入容器内,查看系统运行状况。这时候可以使用docker exec。
使用docker exec的前提是容器在运行中。因此当容器不能正常工作时,往往无法使用该命令
docker logs
实际上docker容器不管处于什么状态,都可以使用docker logs获取 容器的所有日志。
docker logs [容器名]
docker logs还有局限性,即无法获取docker swarm模式下,启动失败的容器日志
docker service logs
针对docker swarm模式,获取容器日志的命令。
一般,依次执行下列命令,得到某服务的容器名
docker service ls
docker service ps [服务名]
然后就可以通过容器名,获取其日志了
docker service logs [容器名]
docker service logs显示日志为空
要让 docker service logs 正常工作,需要设置docker一些配置
vi /etc/docker/daemon.json
给该文件添加:
{
"log-driver": "json-file",
"log-opts": {
"labels": "production_status,geo",
"env": "os,customer"
}
}
然后重启docker
service docker restart
关于docker service logs的详细介绍,可以参考官方文档:
https://docs.docker.com/engine/reference/commandline/service_logs/#extended-description