一、Docker-Compose 容器组开机重启失败
Docker-Compose 的 depends_on
参数在 docker 中没有对应。
重启电脑后,容器的重启过程只由 docker 控制,而 docker 不会依据 depends_on
的顺序启动容器,这导致容器组可能重启失败。
目前的解决办法是使用 systemd 或者 supervisor,在开机时运行 docker-compose -up
命令。
二、Docker 空间清理
在使用固定的构建节点构建 Docker 镜像时,正常情况下会在构建完成后自动清理掉生成的镜像,但是如果构建流程出现问题,就有可能导致镜像没有被清理。
最方便的方法是在构建完成后,使用下面的命令清理掉所有没有被使用的镜像、容器、网络、数据卷:
docker system prune -a
Docker 容器日志占满存储空间
部署了 ELK 系统抓 MySQL 数据,结果过了一天,50G 空间就满了,而 ES 本身的数据才 200M 不到。
使用 du -h <目录> --max_depth 1
逐级排查,发现罪魁祸首是 /var/lib/docker/containers
文件夹。这里面的 <container-id>/<container-id>-json.log
(container id 是对应的容器 id)把磁盘用光了。
Google /var/lib/docker/containers 占用空间
了解到,这些 log 文件就是对应容器的日志,docker logs <container_id>
日志一大堆。
解决方法
首先 echo "" > xxx-json.log
临时清理掉抓日志。
方法一:使用 docker-compose.yml(只针对特定 service)
version: '2'
services:
elasticsearch:
...
logging: # 限制容器服务的日志大小,否则 docker logs 会占满磁盘空间
options:
max-size: "80m"
max-file: "3"
volumes:
- ./elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro
ports:
- "9200:9200"
- "9300:9300"
方法二:全局修改
修改 /etc/docker/daemon.json
,添加如下内容:
{
...... // 省略若干配置
"log-driver":"json-file",
"log-opts": {"max-size":"500m", "max-file":"3"}
}