Download index.html from getreadystack/bitnami-image-catalog-gate: direct link, hf CLI and curl.
- Browser
- Download file 41.1 kB
-
https://huggingface.co/spaces/getreadystack/bitnami-image-catalog-gate/resolve/main/index.html
- Command line
-
hf download hf://spaces/getreadystack/bitnami-image-catalog-gate/index.html
-
curl -L -o index.html https://huggingface.co/spaces/getreadystack/bitnami-image-catalog-gate/resolve/main/index.html
41.1 kB
| <html lang="en"> | |
| <head> | |
| <meta charset="utf-8"> | |
| <meta name="viewport" content="width=device-width,initial-scale=1"> | |
| <title>Bitnami catalog change check — check your configs free</title> | |
| <meta name="description" content="This free browser tool flags Bitnami image lines affected by the catalog change, including removed tags, frozen legacy images, Helm pins, and allowInsecureImages."> | |
| <style> | |
| :root{color-scheme:light}body{margin:0;font:15px/1.55 system-ui,-apple-system,"Segoe UI",sans-serif;background:#faf9f5;color:#1a1512} | |
| .wrap{max-width:960px;margin:0 auto;padding:28px 18px 60px}h1{font-size:26px;margin:0 0 6px}.lede{color:#4a403a;margin:0 0 16px} | |
| textarea{width:100%;min-height:260px;font:13px/1.45 ui-monospace,Menlo,Consolas,monospace;padding:12px;border:1px solid #d9d0c4;border-radius:8px;box-sizing:border-box} | |
| .bar{display:flex;gap:10px;align-items:center;margin:12px 0}button{font:600 15px system-ui;padding:10px 18px;border:0;border-radius:8px;background:#1a1512;color:#fff;cursor:pointer} | |
| input[type=date]{font:14px system-ui;padding:8px;border:1px solid #d9d0c4;border-radius:6px} | |
| table{border-collapse:collapse;width:100%;font-size:14px;margin-top:10px}th,td{text-align:left;padding:8px 10px;border-bottom:1px solid #eee;vertical-align:top}th{font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:#7a6e65} | |
| .sev.error{color:#a8551f;font-weight:700}.sev.warn,.sev.warning{color:#96691f}.ok{color:#2a6446;font-weight:600}.sum{font-weight:600} | |
| .note{font-size:13px;color:#7a6e65;margin-top:18px}#paid{margin-top:22px;padding:14px 16px;border:1px solid #e2d8cb;border-radius:10px;background:#fffdfa} | |
| </style> | |
| <script data-grow-initializer="">!(function(){window.growMe||((window.growMe=function(e){window.growMe._.push(e);}),(window.growMe._=[]));var e=document.createElement("script");(e.type="text/javascript"),(e.src="https://faves.grow.me/main.js"),(e.defer=!0),e.setAttribute("data-grow-faves-site-id","U2l0ZTphZjljMzgyMC0yMmU5LTRhYjgtYTIxNS03OTRhMGY1N2ExYzM=");var t=document.getElementsByTagName("script")[0];t.parentNode.insertBefore(e,t);})();</script> | |
| <!--yj-canon-s101--><link rel="canonical" href="https://getreadystack.com/tools/bitnami-image-catalog-gate"></head> | |
| <body> | |
| <div class="wrap"> | |
| <h1>Bitnami catalog change check — check your configs free</h1> | |
| <p class="lede">Flags Bitnami image lines that broke with the 2025-09-29 catalog change: removed docker.io/bitnami tags, frozen bitnamilegacy images, Helm values pins, allowInsecureImages. Runs entirely in your browser — nothing is uploaded.</p> | |
| <textarea id="src" spellcheck="false"># docker-compose.yml for the orders stack, written before the Bitnami catalog change | |
| services: | |
| db: | |
| image: bitnami/postgresql:15.4.0 | |
| environment: | |
| POSTGRESQL_DATABASE: orders | |
| cache: | |
| image: docker.io/bitnami/redis:7.2 | |
| queue: | |
| image: bitnamilegacy/kafka:3.6.1 | |
| proxy: | |
| image: bitnami/nginx@sha256:3f1a9c0d52be4e7a8c61f0e2d7b94a5c1e8d6f20b7a39c4e5d1f8a2b6c0e9d74 | |
| --- | |
| # values-prod.yaml for the mongodb chart | |
| global: | |
| security: | |
| allowInsecureImages: true | |
| image: | |
| registry: docker.io | |
| repository: bitnami/mongodb | |
| tag: 7.0.5</textarea> | |
| <div class="bar"><button id="go">Check</button><label>as of <input type="date" id="today"></label></div> | |
| <div id="out" aria-live="polite"></div> | |
| <div id="paid"><strong>Free here:</strong> Scan the open Dockerfile, Compose or Helm values file and see every broken Bitnami line with its fix, no key needed. <strong>In the editor:</strong> Scan every file in the workspace at once and export one Markdown migration report: file, line, image, replacement. — that part asks for a licence key. <a href="https://getreadystack.com/api/buy/cl/polar_cl_FqAtCAEM5VWUyQWBiwGyJjkmmRDq7gGad7pln3lLDJl">Get the full version — $29</a> ($29 once · one licence key per person or team seat. Bitnami Secure Images, the subscription that keeps versioned tags, is reported at $50,000 to $72,000 per year.)</div> | |
| <p class="note">Same engine as the VS Code extension, byte for byte.</p> | |
| </div> | |
| <script>var BN_RULES = [ | |
| {"id": "BN01", "sev": "error", "cutoff": "2025-09-29", "title": "Versioned tag removed from docker.io/bitnami", | |
| "why": "On 2025-09-29 Bitnami moved every versioned tag out of the public docker.io/bitnami catalog into docker.io/bitnamilegacy. A fresh node, a new CI runner or an evicted cache now fails the pull (ImagePullBackOff / manifest unknown).", | |
| "fix": "Pin an image you control: mirror the tag into your own registry, switch to the upstream official image, or license Bitnami Secure Images."}, | |
| {"id": "BN02", "sev": "error", "title": "Frozen bitnamilegacy image", | |
| "why": "docker.io/bitnamilegacy is an archive: Bitnami states it receives no further updates, so every CVE fixed after the move stays open in this image.", | |
| "fix": "Treat it as a stopgap only: mirror it into your registry today and schedule the move to a maintained image."}, | |
| {"id": "BN03", "sev": "error", "cutoff": "2025-09-29", "title": "Helm values pin a removed Bitnami tag", | |
| "why": "image.repository points at bitnami/\u003capp\u003e and image.tag is a version number. Since 2025-09-29 that tag no longer exists under docker.io/bitnami, so the next rollout or node replacement cannot start the pod.", | |
| "fix": "Override image.registry/image.repository with your mirror (or the upstream image) and keep the pinned tag there."}, | |
| {"id": "BN04", "sev": "warning", "title": "Bitnami free tier is latest-only", | |
| "why": "After the change the free docker.io/bitnami images are published for development on the latest tag only. An unpinned or :latest reference in production changes under you with no version pin available.", | |
| "fix": "Pin a version in a registry you control, or use a subscription that gives versioned tags."}, | |
| {"id": "BN05", "sev": "warning", "title": "allowInsecureImages switched on", | |
| "why": "Bitnami charts refuse a non-default image unless global.security.allowInsecureImages is true. Teams flip it to point at bitnamilegacy, which also disables the chart's image verification.", | |
| "fix": "Keep the flag only while the override points at your own verified mirror, and note the image it covers."}, | |
| {"id": "BN06", "sev": "warning", "title": "Digest pin on the old public catalog", | |
| "why": "A digest pin on docker.io/bitnami/\u003capp\u003e was taken from the pre-2025-09-29 catalog. The content moved to bitnamilegacy, so the digest may no longer resolve under the bitnami path.", | |
| "fix": "Re-resolve the digest from your own mirror and pin that registry path instead."}, | |
| {"id": "BN07", "sev": "info", "title": "Bitnami chart source", | |
| "why": "This file pulls a chart from the Bitnami chart repository. Its default image values point at docker.io/bitnami, so every image the chart starts needs an override review.", | |
| "fix": "List each image.repository the chart sets and override the ones that point at docker.io/bitnami."} | |
| ] | |
| ;</script> | |
| <script>/* Bitnami Image Gate engine — one file for VS Code and the browser. */ | |
| (function () { | |
| var RULES = (typeof module !== 'undefined') ? require('./rules.json') : window.BN_RULES; | |
| var BY = {}; | |
| RULES.forEach(function (r) { BY[r.id] = r; }); | |
| var IMAGE_CTX = /(\bimage:|^\s*FROM\s|docker\s+(?:run|pull)\b|--image[= ])/i; | |
| var REF = /(?:^|[\s"'=])((?:docker\.io\/)?bitnami\/[a-z0-9][a-z0-9._-]*)(?::([A-Za-z0-9][A-Za-z0-9._-]*))?(@sha256:[a-f0-9]{8,})?/; | |
| var LEGACY = /((?:docker\.io\/)?bitnamilegacy\/[a-z0-9][a-z0-9._-]*(?::[A-Za-z0-9._-]+)?)/; | |
| var HELM_REPO = /^\s*repository:\s*["']?((?:docker\.io\/)?bitnami\/[a-z0-9][a-z0-9._-]*)["']?\s*(#.*)?$/; | |
| var HELM_TAG = /^\s*tag:\s*["']?([^"'\s#]+)/; | |
| var INSECURE = /allowInsecureImages:\s*["']?true/i; | |
| var CHART_SRC = /(charts\.bitnami\.com\/bitnami|oci:\/\/registry-1\.docker\.io\/bitnamicharts)/; | |
| function sevFor(id, today) { | |
| var r = BY[id]; | |
| if (r.cutoff && today && today < r.cutoff) return 'warning'; | |
| return r.sev; | |
| } | |
| function add(out, id, line, subject, today) { | |
| var r = BY[id]; | |
| var s = sevFor(id, today); | |
| var when = (r.cutoff && today && today < r.cutoff) ? ' (breaks on ' + r.cutoff + ')' : ''; | |
| out.push({ check: id, sev: s, line: line, subject: subject, | |
| msg: r.title + when + ': ' + subject + '. ' + r.why + ' Fix: ' + r.fix, fix: r.fix }); | |
| } | |
| function check(text, opts) { | |
| opts = opts || {}; | |
| var today = String(opts.today || new Date().toISOString()).slice(0, 10); | |
| var lines = String(text || '').replace(/\r\n?/g, '\n').split('\n'); | |
| var out = []; | |
| for (var i = 0; i < lines.length; i++) { | |
| var raw = lines[i]; | |
| if (/^\s*#/.test(raw)) continue; | |
| var ln = i + 1, m; | |
| if ((m = LEGACY.exec(raw))) { add(out, 'BN02', ln, m[1], today); continue; } | |
| if (INSECURE.test(raw)) { add(out, 'BN05', ln, raw.trim(), today); continue; } | |
| if ((m = CHART_SRC.exec(raw))) { add(out, 'BN07', ln, m[1], today); continue; } | |
| if ((m = HELM_REPO.exec(raw))) { | |
| for (var j = i + 1; j < Math.min(lines.length, i + 6); j++) { | |
| var t = HELM_TAG.exec(lines[j]); | |
| if (t) { | |
| if (t[1] !== 'latest') add(out, 'BN03', ln, m[1] + ' tag ' + t[1], today); | |
| break; | |
| } | |
| } | |
| continue; | |
| } | |
| if (IMAGE_CTX.test(raw) && (m = REF.exec(raw))) { | |
| var name = m[1], tag = m[2], digest = m[3]; | |
| if (digest) add(out, 'BN06', ln, name + digest.slice(0, 19) + '…', today); | |
| else if (!tag || tag === 'latest') add(out, 'BN04', ln, name + ':' + (tag || 'latest'), today); | |
| else add(out, 'BN01', ln, name + ':' + tag, today); | |
| } | |
| } | |
| return { findings: out }; | |
| } | |
| var api = { engine: { check: check }, RULES: RULES, RULE_COUNT: RULES.length }; | |
| if (typeof window !== 'undefined') window.BNENGINE = api; | |
| if (typeof module !== 'undefined') module.exports = api; | |
| })(); | |
| </script> | |
| <script>// ⛔뼈대 — kit/scaffold.py 가 찍는다 (s143). findings [{check,sev,msg,line?}] → 글/HTML. 같은 파일이 Node 와 브라우저에서 산다. | |
| ; | |
| function escapeHtml(s) { return String(s == null ? '' : s).replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"'); } | |
| function summaryLine(res) { | |
| const f = (res && res.findings) || []; const e = f.filter(function (x) { return String(x.sev || 'error').toLowerCase().startsWith('err'); }).length; | |
| return f.length ? (f.length + ' finding' + (f.length === 1 ? '' : 's') + ' (' + e + ' error' + (e === 1 ? '' : 's') + ')') : 'Clean — no findings.'; | |
| } | |
| function toText(res, label) { | |
| const f = (res && res.findings) || []; | |
| const lines = ['== ' + (label || '') + ' — ' + summaryLine(res)]; | |
| f.forEach(function (x) { lines.push(' ' + String(x.sev || 'error').toUpperCase().slice(0, 4) + ' ' + (x.line ? 'L' + x.line + ' ' : '') + (x.check || x.id || '') + ' ' + (x.msg || x.message || '')); }); | |
| return lines.join('\n'); | |
| } | |
| function toHtml(res) { | |
| const f = (res && res.findings) || []; | |
| if (!f.length) return '<p class="ok">' + escapeHtml(summaryLine(res)) + '</p>'; | |
| const rows = f.map(function (x) { return '<tr><td class="sev ' + escapeHtml(String(x.sev || 'error')) + '">' + escapeHtml(String(x.sev || 'error')) + '</td><td>' + (x.line ? 'L' + escapeHtml(x.line) : '') + '</td><td><code>' + escapeHtml(x.check || x.id || '') + '</code></td><td>' + escapeHtml(x.msg || x.message || '') + '</td></tr>'; }).join(''); | |
| return '<p class="sum">' + escapeHtml(summaryLine(res)) + '</p><table><thead><tr><th>Level</th><th>Line</th><th>Check</th><th>What</th></tr></thead><tbody>' + rows + '</tbody></table>'; | |
| } | |
| var BNREPORT = { escapeHtml: escapeHtml, summaryLine: summaryLine, toText: toText, toHtml: toHtml }; | |
| if (typeof module !== 'undefined' && module.exports) module.exports = BNREPORT; | |
| else window.BNREPORT = BNREPORT; | |
| </script> | |
| <script> | |
| (function(){ | |
| var src=document.getElementById('src'), out=document.getElementById('out'), go=document.getElementById('go'), today=document.getElementById('today'); | |
| today.value=new Date().toISOString().slice(0,10); | |
| function run(){ try { var res=window.BNENGINE.engine.check(src.value,{today:today.value}); out.innerHTML=window.BNREPORT.toHtml(res); } catch(e){ out.innerHTML='<p class="sev error">Could not run: '+String(e.message||e)+'</p>'; } } | |
| go.onclick=run; if (src.value.trim()) run(); | |
| })(); | |
| </script> | |
| <section data-yj-install="free" style="margin:2rem auto 1rem;max-width:46rem;padding:1.25rem 1.25rem;border:1px solid #cfe3d6;border-radius:12px;background:#f6fbf8;font:16px/1.6 system-ui,-apple-system,Segoe UI,sans-serif"><h2 style="margin:0 0 .4rem;font-size:1.2rem">Install free</h2><p style="margin:0 0 .8rem;color:#41505f">Free for the file open in your editor - no key, no limit. The workspace sweep and the report ask for a key.</p><a href="https://open-vsx.org/extension/readystack/bitnami-image-catalog-gate" rel="noopener" data-yj-install-door="ovsx" onclick="try{navigator.sendBeacon('/api/ev',new Blob([JSON.stringify({t:'install',slug:'bitnami-image-catalog-gate',src:'ovsx',path:location.pathname})],{type:'application/json'}))}catch(e){}" style="display:inline-block;margin:0 .5rem .5rem 0;padding:.6rem 1rem;border-radius:8px;background:#0f7b3f;color:#fff;text-decoration:none;font-weight:600">Open VSX (Cursor, VSCodium)</a><a href="https://www.npmjs.com/package/@readystack/bitnami-image-catalog-gate" rel="noopener" data-yj-install-door="npm" onclick="try{navigator.sendBeacon('/api/ev',new Blob([JSON.stringify({t:'install',slug:'bitnami-image-catalog-gate',src:'npm',path:location.pathname})],{type:'application/json'}))}catch(e){}" style="display:inline-block;margin:0 .5rem .5rem 0;padding:.6rem 1rem;border-radius:8px;background:#0f7b3f;color:#fff;text-decoration:none;font-weight:600">npm</a><a href="https://hub.docker.com/r/getreadystack/bitnami-image-catalog-gate" rel="noopener" data-yj-install-door="docker" onclick="try{navigator.sendBeacon('/api/ev',new Blob([JSON.stringify({t:'install',slug:'bitnami-image-catalog-gate',src:'docker',path:location.pathname})],{type:'application/json'}))}catch(e){}" style="display:inline-block;margin:0 .5rem .5rem 0;padding:.6rem 1rem;border-radius:8px;background:#0f7b3f;color:#fff;text-decoration:none;font-weight:600">Docker Hub</a><pre style="margin:.5rem 0 0;padding:.6rem .8rem;background:#f3f5f8;border-radius:8px;font-size:.9rem;overflow:auto">npx @readystack/bitnami-image-catalog-gate <file> | |
| docker run --rm -v "$PWD:/w" getreadystack/bitnami-image-catalog-gate /w</pre><p style="margin:.6rem 0 0;font-size:.92rem;color:#41505f"><a href="https://getreadystack.com/api/buy/cl/polar_cl_l6iN1uWt0FwWu7tBsczD0jWpP2vxFM54Wdwqb3KPi1G" rel="nofollow" style="color:#0f7b3f;text-decoration:underline">Team? One key for every ReadyStack linter, 5 seats, $149 once</a></p></section> | |
| <section data-yj-alert="rule" style="margin:1rem auto 1.5rem;max-width:46rem;padding:1.1rem 1.25rem;border:1px solid #d9dee6;border-radius:12px;background:#fbfcfd;font:15px/1.55 system-ui,-apple-system,Segoe UI,sans-serif"><b style="font-size:1.05rem">Get the full rule table as a PDF</b><div style="opacity:.78;margin:.35rem 0 .8rem">All 7 rules Bitnami Image Gate: Compose, Helm, Dockerfile checks, each with its source and date, on printable pages you can hand to your team or auditor. We email it now, and once more only if a rule changes. No newsletter.</div><div style="display:flex;gap:8px;flex-wrap:wrap"><input id="yjae" type="email" placeholder="you@example.com" style="flex:1;min-width:210px;padding:11px 13px;border:1px solid rgba(140,150,165,.34);border-radius:8px;background:#fff;color:inherit"><button id="yjab" style="padding:11px 18px;border-radius:8px;border:0;cursor:pointer;background:#0f7b3f;color:#fff;font:600 15px system-ui,sans-serif">Email me the PDF</button></div><div id="yjao" hidden style="margin-top:.6rem;color:#0f7b3f">Sent. It arrives within the hour - check spam too.</div><script>(function(){var b=document.getElementById("yjab"),e=document.getElementById("yjae");if(!b||!e)return;b.addEventListener("click",function(){var v=e.value.trim();if(!/.+@.+\..+/.test(v))return;try{localStorage.setItem("yj_em","1");}catch(_){}fetch(location.origin+"/api/subscribe",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:v,slug:"bitnami-image-catalog-gate",lang:"en",source:"rule_table"+((b.closest&&b.closest("section")&&b.closest("section").getAttribute("data-yj-moved"))?"_at_result":"")})}).then(function(r){var o=document.getElementById("yjao");o.hidden=false;if(!r.ok){o.textContent="Could not save - please try again.";}}).catch(function(){var o=document.getElementById("yjao");o.hidden=false;o.textContent="Could not save - please try again.";});});})();</script><script>(function(){var e=document.getElementById("yjae"),s=e&&e.closest?e.closest("section"):null,o=document.getElementById("out");if(!s||!o)return;var d=false;function mv(ev){if(d)return;if(ev&&ev.target&&s.contains(ev.target))return;d=true;var b=o;while(b.parentNode&&b.parentNode!==document.body&&b.parentNode.tagName!=="MAIN"&&b.parentNode.tagName!=="ARTICLE")b=b.parentNode;if(!b.parentNode||b===s||b.contains(s))return;try{b.parentNode.insertBefore(s,b.nextSibling);s.setAttribute("data-yj-moved","1");}catch(_){}}document.addEventListener("input",mv,true);document.addEventListener("change",mv,true);})();</script></section> | |
| <section data-yj-cta="paid" style="margin:3rem auto;max-width:46rem;padding:1.5rem 1.25rem;border:1px solid #d8dee9;border-radius:12px;background:#fbfcfe;font:16px/1.6 system-ui,-apple-system,Segoe UI,sans-serif"><h2 style="margin:0 0 .5rem;font-size:1.25rem">Get the complete version <span class="yj-price">$29</span></h2><p style="margin:.25rem 0 1rem;color:#41505f">This page is the working piece. The full pack has everything below.</p><p style="margin:0 0 1rem;color:#41505f">Finds the Bitnami image lines that broke on 2025-09-29, when versioned docker.io/bitnami tags moved to the frozen docker.io/bitnamilegacy archive</p><p style="margin:0 0 1rem;color:#5b6b7c;font-size:.94rem">Bitnami Secure Images, the subscription that keeps versioned Bitnami tags, is reported at $50,000 to $72,000 per year (Minimus, iits-consulting).</p><a href="https://getreadystack.com/api/buy/cl/polar_cl_FqAtCAEM5VWUyQWBiwGyJjkmmRDq7gGad7pln3lLDJl" rel="nofollow" style="display:inline-block;padding:.7rem 1.3rem;border-radius:8px;background:#1b64f2;color:#fff;text-decoration:none;font-weight:600">Buy the full version — $29</a></section> | |
| <!--yj-share-s101--><div style="margin:28px 0 8px;text-align:center"><button id="yjcp" type="button" style="font:inherit;padding:10px 18px;border:1px solid #8884;border-radius:10px;background:transparent;cursor:pointer">Copy link</button><button id="yjimg" type="button" style="font:inherit;padding:10px 18px;margin-left:8px;border:1px solid #8884;border-radius:10px;background:transparent;cursor:pointer">Save result as image</button></div><script>(function(){var b=document.getElementById("yjimg");if(!b)return;b.addEventListener("click",function(){var o=document.getElementById("out");var txt=(o&&(o.innerText||o.textContent)||"").trim();if(!txt){b.textContent="(no result yet)";setTimeout(function(){b.textContent="Save result as image";},1500);return;}var lines=txt.split(String.fromCharCode(10)).filter(function(x){return x.trim();}).slice(0,10);var W=1200,P=56,c=document.createElement("canvas");c.width=W;var lh=38,H=P*2+70+lines.length*lh+60;c.height=H;var x=c.getContext("2d");x.fillStyle="#1a1512";x.fillRect(0,0,W,H);x.fillStyle="#f3e9d2";x.font="600 34px system-ui,Segoe UI,Arial";var t=(document.title||"").split("|")[0].trim();x.fillText(t.slice(0,54),P,P+34);x.font="22px ui-monospace,Menlo,Consolas,monospace";x.fillStyle="#e8dcc4";for(var i=0;i<lines.length;i++){x.fillText(lines[i].slice(0,88),P,P+70+i*lh+22);}x.font="600 22px system-ui,Segoe UI,Arial";x.fillStyle="#c9a227";var d=location.hostname.replace("www.","");x.fillText(d,W-P-x.measureText(d).width,H-P+6);c.toBlob(function(bl){var u=URL.createObjectURL(bl),a=document.createElement("a");a.href=u;a.download=(t||"result").replace(/[^a-z0-9]+/gi,"-").toLowerCase()+"-"+d+".png";document.body.appendChild(a);a.click();setTimeout(function(){URL.revokeObjectURL(u);a.remove();},2000);},"image/png");});})();</script><script>(function(){var b=document.getElementById("yjcp");if(!b)return;var t=b.textContent;b.addEventListener("click",function(){var u=location.href.split("#")[0];function d(){b.textContent="Link copied";setTimeout(function(){b.textContent=t;},1800);}if(navigator.clipboard&&navigator.clipboard.writeText){navigator.clipboard.writeText(u).then(d,function(){prompt("",u);});}else{prompt("",u);}});})();</script> | |
| <script data-yj="yj-view-beacon">(function(){try{var p=location.pathname;var k='yjv:'+p;if(sessionStorage.getItem(k))return;sessionStorage.setItem(k,'1');fetch('/api/ev',{method:'POST',keepalive:true,headers:{'Content-Type':'application/json'},body:JSON.stringify({path:p,lang:"en",ref:(document.referrer||''),src:(function(){try{return (new URLSearchParams(location.search).get('ref')||'').replace(/[^a-z_]/g,'').slice(0,12)}catch(e){return ''}})()})}).catch(function(){});}catch(e){}})();</script> | |
| <script data-yj="yj-use-beacon">(function(){try{var o=document.getElementById('out');if(!o)return;var p=location.pathname,k='yju:'+p,sent=false;function fire(){if(sent||sessionStorage.getItem(k))return;if(!(o.textContent||'').replace(/\s+/g,'').length)return;sent=true;sessionStorage.setItem(k,'1');fetch('/api/ev',{method:'POST',keepalive:true,headers:{'Content-Type':'application/json'},body:JSON.stringify({path:p,lang:"en",t:'use',src:(function(){try{return (new URLSearchParams(location.search).get('ref')||'').replace(/[^a-z_]/g,'').slice(0,12)}catch(e){return ''}})()})}).catch(function(){});}var mo=new MutationObserver(function(){fire();if(sent)mo.disconnect();});mo.observe(o,{childList:true,characterData:true,subtree:true});}catch(e){}})();</script><div class="yj-home-find"><div class="yj-lgbar"><a href="/" class="yj-lg on">EN</a><a href="/de/" class="yj-lg">DE</a><a href="/ja/" class="yj-lg">JA</a><a href="/es/" class="yj-lg">ES</a><a href="/pt/" class="yj-lg">PT</a></div><section class="yj-find"><h2>Find a tool</h2><input id="yjq" type="search" autocomplete="off" placeholder="Type a product name, format or task"><div id="yjr"></div></section><style>.yj-lgbar{position:absolute;top:14px;right:18px;display:flex;gap:6px;z-index:60}.yj-lg{font:600 12px/1 system-ui,sans-serif;padding:6px 9px;border-radius:4px;text-decoration:none;color:#8b96a3;border:1px solid rgba(140,150,165,.28)}.yj-lg:hover{color:#e8eaed;border-color:rgba(160,175,195,.6)}.yj-lg.on{color:#0e1116;background:#cfd6de;border-color:#cfd6de}.yj-find{max-width:760px;margin:34px auto 8px;padding:0 20px}.yj-find h2{font:600 20px/1.3 system-ui,sans-serif;margin:0 0 10px}#yjq{width:100%;box-sizing:border-box;padding:13px 15px;font:400 15.5px system-ui,sans-serif;border:1px solid rgba(140,150,165,.34);border-radius:8px;background:rgba(255,255,255,.04);color:inherit}#yjq:focus{outline:none;border-color:#7FD1C4}#yjr{margin-top:10px;display:flex;flex-direction:column;gap:6px}#yjr a{display:flex;justify-content:space-between;gap:12px;padding:11px 14px;border:1px solid rgba(140,150,165,.22);border-radius:6px;text-decoration:none;font:400 14.5px/1.4 system-ui,sans-serif;color:inherit}#yjr a:hover{border-color:#7FD1C4}#yjr .pr{font:600 13px system-ui,sans-serif;color:#5fbf9a;white-space:nowrap}</style><script>(function(){var q=document.getElementById("yjq"),r=document.getElementById("yjr"),D=null;function load(){if(D)return Promise.resolve(D);return fetch("/search-index.json").then(function(x){return x.json();}).then(function(j){D=j;return j;}).catch(function(){D=[];return D;});}function esc(t){return String(t).replace(/[&<>"]/g,function(c){return {"&":"&","<":"<",">":">",'"':"""}[c];});}function run(){var v=q.value.trim().toLowerCase();if(v.length<2){r.innerHTML="";return;}load().then(function(j){var w=v.split(/\s+/),o=[];for(var i=0;i<j.length&&o.length<12;i++){var t=j[i].t.toLowerCase();var ok=true;for(var k=0;k<w.length;k++){if(t.indexOf(w[k])<0){ok=false;break;}}if(ok)o.push(j[i]);}r.innerHTML=o.length?o.map(function(x){return "<a href=\""+esc(x.u)+"\">"+"<span>"+esc(x.t)+"</span>"+(x.p?"<span class=\"pr\">$"+x.p+"</span>":"")+"</a>";}).join(""):"";});}q.addEventListener("input",run);q.addEventListener("focus",load);})();</script></div><section data-yj="yj-facts-v1" style="max-width:920px;margin:48px auto 0;padding:0 20px;font-family:system-ui,sans-serif"><style>.yj-article p{font:400 15.5px/1.7 system-ui,sans-serif;color:#26313b;margin:0 0 12px;max-width:72ch}.yj-article h2,.yj-article h3,.yj-article h4{font:600 17px/1.35 system-ui,sans-serif;color:#1b1f24;margin:22px 0 8px}.yj-article table{border-collapse:collapse;margin:10px 0 16px;font:14px/1.45 system-ui,sans-serif}.yj-article th,.yj-article td{border:1px solid #e2e6ea;padding:6px 10px;text-align:left}.yj-article th{background:#f4f6f8}.yj-article pre{background:#0f1720;color:#e6edf3;padding:12px 14px;border-radius:8px;overflow:auto;font:13px/1.5 ui-monospace,Menlo,monospace}.yj-article code{font:13px ui-monospace,Menlo,monospace;background:#f1f3f5;padding:1px 4px;border-radius:3px}.yj-article pre code{background:none;padding:0}.yj-article ul,.yj-article ol{font:15px/1.6 system-ui,sans-serif;color:#26313b}</style><p style="font:400 13px/1.5 system-ui,sans-serif;color:#6b7680;margin:0 0 14px"><time datetime="2026-09-27">Updated 2026-09-27</time> · ReadyStack</p><script type="application/ld+json">{"@context":"https://schema.org","@type":"WebPage","dateModified":"2026-09-27","author":{"@type":"Organization","name":"ReadyStack"}}</script><h2 style="font:600 21px/1.3 system-ui,sans-serif;margin:0 0 6px;color:#1b1f24">Worked example</h2><p style="font:400 14.5px/1.5 system-ui,sans-serif;margin:0 0 16px;color:#5b6570">Real numbers from this tool, line by line.</p><div class="yj-article"><p><img src="https://getreadystack.com/img/promo/sku321056_result_card.jpg" alt="Bitnami Image Gate: Compose, Helm, Dockerfile" loading="lazy" style="max-width:100%;border-radius:6px"></p> | |
| <p>Six Bitnami lines to fix: that is what DevOps and platform engineers see when the dirty.yaml sample, a docker-compose file plus Helm values written before the 2025-09-29 Bitnami catalog change, runs through Bitnami Image Gate. Four findings are errors that stop a pull or pin a frozen image; two are warnings.</p> | |
| <h3>What changed on 2025-09-29</h3> | |
| <p>Bitnami moved every versioned tag out of the public docker.io/bitnami catalog into docker.io/bitnamilegacy. Bitnami states that the legacy repository receives no further updates. The free images that stay under docker.io/bitnami are published for development on the latest tag only. Versioned images, LTS branches and continuous patches moved to Bitnami Secure Images, a subscription reported at $50,000 to $72,000 per year by Minimus and iits-consulting.</p> | |
| <h3>Why it breaks quietly</h3> | |
| <p>A cluster that already holds the image in its node cache keeps running. The failure waits for the next fresh node, an autoscaling event, a new CI runner or a cache eviction. Then the pod sits in ImagePullBackOff with manifest unknown, usually during a rollout nobody planned around the image. A cached local docker pull still succeeds, so the laptop test passes. Chatbots trained before the change still write bitnami/postgresql:15 into new compose files.</p> | |
| <h3>The six lines in the sample</h3> | |
| <table><thead><tr><th>Broken line</th><th>Rule</th><th>Fix</th></tr></thead><tbody><tr><td>image: bitnami/postgresql:15.4.0</td><td>BN01 error</td><td>mirror the tag into your own registry</td></tr><tr><td>image: docker.io/bitnami/redis:7.2</td><td>BN01 error</td><td>upstream redis:7.2</td></tr><tr><td>image: bitnamilegacy/kafka:3.6.1</td><td>BN02 error</td><td>frozen archive: move to a maintained image</td></tr><tr><td>image: bitnami/nginx@sha256:3f1a...</td><td>BN06 warning</td><td>re-resolve the digest from your mirror</td></tr><tr><td>allowInsecureImages: true</td><td>BN05 warning</td><td>keep only for your own verified mirror</td></tr><tr><td>repository: bitnami/mongodb + tag: 7.0.5</td><td>BN03 error</td><td>override image.registry and image.repository</td></tr></tbody></table> | |
| <p>The clean.yaml sample, where every image comes from a private mirror or an upstream image such as redis:7.2 or apache/kafka:3.8.0, returns 0 findings.</p> | |
| <h3>How the check reads a file</h3> | |
| <p>The engine works line by line and skips comment lines. It looks at image: keys, Dockerfile FROM lines and docker run or docker pull commands. For Helm values it pairs a repository: bitnami/<app> line with the tag: that follows within five lines, because Bitnami charts split registry, repository and tag into separate keys. A bitnamilegacy reference is flagged wherever it appears. The allowInsecureImages flag gets its own rule because Bitnami charts refuse a non-default image unless it is true, and teams flip it to reach bitnamilegacy, which also turns off the chart's image verification.</p> | |
| <p>The check date is an input. Set it before 2025-09-29 and the removed-tag rules drop to warnings marked breaks on 2025-09-29; from that date on they are errors.</p> | |
| <h3>Free and full version</h3> | |
| <p>The free version scans the open Dockerfile, Compose or Helm values file with all seven rules and shows every finding with its fix, with no key and no account. The same engine runs in the free web version on the hub page. The full version scans every file in the workspace at once and exports one Markdown migration report with file, line, image and replacement, for $29 once with one licence key per person or team seat.</p></div><h2 style="font:600 19px/1.3 system-ui,sans-serif;margin:30px 0 10px;color:#1b1f24">15 seconds — what it actually does</h2><video controls muted playsinline preload="none" poster="/img/promo/sku321056_result_card.jpg" style="width:100%;max-width:360px;border-radius:10px;display:block;margin:0 auto"><source src="/media/sku321056_short.mp4" type="video/mp4"></video><h2 style="font:600 21px/1.3 system-ui,sans-serif;margin:34px 0 6px;color:#1b1f24">Questions people ask</h2><details style="border-bottom:1px solid #e6e9ed;padding:10px 0"><summary style="cursor:pointer;font:600 15px/1.4 system-ui,sans-serif;color:#1b1f24">What does Bitnami Image Gate check?</summary><p style="margin:8px 0 2px;font:400 14.5px/1.6 system-ui,sans-serif;color:#33404b">Bitnami Image Gate reads docker-compose files, Helm values files and Dockerfiles line by line and flags Bitnami image references that broke with the 2025-09-29 catalog change: versioned docker.io/bitnami tags that no longer pull, frozen bitnamilegacy images, Helm values that pin a removed tag, digest pins from the old catalog and allowInsecureImages overrides. Each finding shows the line and a fix.</p></details><details style="border-bottom:1px solid #e6e9ed;padding:10px 0"><summary style="cursor:pointer;font:600 15px/1.4 system-ui,sans-serif;color:#1b1f24">Who is Bitnami Image Gate for?</summary><p style="margin:8px 0 2px;font:400 14.5px/1.6 system-ui,sans-serif;color:#33404b">It is for DevOps engineers, platform teams and developers who run Bitnami containers or Bitnami Helm charts in Docker Compose, Kubernetes or CI pipelines. If a cluster still starts pods from docker.io/bitnami images with a version tag, the next fresh node or new CI runner can fail the pull with ImagePullBackOff, and this tool shows which lines cause it.</p></details><details style="border-bottom:1px solid #e6e9ed;padding:10px 0"><summary style="cursor:pointer;font:600 15px/1.4 system-ui,sans-serif;color:#1b1f24">Why not just ask a chatbot or run docker pull?</summary><p style="margin:8px 0 2px;font:400 14.5px/1.6 system-ui,sans-serif;color:#33404b">Chatbots trained before 2025-09-29 still suggest tags such as bitnami/postgresql:15 in new compose files. A local docker pull can succeed from the image cache, so the laptop test passes while a new Kubernetes node fails. Bitnami Image Gate checks the text of the file against the catalog change, so a cached image does not hide the broken reference.</p></details><details style="border-bottom:1px solid #e6e9ed;padding:10px 0"><summary style="cursor:pointer;font:600 15px/1.4 system-ui,sans-serif;color:#1b1f24">What is free and what does the paid version add?</summary><p style="margin:8px 0 2px;font:400 14.5px/1.6 system-ui,sans-serif;color:#33404b">The free version scans the open Dockerfile, Compose or Helm values file with all 7 rules and shows every finding with its fix, with no key and no account. The paid version, one payment of $29, scans every file in the workspace at once and exports one Markdown migration report listing file, line, image and replacement for the team.</p></details><details style="border-bottom:1px solid #e6e9ed;padding:10px 0"><summary style="cursor:pointer;font:600 15px/1.4 system-ui,sans-serif;color:#1b1f24">What does the alternative cost?</summary><p style="margin:8px 0 2px;font:400 14.5px/1.6 system-ui,sans-serif;color:#33404b">Keeping versioned Bitnami tags means licensing Bitnami Secure Images, a subscription reported at $50,000 to $72,000 per year by Minimus and iits-consulting. Mirroring images into your own registry or moving to upstream images costs engineering time instead. Bitnami Image Gate does not replace either path; it lists which lines need one of them.</p></details><details style="border-bottom:1px solid #e6e9ed;padding:10px 0"><summary style="cursor:pointer;font:600 15px/1.4 system-ui,sans-serif;color:#1b1f24">Why not just ask ChatGPT or another AI chat?</summary><p style="margin:8px 0 2px;font:400 14.5px/1.6 system-ui,sans-serif;color:#33404b">A general AI chat answers from training data with a cutoff date, cannot read your repository and names no rule version. Bitnami Image Gate: Compose, Helm, Dockerfile checks the file you open against 7 rules from a rule set dated 2026-09-27, and points at the exact line with the fix. For a filing, an audit or a client you need that dated result on your own files.</p></details><script type="application/ld+json" data-yj="yj-faq-ld">{"@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [{"@type": "Question", "name": "What does Bitnami Image Gate check?", "acceptedAnswer": {"@type": "Answer", "text": "Bitnami Image Gate reads docker-compose files, Helm values files and Dockerfiles line by line and flags Bitnami image references that broke with the 2025-09-29 catalog change: versioned docker.io/bitnami tags that no longer pull, frozen bitnamilegacy images, Helm values that pin a removed tag, digest pins from the old catalog and allowInsecureImages overrides. Each finding shows the line and a fix."}}, {"@type": "Question", "name": "Who is Bitnami Image Gate for?", "acceptedAnswer": {"@type": "Answer", "text": "It is for DevOps engineers, platform teams and developers who run Bitnami containers or Bitnami Helm charts in Docker Compose, Kubernetes or CI pipelines. If a cluster still starts pods from docker.io/bitnami images with a version tag, the next fresh node or new CI runner can fail the pull with ImagePullBackOff, and this tool shows which lines cause it."}}, {"@type": "Question", "name": "Why not just ask a chatbot or run docker pull?", "acceptedAnswer": {"@type": "Answer", "text": "Chatbots trained before 2025-09-29 still suggest tags such as bitnami/postgresql:15 in new compose files. A local docker pull can succeed from the image cache, so the laptop test passes while a new Kubernetes node fails. Bitnami Image Gate checks the text of the file against the catalog change, so a cached image does not hide the broken reference."}}, {"@type": "Question", "name": "What is free and what does the paid version add?", "acceptedAnswer": {"@type": "Answer", "text": "The free version scans the open Dockerfile, Compose or Helm values file with all 7 rules and shows every finding with its fix, with no key and no account. The paid version, one payment of $29, scans every file in the workspace at once and exports one Markdown migration report listing file, line, image and replacement for the team."}}, {"@type": "Question", "name": "What does the alternative cost?", "acceptedAnswer": {"@type": "Answer", "text": "Keeping versioned Bitnami tags means licensing Bitnami Secure Images, a subscription reported at $50,000 to $72,000 per year by Minimus and iits-consulting. Mirroring images into your own registry or moving to upstream images costs engineering time instead. Bitnami Image Gate does not replace either path; it lists which lines need one of them."}}, {"@type": "Question", "name": "Why not just ask ChatGPT or another AI chat?", "acceptedAnswer": {"@type": "Answer", "text": "A general AI chat answers from training data with a cutoff date, cannot read your repository and names no rule version. Bitnami Image Gate: Compose, Helm, Dockerfile checks the file you open against 7 rules from a rule set dated 2026-09-27, and points at the exact line with the fix. For a filing, an audit or a client you need that dated result on your own files."}}]}</script><div id="yj-ask" style="margin:36px 0 0;padding:18px 18px 16px;border:1px solid #e2e6ea;border-radius:10px;background:#fbfbfc"><h2 style="font:600 19px/1.3 system-ui,sans-serif;margin:0 0 4px;color:#1b1f24">Ask about this tool</h2><p style="font:400 13.5px/1.5 system-ui,sans-serif;margin:0 0 12px;color:#5b6570">One question, answered by the person who built it. Your email only if you want the answer sent.</p><form onsubmit="return yjAsk(event)" style="display:grid;gap:8px"><textarea name="question" required minlength="10" maxlength="2000" rows="3" placeholder="Your question" style="font:14px/1.5 system-ui,sans-serif;padding:10px;border:1px solid #cfd6dd;border-radius:6px"></textarea><div style="display:flex;gap:8px;flex-wrap:wrap"><input type="email" name="email" placeholder="Email (optional)" style="flex:1;min-width:200px;font:14px system-ui,sans-serif;padding:9px 10px;border:1px solid #cfd6dd;border-radius:6px"><button type="submit" style="font:600 14px system-ui,sans-serif;padding:9px 18px;border:0;border-radius:6px;background:#1b1f24;color:#fff;cursor:pointer">Send</button></div><p id="yj-ask-msg" style="font:13px system-ui,sans-serif;margin:2px 0 0;color:#0a6238;min-height:1em"></p></form><script>function yjAsk(e){e.preventDefault();var f=e.target,m=document.getElementById("yj-ask-msg");m.style.color="#0a6238";fetch(location.origin+"/api/ask",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sku:321056,slug:"bitnami-image-catalog-gate",lang:"en",question:f.question.value,email:f.email.value,page:location.pathname})}).then(function(r){if(!r.ok)throw 0;m.textContent="Thanks \u2014 noted. Answers land on this page and, if you left an email, in your inbox.";f.question.value="";}).catch(function(){m.style.color="#a8551f";m.textContent="Could not send. Please try again in a minute.";});return false;}</script></div></section><section class="yj-related" style="max-width:920px;margin:56px auto 40px;padding:0 20px"><h2 style="font:600 21px/1.3 system-ui,sans-serif;margin:0 0 6px;color:#1b1f24">Same job, next tool</h2><p style="font:400 14.5px/1.5 system-ui,sans-serif;margin:0 0 20px;color:#5b6570">Free in the browser. The full version is a one-time licence.</p><div style="display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:14px"><a class="yj-rel-c" href="https://getreadystack.com/tools/base-image-eol-lint"><span class="yj-rel-t">Base Image EOL Lint - Dockerfile and CI end-of-life check</span><span class="yj-rel-p">$29</span></a><a class="yj-rel-c" href="https://getreadystack.com/tools/docker-image-for-development"><span class="yj-rel-t">Docker Image for Development — Node.js 22 + TypeScript Dev Container with Post</span><span class="yj-rel-p">$19</span></a><a class="yj-rel-c" href="https://getreadystack.com/tools/docker-image-for-data-science"><span class="yj-rel-t">Docker Image for Data Science — Reproducible JupyterLab + MLflow Stack (Python</span><span class="yj-rel-p">$19</span></a><a class="yj-rel-c" href="https://getreadystack.com/tools/dotnet-eol-support-gate"><span class="yj-rel-t">.NET EOL & CRA Support Window Gate</span><span class="yj-rel-p">$29</span></a><a class="yj-rel-c" href="https://getreadystack.com/tools/age-gate-lint"><span class="yj-rel-t">Age Gate Lint — UK Online Safety Act</span><span class="yj-rel-p">$29</span></a><a class="yj-rel-c" href="https://getreadystack.com/tools/cms-0057-api-gate"><span class="yj-rel-t">CMS-0057 API Gate</span><span class="yj-rel-p">$29</span></a></div><style>.yj-rel-c{display:flex;flex-direction:column;gap:8px;padding:15px 16px;border:1px solid #e2e6ea;border-radius:6px;text-decoration:none;background:#fff}.yj-rel-c:hover{border-color:#b9c2cb;background:#fafbfc}.yj-rel-t{font:500 14.5px/1.42 system-ui,sans-serif;color:#1b1f24}.yj-rel-p{font:600 13px system-ui,sans-serif;color:#0a6238}</style></section></body> | |
| </html> | |