Skip to content

Nuface Blog

隨意隨手記 Casual Notes

Menu
  • Home
  • About
  • Services
  • Blog
  • Contact
  • Privacy Policy
  • Login
Menu

在 Docker Dovecot 中啟用 Logrotate:避免 log 爆量、磁碟被塞滿的最佳做法

Posted on 2025-11-152025-11-15 by Rico

在自建郵件系統的環境中,Dovecot 通常會產生大量的 IMAP、POP3 與授權相關 Log。
若 Log 直接寫入檔案,沒有任何輪替機制(log rotation),磁碟空間會在短時間內被迅速吃光。

本文將示範如何在 Docker 版本的 Dovecot 中,正確設定 logrotate,讓 Log 能夠自動每日或超量輪替、壓縮、保留,並在輪替後讓 Dovecot 重新開啟 Log 檔案。


🔧 1. Dovecot 容器啟動方式(範例)

以下為實際使用的 Dovecot Docker run 指令:

docker run -dit --name maildovecot \
    --restart=always \
    --network mail-network \
    --publish 110:110/tcp \
    --publish 995:995/tcp \
    --publish 143:143/tcp \
    --publish 993:993/tcp \
    --publish 24:24/tcp \
    --publish 4190:4190/tcp \
    -v /etc/localtime:/etc/localtime:ro \
    -v /etc/timezone:/etc/timezone:ro \
    -v $PWD/config:/etc/dovecot \
    -v $PWD/log:/var/log \
    -v /opt/docker/mailsys/dovecot/alpine-3.22.1/usermail:/var/vmail \
    -v /opt/docker/wwwapp/data/etc-letsencrypt:/etc/letsencrypt \
    dovecot-alpine:4.0

重點是:

-v $PWD/log:/var/log

Dovecot 的 log 實際被寫到 主機(host)上的目錄,因此 logrotate 應該設定在主機端。


🔧 2. 建立 logrotate 設定檔

在主機上建立:

/etc/logrotate.d/dovecot

內容如下(已修正中文註解造成的解析錯誤):

/opt/docker/mailsys/dovecot/alpine-3.22.1/ver-4.0/log/dovecot/dovecot-info.log \
/opt/docker/mailsys/dovecot/alpine-3.22.1/ver-4.0/log/dovecot/dovecot.log \
/opt/docker/mailsys/dovecot/alpine-3.22.1/ver-4.0/log/dovecot/sa-learn.log {
    # 每天檢查一次
    daily

    # 超過 50MB 強制輪替
    size 50M

    # 保留 14 份舊檔
    rotate 14

    # 壓縮輪替檔案
    compress

    # 延後壓縮上一輪
    delaycompress

    # 若檔案不存在則略過
    missingok

    # 若檔案為空則不輪替
    notifempty

    # 複製+truncate(不需要重啟服務)
    copytruncate

    sharedscripts
    postrotate
        # 請 Dovecot 重新開啟 log(在容器內執行)
        docker exec maildovecot doveadm log reopen 2>/dev/null || true
    endscript
}

若你在檢查 logrotate 時看到 “unknown unit” 表示「指令與中文註解不能放在同一行」,修正後即可正常運作。


🔧 3. 測試 logrotate

logrotate -d /etc/logrotate.conf   # Dry-run 測試
logrotate /etc/logrotate.conf      # 真正執行一次

成功後,你會看到:

dovecot.log
dovecot.log.1.gz
dovecot-info.log
dovecot-info.log.1.gz
sa-learn.log.1.gz
...

表示 logrotate 已經成功接管 Dovecot 的 log。


✔ 建議:不要長期開啟 mail_debug

Dovecot 若開啟:

mail_debug = yes

log 量會爆炸性增加,建議:

  • 正常運作時 關閉
  • 排錯時再暫時開啟

🎉 結論

透過上述方法,你可以讓 Docker 中的 Dovecot:

  • 日誌每日輪替
  • 超過 50MB 即輪替
  • 自動壓縮舊檔
  • 保留 14 份歷史記錄
  • 不必重啟容器
  • 安全且不會爆磁碟

這是在自架 mail server 中最重要但最容易忽略的一環。

Recent Posts

  • Postfix + Let’s Encrypt + BIND9 + DANE Fully Automated TLSA Update Guide
  • Postfix + Let’s Encrypt + BIND9 + DANE TLSA 指紋自動更新完整教學
  • Deploying DANE in Postfix
  • 如何在 Postfix 中部署 DANE
  • DANE: DNSSEC-Based TLS Protection

Recent Comments

  1. Building a Complete Enterprise-Grade Mail System (Overview) - Nuface Blog on High Availability Architecture, Failover, GeoDNS, Monitoring, and Email Abuse Automation (SOAR)
  2. Building a Complete Enterprise-Grade Mail System (Overview) - Nuface Blog on MariaDB + PostfixAdmin: The Core of Virtual Domain & Mailbox Management
  3. Building a Complete Enterprise-Grade Mail System (Overview) - Nuface Blog on Daily Operations, Monitoring, and Performance Tuning for an Enterprise Mail System
  4. Building a Complete Enterprise-Grade Mail System (Overview) - Nuface Blog on Final Chapter: Complete Troubleshooting Guide & Frequently Asked Questions (FAQ)
  5. Building a Complete Enterprise-Grade Mail System (Overview) - Nuface Blog on Network Architecture, DNS Configuration, TLS Design, and Postfix/Dovecot SNI Explained

Archives

  • December 2025
  • November 2025
  • October 2025

Categories

  • AI
  • Apache
  • Cybersecurity
  • Database
  • DNS
  • Docker
  • Fail2Ban
  • FileSystem
  • Firewall
  • Linux
  • LLM
  • Mail
  • N8N
  • OpenLdap
  • OPNsense
  • PHP
  • QoS
  • Samba
  • Switch
  • Virtualization
  • VPN
  • WordPress
© 2025 Nuface Blog | Powered by Superbs Personal Blog theme