<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      自定義制作docker容器自動自愈容器鏡像

      包括:

      • 完整的 autoheal.sh(支持每分鐘檢查一次、連續 5 次 unhealthy 才重啟
      • Dockerfile
      • docker-compose.yml
      • 詳細文檔,包含參數說明用法

      1?? autoheal.sh

      #!/usr/bin/env sh
      set -e
      set -o pipefail
      
      DOCKER_SOCK=${DOCKER_SOCK:-/var/run/docker.sock}
      CURL_TIMEOUT=${CURL_TIMEOUT:-30}
      WEBHOOK_URL=${WEBHOOK_URL:-""}
      
      HTTP_ENDPOINT="http://localhost"
      UNIX_SOCK="--unix-socket ${DOCKER_SOCK}"
      
      AUTOHEAL_CONTAINER_LABEL=${AUTOHEAL_CONTAINER_LABEL:-autoheal}
      AUTOHEAL_START_PERIOD=${AUTOHEAL_START_PERIOD:-0}
      AUTOHEAL_INTERVAL=${AUTOHEAL_INTERVAL:-60}     # 默認每分鐘檢查一次
      AUTOHEAL_DEFAULT_STOP_TIMEOUT=${AUTOHEAL_DEFAULT_STOP_TIMEOUT:-10}
      AUTOHEAL_MAX_FAILS=${AUTOHEAL_MAX_FAILS:-5}    # 連續5次才重啟
      
      STATE_FILE="/tmp/autoheal_counts"
      touch "$STATE_FILE"
      
      docker_curl() {
        curl --max-time "${CURL_TIMEOUT}" --no-buffer -s \
        ${UNIX_SOCK} \
        "$@"
      }
      
      get_container_info() {
        local label_filter
        if [ "$AUTOHEAL_CONTAINER_LABEL" = "all" ]; then
          label_filter=""
        else
          label_filter=",\"label\":\[\"${AUTOHEAL_CONTAINER_LABEL}=true\"\]"
        fi
        url="${HTTP_ENDPOINT}/containers/json?filters=\{\"health\":\[\"unhealthy\"\]${label_filter}\}"
        docker_curl "$url"
      }
      
      restart_container() {
        local container_id="$1"
        local timeout="$2"
        docker_curl -f -X POST "${HTTP_ENDPOINT}/containers/${container_id}/restart?t=${timeout}"
      }
      
      get_count() {
        grep "^$1 " "$STATE_FILE" | awk '{print $2}'
      }
      
      set_count() {
        grep -v "^$1 " "$STATE_FILE" > "${STATE_FILE}.tmp" 2>/dev/null || true
        echo "$1 $2" >> "${STATE_FILE}.tmp"
        mv "${STATE_FILE}.tmp" "$STATE_FILE"
      }
      
      trap 'kill $$; exit 143' SIGTERM
      
      if [ "$1" = "autoheal" ] && [ -e "$DOCKER_SOCK" ]; then
        [ "$AUTOHEAL_START_PERIOD" -gt 0 ] && sleep "$AUTOHEAL_START_PERIOD"
      
        while true; do
          STOP_TIMEOUT=".Labels[\"autoheal.stop.timeout\"] // $AUTOHEAL_DEFAULT_STOP_TIMEOUT"
          get_container_info | \
            jq -r "foreach .[] as \$C([];[];\$C | .Id, .Names[0], .State, ${STOP_TIMEOUT})" | \
            while read -r CONTAINER_ID && read -r CONTAINER_NAME && read -r CONTAINER_STATE && read -r TIMEOUT; do
              CONTAINER_SHORT_ID=${CONTAINER_ID:0:12}
              DATE=$(date +%F" "%T)
              COUNT=$(get_count "$CONTAINER_ID")
              COUNT=${COUNT:-0}
      
              if [ "$CONTAINER_NAME" = "null" ]; then
                echo "$DATE Container ${CONTAINER_SHORT_ID} name null, skip"
              elif [ "$CONTAINER_STATE" = "restarting" ]; then
                echo "$DATE Container $CONTAINER_NAME ($CONTAINER_SHORT_ID) restarting, skip"
              else
                COUNT=$((COUNT + 1))
                echo "$DATE Container $CONTAINER_NAME ($CONTAINER_SHORT_ID) unhealthy count=$COUNT"
                if [ $COUNT -ge $AUTOHEAL_MAX_FAILS ]; then
                  echo "$DATE Container $CONTAINER_NAME ($CONTAINER_SHORT_ID) reached $AUTOHEAL_MAX_FAILS, restarting"
                  if restart_container "$CONTAINER_ID" "$TIMEOUT"; then
                    echo "$DATE Restarted container $CONTAINER_SHORT_ID ok"
                  else
                    echo "$DATE Restarted container $CONTAINER_SHORT_ID failed" >&2
                  fi
                  COUNT=0
                fi
                set_count "$CONTAINER_ID" "$COUNT"
              fi
            done
          sleep "$AUTOHEAL_INTERVAL"
        done
      else
        exec "$@"
      fi
      

      2?? Dockerfile

      FROM alpine:3.19
      RUN apk add --no-cache bash curl jq
      
      COPY autoheal.sh /usr/local/bin/autoheal.sh
      RUN chmod +x /usr/local/bin/autoheal.sh
      
      # 自身容器健康檢查
      HEALTHCHECK --interval=5s --timeout=3s --retries=3 CMD pgrep -f autoheal || exit 1
      
      ENTRYPOINT ["/usr/local/bin/autoheal.sh"]
      CMD ["autoheal"]
      

      構建:

      docker build -t my-autoheal .
      

      3?? docker-compose.yml

      version: "3.8"
      services:
        autoheal:
          image: my-autoheal:latest
          container_name: autoheal
          restart: unless-stopped
          volumes:
            - /var/run/docker.sock:/var/run/docker.sock
          environment:
            # === 參數示例 ===
            - DOCKER_SOCK=/var/run/docker.sock
            - AUTOHEAL_CONTAINER_LABEL=all
            - AUTOHEAL_START_PERIOD=0
            - AUTOHEAL_INTERVAL=60
            - AUTOHEAL_MAX_FAILS=5
            - AUTOHEAL_DEFAULT_STOP_TIMEOUT=10
            # - WEBHOOK_URL=https://your-webhook
      

      啟動:

      docker-compose up -d
      

      4?? 參數說明

      環境變量 說明 默認值
      DOCKER_SOCK Docker Daemon 的 socket 或 TCP 地址 /var/run/docker.sock
      AUTOHEAL_CONTAINER_LABEL 要監控的容器標簽:autoheal(只監控打了 autoheal=true 標簽的容器),all(所有容器) autoheal
      AUTOHEAL_START_PERIOD 容器啟動后延遲多少秒再開始監控 0
      AUTOHEAL_INTERVAL 檢查間隔秒數 60
      AUTOHEAL_MAX_FAILS 連續多少次 unhealthy 才重啟 5
      AUTOHEAL_DEFAULT_STOP_TIMEOUT 停止容器的超時時間(秒) 10
      WEBHOOK_URL 重啟成功/失敗時發送通知的 Webhook URL(可選)

      如果用 TCP 遠程 Docker API,還可以設置證書路徑(自己擴展 CA_CERT、CLIENT_CERT、CLIENT_KEY 等)。


      5?? 使用示例

      你的業務容器:

      services:
        myapp:
          image: myapp:latest
          labels:
            - autoheal=true  # 如果 AUTOHEAL_CONTAINER_LABEL=autoheal 時
      

      再用上面的 autoheal 服務即可實現:

      • 每分鐘檢查一次容器健康
      • 連續 5 次 unhealthy 才重啟
      • 重啟成功/失敗可通過 Webhook 通知
      posted @ 2025-09-25 16:30  蒲公英PGY  閱讀(22)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 激情的视频一区二区三区| 国产男女黄视频在线观看| 精品无码久久久久久尤物| 成人无码h真人在线网站| 亚洲精品毛片一区二区| 亚洲岛国av一区二区| 不卡国产一区二区三区| 日产精品一区二区三区免费| 亚洲情A成黄在线观看动漫尤物| 狠狠色噜噜狠狠狠狠av不卡| 亚洲人成影院在线观看| 鄂伦春自治旗| 亚洲暴爽av人人爽日日碰| 亚洲日韩性欧美中文字幕| 得荣县| 四虎永久在线精品8848a| 亚洲夂夂婷婷色拍ww47| 亚洲色成人网站www永久男男| 亚洲欧美成人综合久久久| 亚洲日韩性欧美中文字幕| 双柏县| 精品国产乱码久久久久久影片| 东方四虎在线观看av| 亚洲av永久无码精品网站| 人成午夜免费大片| 99RE6在线观看国产精品| 亚洲一二区制服无码中字| 国产视频 视频一区二区| 9191国语精品高清在线| 中文国产人精品久久蜜桃| 色婷婷狠狠久久综合五月| 色综合久久综合香蕉色老大| 国产永久免费高清在线| 国产成人a在线观看视频免费 | 元码人妻精品一区二区三区9| 欧美大胆老熟妇乱子伦视频| 国产福利酱国产一区二区| 国产精品一二三区久久狼| 免费无码又爽又刺激网站| 少妇无套内谢免费视频| 亚洲国产欧美一区二区好看电影|