process running لزوماً سرویس سالم نیست و log نامحدود می‌تواند دیسک را پر کند. امشب تنظیم daemon را اعتبارسنجی و سلامت HTTP را جدا از وضعیت process بررسی می‌کنیم.

این جلسه بخشی از دورهٔ لینوکس ۳۰۵ در ۶۰ شب است.

جایگاه در دوره: هدف‌های 352.3 آزمون 305-300.

محیط: docker-a بدون workload مهم؛ قبل restart کنسول و backup config داشته باش. نمونهٔ JSON فقط برای daemon.json تازه است؛ فایل موجود را کورکورانه جایگزین نکن.

{
  "log-driver": "local",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}

مقادیر log-opts رشته هستند. آن را در /etc/docker/daemon.json با مالک root و مجوز مناسب نگه دار؛ propertyهای قبلی را حفظ و کل JSON را قبل اعمال بررسی کن.

sudo dockerd --validate --config-file=/etc/docker/daemon.json
sudo systemctl restart docker
sudo journalctl -u docker --since '-5 minutes'
sudo docker info --format '{{.LoggingDriver}}'

restart می‌تواند سرویس‌ها را قطع کند؛ live-restore نیز HA کامل نمی‌سازد. پیش‌فرض جدید logging معمولاً فقط containerهای تازه را پوشش می‌دهد؛ نمونهٔ قبلی را inspect کن.

sudo docker run --name web305 -d -p 127.0.0.1:18050:8080 \
  --health-cmd='python -c "import urllib.request; urllib.request.urlopen(\"http://127.0.0.1:8080/\", timeout=2)"' \
  --health-interval=10s --health-timeout=3s --health-retries=3 \
  lab305-web:v1
sudo docker inspect web305 --format '{{json .State.Health}}'
sudo docker logs --since 2m web305
sudo docker events --since 2m --until 0s --filter container=web305

پس از فرصت کافی، health باید healthy و آخرین probe موفق باشد؛ حالت starting طبیعی است. HEALTHCHECK به‌تنهایی container standalone را restart نمی‌کند. restart policy به exit process مربوط است؛ monitor/orchestrator باید واکنش به unhealthy را طراحی کند.

بازگشت: container آزمایشی را حذف کن؛ اگر daemon بالا نیامد، JSON ذخیره‌شده را برگردان، validate و restart کن. پاک کردن logهای داخلی با truncation روی فایل‌های مدیریت‌شده روش معمول rotation نیست.

منبع: daemon configuration ، logging local ، HEALTHCHECK .