Docker 學習筆記(四):問題日誌

1、Docker-Compose 容器組開機重啓失敗

Docker-Compose 的 depends_on 參數在 docker 中沒有對應。docker

重啓電腦後,容器的重啓過程只由 docker 控制,而 docker 不會依據 depends_on 的順序啓動容器,這致使容器組可能重啓失敗。json

目前的解決辦法是使用 systemd 或者 supervisor,在開機時運行 docker-compose up 命令。網絡

2、Docker 空間清理

在使用固定的構建節點構建 Docker 鏡像時,正常狀況下會在構建完成後自動清理掉生成的鏡像,可是若是構建流程出現問題,就有可能致使鏡像沒有被清理。elasticsearch

最方便的方法是在構建完成後,使用命令 docker system prune --all --force 清理掉全部沒有被使用的鏡像、容器、網絡、數據卷,不能在構建完成後直接使用前面的命令清理徹底清理,由於這可能會清理掉別的構建任務的中間鏡像!!!致使 push 的時候找不到包,或者構建下一步時,發現中間容器被刪除了。。日誌

更好的方法是使用定時任務(crontab 或者 jenkins triggler)在天天晚上沒有 docker 構建任務運行時,再跑 docker system prune --all --forcecode

Docker 容器日誌佔滿存儲空間

部署了 ELK 系統抓 MySQL 數據,結果過了一天,50G 空間就滿了,而 ES 自己的數據才 200M 不到。crontab

使用 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> 日誌一大堆。jenkins

解決方法

首先 echo "" > xxx-json.log 臨時清理掉這些日誌。永久解決辦法以下:io

方法一:使用 docker-compose.yml(只針對特定 service)

version: '2'

services:

  elasticsearch:
    ...
    logging:  # 限制容器服務的日誌大小,不然 docker logs 會佔滿磁盤空間
      options:
        max-size: "10m"
        max-file: "1"
    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":"10m", "max-file":"3"}
}
相關文章
相關標籤/搜索