Если ты используешь докер и хочешь держать свои контейнеры в актуальном состоянии без ручного docker pull + restart - этот пост для тебя. С помощью bash можно отслеживать обновления образа и автоматически перезапускать контейнер, если он устарел.
🌟 Принцип:
📍 Проверяем хэш локального и удалённого образа
📍 Если разные — обновляем образ
📍 Перезапускаем контейнер с теми же параметрами
📍 Логируем событие
🛠 Пример скрипта:
#!/bin/bash
IMAGE="nginx:latest"
CONTAINER="my-nginx"
LOG="/var/log/docker_autoupdate.log"
echo "[$(date)] Проверка образа $IMAGE" >> "$LOG"
# Получаем текущий локальный digest
LOCAL_DIGEST=$(docker inspect --format='{{index .RepoDigests 0}}' "$IMAGE" 2>/dev/null || echo "none")
# Обновляем образ
docker pull "$IMAGE" > /dev/null 2>&1
# Получаем новый digest
NEW_DIGEST=$(docker inspect --format='{{index .RepoDigests 0}}' "$IMAGE" 2>/dev/null || echo "none")
# Сравниваем
if [[ "$LOCAL_DIGEST" != "$NEW_DIGEST" ]]; then
echo "[$(date)] Образ обновлён. Перезапуск контейнера $CONTAINER..." >> "$LOG"
docker stop "$CONTAINER"
docker rm "$CONTAINER"
# Запуск с нужными параметрами — укажи свои!
docker run -d --name "$CONTAINER" -p 80:80 "$IMAGE"
echo "[$(date)] Контейнер перезапущен с новым образом." >> "$LOG"
else
echo "[$(date)] Образ актуален. Перезапуск не требуется." >> "$LOG"
fi
▪️ Для автоматизации: Добавь скрипт в cron или systemd-timer, например, каждые 6 часов:
0 */6 * * * /usr/local/bin/docker-auto-update.sh
⭐️ Советы:
📍 Используй docker inspect для восстановления аргументов запуска, если параметры сложные.
📍Для нескольких контейнеров используй массивы и цикл.
BashTex 📱 #bash