diff --git a/.github/workflows/manual-deep-sync.yml b/.github/workflows/manual-deep-sync.yml index f40cda5..74601cd 100644 --- a/.github/workflows/manual-deep-sync.yml +++ b/.github/workflows/manual-deep-sync.yml @@ -16,7 +16,7 @@ jobs: steps: - name: Set up crproxy run: | - wget https://github.com/DaoCloud/crproxy/releases/download/v0.13.0-alpha.43/crproxy_linux_amd64 -O /usr/local/bin/crproxy && chmod +x /usr/local/bin/crproxy + wget https://github.com/DaoCloud/crproxy/releases/download/v0.13.0-alpha.154/crproxy_linux_amd64 -O /usr/local/bin/crproxy && chmod +x /usr/local/bin/crproxy - name: Sync Images to OSS&OBS run: | diff --git a/.github/workflows/manual-sync.yml b/.github/workflows/manual-sync.yml index e287c28..3739715 100644 --- a/.github/workflows/manual-sync.yml +++ b/.github/workflows/manual-sync.yml @@ -16,7 +16,7 @@ jobs: steps: - name: Set up crproxy run: | - wget https://github.com/DaoCloud/crproxy/releases/download/v0.13.0-alpha.43/crproxy_linux_amd64 -O /usr/local/bin/crproxy && chmod +x /usr/local/bin/crproxy + wget https://github.com/DaoCloud/crproxy/releases/download/v0.13.0-alpha.154/crproxy_linux_amd64 -O /usr/local/bin/crproxy && chmod +x /usr/local/bin/crproxy - name: Sync Images to OSS&OBS run: | diff --git a/.github/workflows/sync-image.yml b/.github/workflows/sync-image.yml index 837010b..840b158 100644 --- a/.github/workflows/sync-image.yml +++ b/.github/workflows/sync-image.yml @@ -28,6 +28,7 @@ jobs: CORRECT_IMAGE="$(./hack/correct-image.sh "${ORIGIN_IMAGE}")" if [[ "${CORRECT_IMAGE}" == "" ]]; then gh issue comment ${{ github.event.issue.number }} -b "镜像 '${ORIGIN_IMAGE}' 不是一个镜像" + gh issue close ${{ github.event.issue.number }} --reason "not planned" exit 1 fi if [[ "${CORRECT_IMAGE}" != "${ORIGIN_IMAGE}" ]]; then @@ -36,39 +37,64 @@ jobs: else gh issue comment ${{ github.event.issue.number }} -b "镜像 '${ORIGIN_IMAGE}' 不存在呢, 也许应该是 '${CORRECT_IMAGE}'" fi + gh issue close ${{ github.event.issue.number }} --reason "not planned" exit 1 fi if ! ./hack/verify-allows.sh ./allows.txt "${ORIGIN_IMAGE}"; then gh issue comment ${{ github.event.issue.number }} -b "镜像 ${ORIGIN_IMAGE} 不在白名单列表里, 不支持同步和访问
可以将其添加到[白名单](https://github.com/${{ github.repository }}/issues/2328)" + gh issue close ${{ github.event.issue.number }} --reason "not planned" exit 1 fi echo "image=${ORIGIN_IMAGE}" >> $GITHUB_OUTPUT - - name: Check Image - run: | - ORIGIN_IMAGE="${{ steps.get-image.outputs.image }}" - gh issue comment ${{ github.event.issue.number }} -b "镜像 ${ORIGIN_IMAGE} 同步中...
[详情请查看](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }})" + SYNC_IMAGE="$(./hack/real-image.sh "${ORIGIN_IMAGE}")" + echo "sync_image=${SYNC_IMAGE}" >> $GITHUB_OUTPUT - name: Set up crproxy run: | - wget https://github.com/DaoCloud/crproxy/releases/download/v0.13.0-alpha.43/crproxy_linux_amd64 -O /usr/local/bin/crproxy && chmod +x /usr/local/bin/crproxy + wget https://github.com/DaoCloud/crproxy/releases/download/v0.13.0-alpha.154/crproxy_linux_amd64 -O /usr/local/bin/crproxy && chmod +x /usr/local/bin/crproxy - - name: Sync Images to OSS&OBS + - name: Create message to queue + id: get-message + run: | + MESSAGE_ID=$(curl -X 'PUT' \ + 'https://queue.m.daocloud.io/apis/v1/messages' \ + -H 'Authorization: Bearer ${{ secrets.QUEUE_TOKEN }}' \ + -H 'Content-Type: application/json' \ + -d '{ + "content": "${{ steps.get-image.outputs.sync_image }}", + "priority": 10 + }' | jq -r .id) + + echo "message_id=${MESSAGE_ID}" >> $GITHUB_OUTPUT + + - name: Sync Status run: | ORIGIN_IMAGE="${{ steps.get-image.outputs.image }}" - /usr/local/bin/crproxy sync --deep --max-warn 1 ${{ secrets.STORAGE_ARGS }} --user '${{ secrets.OCI_USER }}' --list ${ORIGIN_IMAGE} + gh issue comment ${{ github.event.issue.number }} -b "镜像 ${ORIGIN_IMAGE} 添加到同步队列...
[同步队列](https://queue.m.daocloud.io/status/)
[详细信息](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }})" - - name: Succeeded Sync + - name: Sync Runner run: | - ORIGIN_IMAGE="${{ steps.get-image.outputs.image }}" - gh issue comment ${{ github.event.issue.number }} -b "镜像 ${ORIGIN_IMAGE} 同步完成
请使用 m.daocloud.io/${ORIGIN_IMAGE} 替代源镜像" - gh issue edit ${{ github.event.issue.number }} --add-label "sync image succeeded" -b "IMAGE SYNC" - gh issue close ${{ github.event.issue.number }} --reason "completed" + ( + ORIGIN_IMAGE="${{ steps.get-image.outputs.image }}" + last_json="$(curl -X GET 'https://queue.m.daocloud.io/apis/v1/messages/${{ steps.get-message.outputs.message_id }}?watch=true' | jq -n 'reduce inputs as $item (null; $item)')" + status_code=$(echo "$last_json" | jq -r .status) + if [[ $status_code -eq 20 ]]; then + gh issue comment ${{ github.event.issue.number }} -b "镜像 ${ORIGIN_IMAGE} 同步完成
请使用 m.daocloud.io/${ORIGIN_IMAGE} 替代源镜像" + gh issue edit ${{ github.event.issue.number }} --add-label "sync image succeeded" -b "IMAGE SYNC" + gh issue close ${{ github.event.issue.number }} --reason "completed" + elif [[ $status_code -eq 30 ]]; then + error_message=$(echo "$last_json" | jq -r .data.error) + gh issue comment ${{ github.event.issue.number }} -b "镜像 ${ORIGIN_IMAGE} 同步失败
${error_message}" + gh issue edit ${{ github.event.issue.number }} --add-label "sync image failure" -b "IMAGE SYNC" + gh issue close ${{ github.event.issue.number }} --reason "not planned" + else + gh issue comment ${{ github.event.issue.number }} -b "镜像 ${ORIGIN_IMAGE} 同步异常
[详情请查看](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }})" + gh issue edit ${{ github.event.issue.number }} --add-label "sync image failure" -b "IMAGE SYNC" + gh issue close ${{ github.event.issue.number }} --reason "not planned" + fi + ) & + + /usr/local/bin/crproxy cluster runner ${{ secrets.STORAGE_ARGS }} --user '${{ secrets.OCI_USER }}' --queue-token '${{ secrets.QUEUE_TOKEN }}' --queue-url https://queue.m.daocloud.io/apis/v1 --duration 10s --retry=3 --retry-interval=2s & - - name: Fail Sync - if: failure() - run: | - ORIGIN_IMAGE="${{ steps.get-image.outputs.image }}" - gh issue comment ${{ github.event.issue.number }} -b "镜像 ${ORIGIN_IMAGE} 同步失败[详情请查看](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }})
如有疑问请回复 /auto-cc 召唤帮助, 或者查看[同步成功案例](https://github.com/${{ github.repository }}/issues?q=is%3Aissue+is%3Aclosed+label%3A%22sync+image+succeeded%22)或[白名单申请案例](https://github.com/${{ github.repository }}/issues?q=is%3Aissue+label%3A%22allows+image%22+is%3Aclosed+linked%3Apr)" - gh issue edit ${{ github.event.issue.number }} --add-label "sync image failure" -b "IMAGE SYNC" - gh issue close ${{ github.event.issue.number }} --reason "not planned" + wait diff --git a/.github/workflows/sync-runner.yml b/.github/workflows/sync-runner.yml new file mode 100644 index 0000000..5c6524d --- /dev/null +++ b/.github/workflows/sync-runner.yml @@ -0,0 +1,20 @@ +name: Sync Runner + +on: + schedule: + - cron: "*/10 * * * *" + + workflow_dispatch: + +jobs: + sync-images: + runs-on: ubuntu-latest + if: github.repository == 'DaoCloud/public-image-mirror' + steps: + - name: Set up crproxy + run: | + wget https://github.com/DaoCloud/crproxy/releases/download/v0.13.0-alpha.154/crproxy_linux_amd64 -O /usr/local/bin/crproxy && chmod +x /usr/local/bin/crproxy + + - name: Sync Runner + run: | + /usr/local/bin/crproxy cluster runner ${{ secrets.STORAGE_ARGS }} --user '${{ secrets.OCI_USER }}' --queue-token '${{ secrets.QUEUE_TOKEN }}' --queue-url https://queue.m.daocloud.io/apis/v1 --duration 1h --retry=3 --retry-interval=2s diff --git a/.github/workflows/sync.yml b/.github/workflows/sync.yml index 41e6174..cdd1c52 100644 --- a/.github/workflows/sync.yml +++ b/.github/workflows/sync.yml @@ -2,7 +2,7 @@ name: Sync on: schedule: - - cron: "1 16 * * *" + - cron: "1 * * * *" workflow_dispatch: @@ -16,9 +16,12 @@ jobs: - name: Set up crproxy run: | - wget https://github.com/DaoCloud/crproxy/releases/download/v0.13.0-alpha.43/crproxy_linux_amd64 -O /usr/local/bin/crproxy && chmod +x /usr/local/bin/crproxy + wget https://github.com/DaoCloud/crproxy/releases/download/v0.13.0-alpha.154/crproxy_linux_amd64 -O /usr/local/bin/crproxy && chmod +x /usr/local/bin/crproxy - name: Sync Images to OSS&OBS run: | - ORIGIN_IMAGE=$(echo "${MESSAGE}" | grep SYNC | awk '{print $2}' | head -n 1 | sed "s/\r//g") - /usr/local/bin/crproxy sync --max-warn 100 ${{ secrets.STORAGE_ARGS }} --list-from-file ./mirror.txt + /usr/local/bin/crproxy sync --max-warn 100 ${{ secrets.STORAGE_ARGS }} --user '${{ secrets.OCI_USER }}' --list-from-file ./mirror.txt + + - name: Quick Sync Images to OSS&OBS + run: | + /usr/local/bin/crproxy sync --max-warn 10 ${{ secrets.STORAGE_ARGS }} --user '${{ secrets.OCI_USER }}' --list-from-file ./mirror-quick.txt --quick diff --git a/.github/workflows/update-allows-list.yml b/.github/workflows/update-allows-list.yml index ab6ada6..f7c3121 100644 --- a/.github/workflows/update-allows-list.yml +++ b/.github/workflows/update-allows-list.yml @@ -18,7 +18,7 @@ jobs: - name: Update list run: | - LIST="$(cat ./allows.txt | jq -R -s -c '{"items": split("\n")[:-1], "block_message": "🚫 👀-> https://github.com/DaoCloud/public-image-mirror/issues/2328 🔗 这镜像不在白名单. this image is not in the allowlist."}')" + LIST="$(cat ./allows.txt | grep -v 'docker.io/\*' | sed 's/docker.io\/library\/\([^\/]*\)/&\ndocker.io\/\1/' | jq -R -s -c '{"items": split("\n")[:-1], "block_message": "🚫 👀-> https://github.com/DaoCloud/public-image-mirror/issues/2328 🔗 这镜像不在白名单. this image is not in the allowlist."}')" TOKEN="$(curl -X 'POST' \ 'https://auth.m.daocloud.io/apis/v1/users/login' \ -H 'Accept: application/json' \ diff --git a/allows.txt b/allows.txt index 1055999..42c56fc 100644 --- a/allows.txt +++ b/allows.txt @@ -54,7 +54,7 @@ docker.io/benzino77/clamav-rest-api docker.io/binhex/arch-jellyfin docker.io/binwiederhier/ntfy docker.io/bitnami/* -docker.io/bitnamicharts/kibana +docker.io/bitnamicharts/* docker.io/budibase/budibase docker.io/budtmo/docker-android docker.io/bvlc/caffe @@ -88,10 +88,13 @@ docker.io/coredns/* docker.io/cp2k/cp2k docker.io/csiplugin/* docker.io/curlimages/* +docker.io/cvat/server +docker.io/cvat/ui docker.io/dadoum/anisette-v3-server docker.io/danielqsj/kafka-exporter docker.io/daprio/* docker.io/darthsim/imgproxy +docker.io/datastax/* docker.io/debezium/* docker.io/deepflowce/* docker.io/deluan/navidrome @@ -117,11 +120,13 @@ docker.io/dragonflyoss/trainer docker.io/drakkan/sftpgo docker.io/dremio/dremio-oss docker.io/drone/drone +docker.io/drone/drone-runner-docker docker.io/drumsergio/genieacs docker.io/dustynv/* docker.io/dxflrs/* docker.io/e2bdev/code-interpreter docker.io/elastic/* +docker.io/electronuserland/builder docker.io/elsaworkflows/* docker.io/emby/* docker.io/emqx/* @@ -154,6 +159,7 @@ docker.io/frappe/* docker.io/frooodle/s-pdf docker.io/frrouting/* docker.io/funcman/115pc +docker.io/gaecfovdocker/pulsar-console docker.io/geoservercloud/* docker.io/gerritcodereview/gerrit docker.io/getmeili/* @@ -291,6 +297,7 @@ docker.io/library/chronograf docker.io/library/cirros docker.io/library/clearlinux docker.io/library/clefos +docker.io/library/clickhouse docker.io/library/clojure docker.io/library/composer docker.io/library/consul @@ -443,6 +450,8 @@ docker.io/metacontrollerio/metacontroller docker.io/milvusdb/* docker.io/mindsdb/mindsdb docker.io/minio/* +docker.io/mintplexlabs/anythingllm +docker.io/mirantis/* docker.io/mitmproxy/mitmproxy docker.io/moby/* docker.io/mohsinonxrm/* @@ -535,6 +544,7 @@ docker.io/qdtoday/qd docker.io/qemux/qemu-docker docker.io/qingpan/rnacos docker.io/qmcgaw/ddns-updater +docker.io/questdb/questdb docker.io/quickwit/* docker.io/radondb/* docker.io/ramonvc/freegpt-webui @@ -575,6 +585,7 @@ docker.io/semitechnologies/* docker.io/senthilrch/* docker.io/serengil/deepface docker.io/sickcodes/docker-osx +docker.io/sj26/mailcatcher docker.io/snowdreamtech/frpc docker.io/snowdreamtech/frps docker.io/solace/solace-pubsub-standard @@ -722,7 +733,9 @@ ghcr.io/helm/** ghcr.io/home-assistant/** ghcr.io/huggingface/* ghcr.io/hwameistor/** +ghcr.io/imagegenius/immich ghcr.io/immich-app/** +ghcr.io/infrastructure-io/** ghcr.io/jd-opensource/** ghcr.io/jimmidyson/configmap-reload ghcr.io/joeferner/redis-commander diff --git a/hack/real-image.sh b/hack/real-image.sh new file mode 100755 index 0000000..eb5601d --- /dev/null +++ b/hack/real-image.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env bash + +function guess_image() { + local image="${1}" + + if [[ -z "${image}" ]]; then + return + fi + + if [[ "${image}" =~ ^"docker.io/"* ]]; then + image="registry-1.${image}" + fi + + if [[ "${image}" =~ ^"registry-1.docker.io/"[^/]+$ ]]; then + image="registry-1.docker.io/library/${image#*/}" + fi + + echo "${image}" +} + +guess_image "${1}" diff --git a/hack/verify-allows.sh b/hack/verify-allows.sh index e38dfd9..38f337f 100755 --- a/hack/verify-allows.sh +++ b/hack/verify-allows.sh @@ -7,6 +7,9 @@ image=$2 function check_allows() { local file=$1 local image=$2 + if [[ "${image}" == *":" ]]; then + return 1 + fi while read line; do if [[ "${line}" == *"**" ]]; then if [[ "${image}" == "${line%\*\*}"* ]]; then diff --git a/mirror-quick.txt b/mirror-quick.txt new file mode 100644 index 0000000..29c9c85 --- /dev/null +++ b/mirror-quick.txt @@ -0,0 +1,180 @@ +docker.io/kindest/node:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/adminer:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/aerospike:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/almalinux:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/alpine:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/alt:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/amazoncorretto:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/amazonlinux:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/api-firewall:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/arangodb:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/archlinux:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/backdrop:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/bash:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/bonita:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/buildpack-deps:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/busybox:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/caddy:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/cassandra:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/centos:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/chronograf:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/cirros:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/clearlinux:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/clefos:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/clickhouse:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/clojure:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/composer:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/consul:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/convertigo:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/couchbase:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/couchdb:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/crate:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/dart:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/debian:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/docker:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/drupal:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/eclipse-mosquitto:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/eclipse-temurin:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/eggdrop:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/elasticsearch:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/elixir:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/emqx:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/erlang:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/fedora:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/flink:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/fluentd:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/friendica:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/gazebo:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/gcc:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/geonetwork:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/ghost:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/golang:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/gradle:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/groovy:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/haproxy:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/haskell:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/haxe:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/hello-world:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/hitch:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/httpd:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/hylang:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/ibm-semeru-runtimes:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/ibmjava:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/influxdb:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/irssi:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/java:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/jetty:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/joomla:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/jruby:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/julia:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/kapacitor:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/kibana:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/kong:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/lightstreamer:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/liquibase:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/logstash:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/mageia:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/mariadb:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/matomo:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/maven:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/mediawiki:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/memcached:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/mongo-express:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/mongo:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/monica:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/mono:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/mysql:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/nats-streaming:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/nats:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/neo4j:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/neurodebian:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/nextcloud:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/nginx:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/node:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/notary:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/odoo:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/open-liberty:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/openjdk:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/oraclelinux:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/orientdb:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/owncloud:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/percona:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/perl:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/photon:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/php-zendserver:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/php:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/phpmyadmin:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/plone:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/postfixadmin:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/postgres:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/pypy:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/python:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/r-base:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/rabbitmq:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/rakudo-star:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/redis:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/redmine:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/registry:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/rethinkdb:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/rocket.chat:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/rockylinux:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/ros:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/ruby:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/rust:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/sapmachine:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/satosa:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/sentry:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/silverpeas:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/solr:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/sonarqube:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/spark:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/spiped:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/storm:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/swift:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/swipl:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/teamspeak:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/telegraf:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/tomcat:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/tomee:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/traefik:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/ubuntu:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/unit:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/varnish:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/websphere-liberty:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/wordpress:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/xwiki:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/yourls:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/znc:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/zookeeper:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/nvidia/cuda:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/ollama/ollama:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/prom/prometheus:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/pytorch/pytorch:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/rancher/rancher-agent:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/rancher/rancher:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +registry.k8s.io/busybox:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +registry.k8s.io/coredns/coredns:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +registry.k8s.io/coredns:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +registry.k8s.io/debian-base:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +registry.k8s.io/echoserver:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +registry.k8s.io/etcd:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +registry.k8s.io/kube-apiserver:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +registry.k8s.io/kube-controller-manager:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +registry.k8s.io/kube-proxy:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +registry.k8s.io/kube-scheduler:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +registry.k8s.io/kube-state-metrics/kube-state-metrics:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +registry.k8s.io/kubectl:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +registry.k8s.io/kueue/kueue:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +registry.k8s.io/kwok/cluster:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +registry.k8s.io/kwok/kwok:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +registry.k8s.io/metrics-server/metrics-server:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +registry.k8s.io/nfd/node-feature-discovery:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +registry.k8s.io/nginx-slim:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +registry.k8s.io/nginx:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +registry.k8s.io/node-problem-detector:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +registry.k8s.io/pause:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +registry.k8s.io/prometheus-adapter/prometheus-adapter:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +registry.k8s.io/scheduler-plugins/controller:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +registry.k8s.io/scheduler-plugins/kube-scheduler:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +registry.k8s.io/serve_hostname:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +registry.k8s.io/test-webserver:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ diff --git a/mirror.txt b/mirror.txt index d39818d..77d4cb0 100644 --- a/mirror.txt +++ b/mirror.txt @@ -1,119 +1,136 @@ -docker.io/kindest/node:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/adminer:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/alpine:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/amazoncorretto:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/arangodb:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/archlinux:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/bash:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/buildpack-deps:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/busybox:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/caddy:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/cassandra:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/centos:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/chronograf:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/composer:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/consul:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/couchbase:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/couchdb:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/debian:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/docker:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/eclipse-mosquitto:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/eclipse-temurin:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/elasticsearch:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/emqx:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/fedora:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/flink:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/friendica:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/gcc:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/ghost:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/golang:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/gradle:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/groovy:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/haproxy:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/haskell:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/hello-world:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/httpd:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/ibm-semeru-runtimes:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/influxdb:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/java:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/jetty:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/kibana:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/kong:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/logstash:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/mariadb:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/matomo:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/maven:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/mediawiki:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/memcached:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/mongo-express:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/mongo:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/mysql:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/nats-streaming:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/nats:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/neo4j:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/nextcloud:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/nginx:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/node:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/odoo:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/openjdk:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/owncloud:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/percona:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/perl:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/php:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/phpmyadmin:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/postgres:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/python:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/r-base:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/rabbitmq:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/redis:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/registry:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/rethinkdb:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/rockylinux:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/ros:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/ruby:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/rust:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/sentry:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/solr:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/sonarqube:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/spark:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/teamspeak:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/telegraf:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/tomcat:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/traefik:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/ubuntu:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/varnish:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/wordpress:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/yourls:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/library/zookeeper:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/nvidia/cuda:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/ollama/ollama:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/prom/prometheus:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/pytorch/pytorch:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/rancher/rancher-agent:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -docker.io/rancher/rancher:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -registry.k8s.io/busybox:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -registry.k8s.io/coredns/coredns:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -registry.k8s.io/coredns:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -registry.k8s.io/debian-base:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -registry.k8s.io/echoserver:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -registry.k8s.io/etcd:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -registry.k8s.io/kube-apiserver:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -registry.k8s.io/kube-controller-manager:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -registry.k8s.io/kube-proxy:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -registry.k8s.io/kube-scheduler:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -registry.k8s.io/kube-state-metrics/kube-state-metrics:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -registry.k8s.io/kubectl:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -registry.k8s.io/kueue/kueue:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -registry.k8s.io/kwok/cluster:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -registry.k8s.io/kwok/kwok:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -registry.k8s.io/metrics-server/metrics-server:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -registry.k8s.io/nfd/node-feature-discovery:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -registry.k8s.io/nginx-slim:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -registry.k8s.io/nginx:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -registry.k8s.io/node-problem-detector:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -registry.k8s.io/pause:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -registry.k8s.io/prometheus-adapter/prometheus-adapter:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -registry.k8s.io/scheduler-plugins/controller:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -registry.k8s.io/scheduler-plugins/kube-scheduler:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -registry.k8s.io/serve_hostname:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ -registry.k8s.io/test-webserver:^([a-z]+-)?[a-z]*[0-9]+(\.[0-9]+){1,2}$ +docker.io/library/adminer:latest +docker.io/library/almalinux:latest +docker.io/library/alpine:latest +docker.io/library/alt:latest +docker.io/library/amazoncorretto:latest +docker.io/library/amazonlinux:latest +docker.io/library/api-firewall:latest +docker.io/library/arangodb:latest +docker.io/library/archlinux:latest +docker.io/library/backdrop:latest +docker.io/library/bash:latest +docker.io/library/bonita:latest +docker.io/library/buildpack-deps:latest +docker.io/library/busybox:latest +docker.io/library/caddy:latest +docker.io/library/cassandra:latest +docker.io/library/centos:latest +docker.io/library/chronograf:latest +docker.io/library/cirros:latest +docker.io/library/clearlinux:latest +docker.io/library/clefos:latest +docker.io/library/clickhouse:latest +docker.io/library/clojure:latest +docker.io/library/composer:latest +docker.io/library/convertigo:latest +docker.io/library/couchbase:latest +docker.io/library/couchdb:latest +docker.io/library/crate:latest +docker.io/library/debian:latest +docker.io/library/docker:latest +docker.io/library/drupal:latest +docker.io/library/eclipse-mosquitto:latest +docker.io/library/eclipse-temurin:latest +docker.io/library/eggdrop:latest +docker.io/library/elixir:latest +docker.io/library/emqx:latest +docker.io/library/erlang:latest +docker.io/library/fedora:latest +docker.io/library/flink:latest +docker.io/library/fluentd:latest +docker.io/library/friendica:latest +docker.io/library/gazebo:latest +docker.io/library/gcc:latest +docker.io/library/geonetwork:latest +docker.io/library/ghost:latest +docker.io/library/golang:latest +docker.io/library/gradle:latest +docker.io/library/groovy:latest +docker.io/library/haproxy:latest +docker.io/library/haskell:latest +docker.io/library/haxe:latest +docker.io/library/hello-world:latest +docker.io/library/hitch:latest +docker.io/library/httpd:latest +docker.io/library/hylang:latest +docker.io/library/ibmjava:latest +docker.io/library/influxdb:latest +docker.io/library/irssi:latest +docker.io/library/jetty:latest +docker.io/library/joomla:latest +docker.io/library/jruby:latest +docker.io/library/julia:latest +docker.io/library/kapacitor:latest +docker.io/library/kong:latest +docker.io/library/lightstreamer:latest +docker.io/library/liquibase:latest +docker.io/library/mageia:latest +docker.io/library/mariadb:latest +docker.io/library/matomo:latest +docker.io/library/maven:latest +docker.io/library/mediawiki:latest +docker.io/library/memcached:latest +docker.io/library/mongo-express:latest +docker.io/library/mongo:latest +docker.io/library/monica:latest +docker.io/library/mono:latest +docker.io/library/mysql:latest +docker.io/library/nats-streaming:latest +docker.io/library/nats:latest +docker.io/library/neo4j:latest +docker.io/library/neurodebian:latest +docker.io/library/nextcloud:latest +docker.io/library/nginx:latest +docker.io/library/node:latest +docker.io/library/odoo:latest +docker.io/library/open-liberty:latest +docker.io/library/openjdk:latest +docker.io/library/orientdb:latest +docker.io/library/owncloud:latest +docker.io/library/percona:latest +docker.io/library/perl:latest +docker.io/library/photon:latest +docker.io/library/php-zendserver:latest +docker.io/library/php:latest +docker.io/library/phpmyadmin:latest +docker.io/library/plone:latest +docker.io/library/postfixadmin:latest +docker.io/library/postgres:latest +docker.io/library/pypy:latest +docker.io/library/python:latest +docker.io/library/r-base:latest +docker.io/library/rabbitmq:latest +docker.io/library/rakudo-star:latest +docker.io/library/redis:latest +docker.io/library/redmine:latest +docker.io/library/registry:latest +docker.io/library/rethinkdb:latest +docker.io/library/rocket.chat:latest +docker.io/library/ros:latest +docker.io/library/ruby:latest +docker.io/library/rust:latest +docker.io/library/sapmachine:latest +docker.io/library/satosa:latest +docker.io/library/sentry:latest +docker.io/library/silverpeas:latest +docker.io/library/solr:latest +docker.io/library/sonarqube:latest +docker.io/library/spark:latest +docker.io/library/spiped:latest +docker.io/library/storm:latest +docker.io/library/swift:latest +docker.io/library/swipl:latest +docker.io/library/teamspeak:latest +docker.io/library/telegraf:latest +docker.io/library/tomcat:latest +docker.io/library/tomee:latest +docker.io/library/traefik:latest +docker.io/library/ubuntu:latest +docker.io/library/unit:latest +docker.io/library/varnish:latest +docker.io/library/websphere-liberty:latest +docker.io/library/wordpress:latest +docker.io/library/xwiki:latest +docker.io/library/yourls:latest +docker.io/library/znc:latest +docker.io/library/zookeeper:latest