Docker Compose添加日志配置项后重建容器卡住无法正常运行
问题描述
我们发现部分容器产生的日志量过大,若不限制日志大小,后续将会引发存储问题,相关技术方案给出了适配的解决思路。
使用的初始docker-compose配置如下:
version: "3.7" services: rabbit: image: rabbitmq:1.0.4 container_name: rabbitmq volumes: - mysql-designer-rabbitmq:/var/lib/rabbitmq/mnesia environment: - "RABBITMQ_DEFAULT_USER=user" - "RABBITMQ_DEFAULT_PASS=pw" ports: - "15674:15674" - "15672:15672" - "5672:5672" - "1883:1883" restart: unless-stopped mysql: image: mysql:1.0.5 container_name: mysql volumes: - mysql-designer-db:/var/lib/mysql environment: - "MYSQL_ALLOW_EMPTY_PASSWORD=true" - "MYSQL_DATABASE=db" - "MYSQL_USER=user" - "MYSQL_PASSWORD=pw" - "MYSQL_ROOT_PASSWORD=" depends_on: - rabbit restart: unless-stopped ports: - "3306:3306" sitestructure: image: sitestructure:319 container_name: sitestructure volumes: - ./.docker/sitestructure/appsettings.json:/app/appsettings.json depends_on: - mysql - rabbit links: - mysql - rabbit ports: - "5000:5000" restart: unless-stopped deploy: restart_policy: condition: on-failure max_attempts: 10
后续给sitestructure服务新增了如下日志轮转配置:
logging: driver: "json-file" options: max-file: 5 max-size: 10m
更新容器时命令行仅输出Recreating sitestructure ...,进程长时间无响应,只有移除新增的日志配置后Docker Compose才能正常运行。
解决方案
问题原因
该问题通常是旧sitestructure容器已经生成了超大体积的历史日志文件,Docker在重建容器时需要处理这些大体积日志,导致进程阻塞。
修复步骤
- 先手动清理旧容器资源
执行以下命令停止并删除旧的sitestructure容器,跳过重建流程直接创建新容器:
docker stop sitestructure && docker rm sitestructure docker-compose up -d
- 清理历史大日志文件
如果删除旧容器后依然卡顿,可以先清理旧的超大日志:
# 查找sitestructure容器的日志存储路径 docker inspect --format='{{.LogPath}}' sitestructure # 删除对应路径下的大日志文件 rm -f [上一步输出的日志路径]
- 全局配置日志规则(可选)
如果需要所有容器都默认启用日志轮转,可以直接修改Docker daemon配置,无需每个服务单独配置:
编辑/etc/docker/daemon.json文件,添加如下配置:
{ "log-driver": "json-file", "log-opts": { "max-size": "10m", "max-file": "5" } }
配置完成后重启Docker服务生效:
systemctl daemon-reload && systemctl restart docker
内容的提问来源于stack exchange,提问作者Daniel Adam
相关产品推荐
相关产品推荐

