作为IT工程师,处理Docker容器错误日志是日常工作中的重要部分。以下是关于Docker容器日志的全面分析和解决方案。
查看实时日志
docker logs -f <container_name_or_id>
查看最后N行日志
docker logs --tail=100 <container_name_or_id>
带时间戳查看日志
docker logs -t <container_name_or_id>
查看特定时间段的日志
docker logs --since="2023-01-01" --until="2023-01-02" <container_name_or_id>
典型日志:
Error response from daemon: Cannot start container [container_id]: [error_message]
解决方案:
- 检查端口冲突:netstat -tulnp | grep <port>
- 检查资源限制:docker inspect <container_id> | grep -i memory
- 检查挂载点是否存在
典型日志:
Error response from daemon: pull access denied for [image_name], repository does not exist or may require 'docker login'
解决方案:
docker login
docker pull <image_name>
典型日志:
standard_init_linux.go:228: exec user process caused: exec format error
解决方案:
- 检查镜像架构与主机是否匹配
- 使用正确架构的镜像:docker pull --platform linux/amd64 <image_name>
典型日志:
Error starting userland proxy: listen tcp4 0.0.0.0:8080: bind: address already in use
解决方案:
- 查找占用端口的进程:lsof -i :8080
- 停止冲突进程或更改容器端口映射
配置日志驱动
docker run --log-driver=json-file --log-opt max-size=10m --log-opt max-file=3 <image_name>
使用日志收集工具
多容器日志聚合
docker-compose logs -f
进入容器进行调试
docker exec -it <container_id> /bin/bash
检查容器元数据
docker inspect <container_id>
查看Docker守护进程日志
journalctl -u docker.service
设置日志轮转
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
保存为/etc/docker/daemon.json
后重启Docker
实现健康检查
HEALTHCHECK --interval=30s --timeout=3s \
CMD curl -f http://localhost/ || exit 1
使用监控工具
通过以上方法,您可以有效地分析、处理和预防Docker容器中的各种错误。如需针对特定错误进行更深入的分析,请提供具体的错误日志内容。