# 查看容器最新日志
docker logs <container_id>
# 查看实时日志流
docker logs -f <container_id>
# 显示时间戳
docker logs -t <container_id>
# 查看最后N行日志
docker logs --tail=100 <container_id>
# 查看特定时间段的日志
docker logs --since="2023-01-01" --until="2023-01-02" <container_id>
Docker支持多种日志驱动,可以在运行容器时指定:
docker run --log-driver=json-file --log-opt max-size=10m --log-opt max-file=3 ...
常用驱动:
- json-file
(默认)
- syslog
- journald
- gelf
(Graylog Extended Log Format)
- fluentd
- awslogs
(AWS CloudWatch)
# 使用Docker Compose部署ELK
version: '3'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.14.0
environment:
- discovery.type=single-node
ports:
- "9200:9200"
logstash:
image: docker.elastic.co/logstash/logstash:7.14.0
volumes:
- ./logstash.conf:/usr/share/logstash/pipeline/logstash.conf
ports:
- "5000:5000"
depends_on:
- elasticsearch
kibana:
image: docker.elastic.co/kibana/kibana:7.14.0
ports:
- "5601:5601"
depends_on:
- elasticsearch
# docker-compose.yml 示例
version: "3"
services:
loki:
image: grafana/loki:latest
ports:
- "3100:3100"
promtail:
image: grafana/promtail:latest
volumes:
- /var/lib/docker/containers:/var/lib/docker/containers:ro
- /var/run/docker.sock:/var/run/docker.sock
command: -config.file=/etc/promtail/config.yml
grafana:
image: grafana/grafana:latest
ports:
- "3000:3000"
# 查看容器状态
docker ps -a
# 查看容器详细信息
docker inspect <container_id>
# 查看容器资源使用情况
docker stats <container_id>
# 查看容器进程
docker top <container_id>
# 进入运行中的容器
docker exec -it <container_id> /bin/bash
# 如果容器没有bash/sh,可以使用nsenter
docker inspect --format '{{.State.Pid}}' <container_id> | xargs -I {} nsenter -t {} -m -u -i -n -p
# 检查容器退出原因
docker inspect -f '{{.State.ExitCode}}' <container_id>
# 检查容器健康状态
docker inspect -f '{{.State.Health.Status}}' <container_id>
# 检查容器网络连接
docker exec <container_id> ping google.com
docker exec <container_id> netstat -tulnp
docker exec <container_id> curl -I http://localhost:8080
# 查找错误日志
docker logs <container_id> | grep -i error
# 查找特定时间段的错误
docker logs --since "2023-01-01T00:00:00" <container_id> | grep -i error
# 统计错误出现次数
docker logs <container_id> | grep -i error | wc -l
# 假设使用json-file日志驱动
docker logs <container_id> | jq '. | select(.level == "error")'
# 统计不同HTTP状态码出现次数
docker logs <container_id> | awk '/HTTP/{print $9}' | sort | uniq -c | sort -nr
# docker-compose.yml 示例
version: '3'
services:
prometheus:
image: prom/prometheus
ports:
- "9090:9090"
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
grafana:
image: grafana/grafana
ports:
- "3000:3000"
node-exporter:
image: prom/node-exporter
ports:
- "9100:9100"
docker run \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:ro \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--volume=/dev/disk/:/dev/disk:ro \
--publish=8080:8080 \
--detach=true \
--name=cadvisor \
google/cadvisor:latest
通过以上方法和工具,您可以有效地分析和排查Docker容器中的日志和异常情况。