{"id":25,"date":"2026-04-18T18:13:32","date_gmt":"2026-04-18T16:13:32","guid":{"rendered":"https:\/\/wenisch.tech\/portal\/?p=25"},"modified":"2026-05-10T18:22:23","modified_gmt":"2026-05-10T16:22:23","slug":"validating-docker-image-pullability-without-the-docker-cli-or-socket","status":"publish","type":"post","link":"https:\/\/wenisch.tech\/portal\/validating-docker-image-pullability-without-the-docker-cli-or-socket\/","title":{"rendered":"Validating Docker Image Pullability without the Docker cli or socket"},"content":{"rendered":"\n<figure class=\"wp-block-image alignwide size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/wenisch.tech\/portal\/wp-content\/uploads\/2026\/04\/image-1024x576.png\" alt=\"\" class=\"wp-image-28\" srcset=\"https:\/\/wenisch.tech\/portal\/wp-content\/uploads\/2026\/04\/image-1024x576.png 1024w, https:\/\/wenisch.tech\/portal\/wp-content\/uploads\/2026\/04\/image-300x169.png 300w, https:\/\/wenisch.tech\/portal\/wp-content\/uploads\/2026\/04\/image-768x432.png 768w, https:\/\/wenisch.tech\/portal\/wp-content\/uploads\/2026\/04\/image-1536x864.png 1536w, https:\/\/wenisch.tech\/portal\/wp-content\/uploads\/2026\/04\/image.png 1672w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"is-style-text-subtitle is-style-text-subtitle--1\">When you&#8217;re developoing an uptime monitor like <a href=\"https:\/\/kairos.wenisch.tech\">Kaiors<\/a>,  or in general checking whether a container image is actually pullable is a surprisingly deep problem. The naive approach \u2014 spinning up a Docker daemon and running\u00a0<code>docker pull<\/code>\u00a0\u2014 is heavy, requires socket access, and introduces a serious security risk in most environments. Kairos solves this differently: by speaking directly to the\u00a0<strong>OCI Distribution API<\/strong>, it can validate image pullability with nothing but plain HTTPS calls.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"how-docker-pull-actually-works\">How Docker Pull Actually Works<\/h2>\n\n\n\n<p>Before skipping the CLI, it helps to understand what&nbsp;<code>docker pull<\/code>&nbsp;does under the hood. Every container registry \u2014 Docker Hub, GitHub Container Registry, your self-hosted Harbor or JFrog Artifactory \u2014 implements the&nbsp;<a rel=\"noreferrer noopener\" target=\"_blank\" href=\"https:\/\/github.com\/opencontainers\/distribution-spec\">OCI Distribution Specification<\/a>. A pull is really just a sequence of three HTTP steps:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Authenticate<\/strong>&nbsp;\u2014 obtain a bearer token from the registry&#8217;s auth endpoint<\/li>\n\n\n\n<li><strong>Fetch the manifest<\/strong>&nbsp;\u2014 retrieve the image manifest by name and tag<\/li>\n\n\n\n<li><strong>Download blobs<\/strong>&nbsp;\u2014 pull each layer referenced in the manifest<\/li>\n<\/ol>\n\n\n\n<p>To&nbsp;<em>validate pullability<\/em>, you only need steps 1 and 2. If you can successfully authenticate and retrieve the manifest, the image exists, the credentials work, and the layers are reachable. You never need to actually download gigabytes of layer data.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"step-1--authentication\">Step 1 \u2014 Authentication<\/h2>\n\n\n\n<p>Most registries use&nbsp;<strong>token-based authentication<\/strong>&nbsp;described in the Docker Registry Auth Specification. When you hit the manifest endpoint unauthenticated, the registry responds with:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">text<code>HTTP 401 Unauthorized\nWWW-Authenticate: Bearer realm=\"https:\/\/auth.docker.io\/token\",service=\"registry.docker.io\",scope=\"repository:library\/nginx:pull\"<\/code><\/pre>\n\n\n\n<p>You parse the&nbsp;<code>WWW-Authenticate<\/code>&nbsp;header and make a token request:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><code>GET https:\/\/auth.docker.io\/token\n  ?service=registry.docker.io\n  &amp;scope=repository:library\/nginx:pull<\/code><\/code><\/pre>\n\n\n\n<p>For private registries, add Basic credentials:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><code>GET https:\/\/registry.example.com\/token\n  ?service=registry.example.com\n  &amp;scope=repository:myapp\/backend:pull\nAuthorization: Basic base64(user:password)<\/code><\/code><\/pre>\n\n\n\n<p>The response is a short-lived&nbsp;<strong>Bearer token<\/strong>&nbsp;you attach to all subsequent requests.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"step-2--fetching-the-manifest\">Step 2 \u2014 Fetching the Manifest<\/h2>\n\n\n\n<p>With the token in hand, request the image manifest:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><code>GET \/v2\/{name}\/manifests\/{reference}\nAuthorization: Bearer &lt;token&gt;\nAccept: application\/vnd.oci.image.manifest.v1+json,\n        application\/vnd.docker.distribution.manifest.v2+json,\n        application\/vnd.docker.distribution.manifest.list.v2+json<\/code><\/code><\/pre>\n\n\n\n<p>A&nbsp;<code>200 OK<\/code>&nbsp;response means the image exists and is pullable. That&#8217;s all you need. The response body contains the full manifest \u2014 digest, layers, config \u2014 but you don&#8217;t need to download any of it for a health check.<\/p>\n\n\n\n<p>The important&nbsp;<code>Accept<\/code>&nbsp;headers tell the registry you support both&nbsp;<strong>OCI manifests<\/strong>&nbsp;and&nbsp;<strong>Docker manifest lists<\/strong>&nbsp;(multi-arch images). Without them, some registries return a legacy v1 manifest or a 404.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"handling-multi-architecture-images\">Handling Multi-Architecture Images<\/h2>\n\n\n\n<p>Modern images are often&nbsp;<strong>manifest lists<\/strong>&nbsp;(also called &#8220;fat manifests&#8221;) that bundle multiple architecture-specific images under one tag. A manifest list response looks like:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><code>{\n  \"schemaVersion\": 2,\n  \"mediaType\": \"application\/vnd.docker.distribution.manifest.list.v2+json\",\n  \"manifests\": &#91;\n    { \"platform\": { \"os\": \"linux\", \"architecture\": \"amd64\" }, \"digest\": \"sha256:abc...\" },\n    { \"platform\": { \"os\": \"linux\", \"architecture\": \"arm64\" }, \"digest\": \"sha256:def...\" }\n  ]\n}<\/code><\/code><\/pre>\n\n\n\n<p>For a pullability check, receiving this response is already a success \u2014 the tag is valid and resolvable. If you want to validate a specific architecture, you make a second manifest request using the digest from the relevant entry.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"step-3--no-docker-socket-needed\">Step 3 \u2014 No Docker Socket Needed<\/h2>\n\n\n\n<p>The entire flow above is pure HTTPS. Kairos implements it in Java without ever touching a Docker socket or spawning a subprocess. The key advantages:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>No privileged access<\/strong>&nbsp;\u2014 no need to mount&nbsp;<code>\/var\/run\/docker.sock<\/code>&nbsp;into your pod<\/li>\n\n\n\n<li><strong>No daemon overhead<\/strong>&nbsp;\u2014 no Docker or containerd process running just for checks<\/li>\n\n\n\n<li><strong>Works anywhere<\/strong>&nbsp;\u2014 runs inside a distroless container, a serverless function, or a restricted Kubernetes namespace<\/li>\n\n\n\n<li><strong>Fast<\/strong>&nbsp;\u2014 a manifest check typically completes in under 500 ms, even for remote registries<\/li>\n\n\n\n<li><strong>Auditable<\/strong>&nbsp;\u2014 standard HTTPS traffic, fully loggable by any proxy or WAF<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"putting-it-together--the-full-flow\">Putting It Together \u2014 The Full Flow<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code><code>1.  GET \/v2\/{image}\/manifests\/{tag}        \u2192 401 + WWW-Authenticate header\n2.  GET {realm}?service=...&amp;scope=...      \u2192 { \"token\": \"eyJ...\" }\n3.  GET \/v2\/{image}\/manifests\/{tag}        \u2192 200 OK  \u2705  image is pullable\n                Authorization: Bearer eyJ...<\/code><\/code><\/pre>\n\n\n\n<p>If step 3 returns:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>200<\/code>&nbsp;\u2014 image exists and is pullable \u2705<\/li>\n\n\n\n<li><code>401<\/code>&nbsp;\u2014 credentials are wrong or missing \u274c<\/li>\n\n\n\n<li><code>404<\/code>&nbsp;\u2014 image or tag does not exist \u274c<\/li>\n\n\n\n<li><code>5xx<\/code>&nbsp;\u2014 registry is down or degraded \u26a0\ufe0f<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"how-kairos-uses-this\">How Kairos Uses This<\/h2>\n\n\n\n<p>Kairos wraps this exact flow into a scheduled availability check. You configure a Docker image resource with the registry URL, image name, tag, and optional credentials. On each check interval, Kairos runs the three-step HTTPS flow above and records the result \u2014 available or unavailable \u2014 with a timestamp. The result feeds into the same uptime timeline and Prometheus metrics as HTTP checks, giving you a unified view of both service availability and image availability in one dashboard.<\/p>\n\n\n\n<p>You can explore this feature and add your first image check at&nbsp;<a rel=\"noreferrer noopener\" target=\"_blank\" href=\"https:\/\/kairos.wenisch.tech\/\">kairos.wenisch.tech<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>When you&#8217;re running an uptime monitor, checking whether a container image is actually pullable is a surprisingly deep problem. The naive approach \u2014 spinning up a Docker daemon and running\u00a0docker pull\u00a0\u2014 is heavy, requires socket access, and introduces a serious security risk in most environments. Kairos solves this differently: by speaking directly to the\u00a0OCI Distribution API, it can validate image pullability with nothing but plain HTTPS calls.<\/p>\n","protected":false},"author":1,"featured_media":28,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9],"tags":[],"class_list":["post-25","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kairos"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Validating Docker Image Pullability without the Docker cli or socket - wenisch.tech<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/wenisch.tech\/portal\/validating-docker-image-pullability-without-the-docker-cli-or-socket\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Validating Docker Image Pullability without the Docker cli or socket - wenisch.tech\" \/>\n<meta property=\"og:description\" content=\"When you&#039;re running an uptime monitor, checking whether a container image is actually pullable is a surprisingly deep problem. The naive approach \u2014 spinning up a Docker daemon and running\u00a0docker pull\u00a0\u2014 is heavy, requires socket access, and introduces a serious security risk in most environments. Kairos solves this differently: by speaking directly to the\u00a0OCI Distribution API, it can validate image pullability with nothing but plain HTTPS calls.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/wenisch.tech\/portal\/validating-docker-image-pullability-without-the-docker-cli-or-socket\/\" \/>\n<meta property=\"og:site_name\" content=\"wenisch.tech\" \/>\n<meta property=\"article:published_time\" content=\"2026-04-18T16:13:32+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-05-10T16:22:23+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/wenisch.tech\/portal\/wp-content\/uploads\/2026\/04\/image.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1672\" \/>\n\t<meta property=\"og:image:height\" content=\"941\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"jfwenisch\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"jfwenisch\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/wenisch.tech\\\/portal\\\/validating-docker-image-pullability-without-the-docker-cli-or-socket\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/wenisch.tech\\\/portal\\\/validating-docker-image-pullability-without-the-docker-cli-or-socket\\\/\"},\"author\":{\"name\":\"jfwenisch\",\"@id\":\"https:\\\/\\\/wenisch.tech\\\/portal\\\/#\\\/schema\\\/person\\\/e23d7cf238a70d9830035faaf1c09600\"},\"headline\":\"Validating Docker Image Pullability without the Docker cli or socket\",\"datePublished\":\"2026-04-18T16:13:32+00:00\",\"dateModified\":\"2026-05-10T16:22:23+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/wenisch.tech\\\/portal\\\/validating-docker-image-pullability-without-the-docker-cli-or-socket\\\/\"},\"wordCount\":647,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/wenisch.tech\\\/portal\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/wenisch.tech\\\/portal\\\/validating-docker-image-pullability-without-the-docker-cli-or-socket\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/wenisch.tech\\\/portal\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/image.png\",\"articleSection\":[\"Kairos\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/wenisch.tech\\\/portal\\\/validating-docker-image-pullability-without-the-docker-cli-or-socket\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/wenisch.tech\\\/portal\\\/validating-docker-image-pullability-without-the-docker-cli-or-socket\\\/\",\"url\":\"https:\\\/\\\/wenisch.tech\\\/portal\\\/validating-docker-image-pullability-without-the-docker-cli-or-socket\\\/\",\"name\":\"Validating Docker Image Pullability without the Docker cli or socket - wenisch.tech\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/wenisch.tech\\\/portal\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/wenisch.tech\\\/portal\\\/validating-docker-image-pullability-without-the-docker-cli-or-socket\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/wenisch.tech\\\/portal\\\/validating-docker-image-pullability-without-the-docker-cli-or-socket\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/wenisch.tech\\\/portal\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/image.png\",\"datePublished\":\"2026-04-18T16:13:32+00:00\",\"dateModified\":\"2026-05-10T16:22:23+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/wenisch.tech\\\/portal\\\/validating-docker-image-pullability-without-the-docker-cli-or-socket\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/wenisch.tech\\\/portal\\\/validating-docker-image-pullability-without-the-docker-cli-or-socket\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/wenisch.tech\\\/portal\\\/validating-docker-image-pullability-without-the-docker-cli-or-socket\\\/#primaryimage\",\"url\":\"https:\\\/\\\/wenisch.tech\\\/portal\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/image.png\",\"contentUrl\":\"https:\\\/\\\/wenisch.tech\\\/portal\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/image.png\",\"width\":1672,\"height\":941,\"caption\":\"Validating Docker Image Pullability without the Docker cli or socket\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/wenisch.tech\\\/portal\\\/validating-docker-image-pullability-without-the-docker-cli-or-socket\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Start\",\"item\":\"https:\\\/\\\/wenisch.tech\\\/portal\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Validating Docker Image Pullability without the Docker cli or socket\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/wenisch.tech\\\/portal\\\/#website\",\"url\":\"https:\\\/\\\/wenisch.tech\\\/portal\\\/\",\"name\":\"wenisch.tech\",\"description\":\"Open\u2011source tooling created for scalable, maintainable infrastructure operations. Modular components and automation patterns designed to remain clear, predictable, and easy to integrate.\",\"publisher\":{\"@id\":\"https:\\\/\\\/wenisch.tech\\\/portal\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/wenisch.tech\\\/portal\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/wenisch.tech\\\/portal\\\/#organization\",\"name\":\"wenisch.tech\",\"url\":\"https:\\\/\\\/wenisch.tech\\\/portal\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/wenisch.tech\\\/portal\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/wenisch.tech\\\/portal\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/favicon.png\",\"contentUrl\":\"https:\\\/\\\/wenisch.tech\\\/portal\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/favicon.png\",\"width\":512,\"height\":512,\"caption\":\"wenisch.tech\"},\"image\":{\"@id\":\"https:\\\/\\\/wenisch.tech\\\/portal\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/wenisch.tech\\\/portal\\\/#\\\/schema\\\/person\\\/e23d7cf238a70d9830035faaf1c09600\",\"name\":\"jfwenisch\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/cafba998b632b777685e5be03d987b26338bca1b39e2f1b5f005995713875592?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/cafba998b632b777685e5be03d987b26338bca1b39e2f1b5f005995713875592?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/cafba998b632b777685e5be03d987b26338bca1b39e2f1b5f005995713875592?s=96&d=mm&r=g\",\"caption\":\"jfwenisch\"},\"sameAs\":[\"https:\\\/\\\/wenisch.tech\\\/portal\"],\"url\":\"https:\\\/\\\/wenisch.tech\\\/portal\\\/author\\\/jfwenisch\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Validating Docker Image Pullability without the Docker cli or socket - wenisch.tech","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/wenisch.tech\/portal\/validating-docker-image-pullability-without-the-docker-cli-or-socket\/","og_locale":"en_US","og_type":"article","og_title":"Validating Docker Image Pullability without the Docker cli or socket - wenisch.tech","og_description":"When you're running an uptime monitor, checking whether a container image is actually pullable is a surprisingly deep problem. The naive approach \u2014 spinning up a Docker daemon and running\u00a0docker pull\u00a0\u2014 is heavy, requires socket access, and introduces a serious security risk in most environments. Kairos solves this differently: by speaking directly to the\u00a0OCI Distribution API, it can validate image pullability with nothing but plain HTTPS calls.","og_url":"https:\/\/wenisch.tech\/portal\/validating-docker-image-pullability-without-the-docker-cli-or-socket\/","og_site_name":"wenisch.tech","article_published_time":"2026-04-18T16:13:32+00:00","article_modified_time":"2026-05-10T16:22:23+00:00","og_image":[{"width":1672,"height":941,"url":"https:\/\/wenisch.tech\/portal\/wp-content\/uploads\/2026\/04\/image.png","type":"image\/png"}],"author":"jfwenisch","twitter_card":"summary_large_image","twitter_misc":{"Written by":"jfwenisch","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/wenisch.tech\/portal\/validating-docker-image-pullability-without-the-docker-cli-or-socket\/#article","isPartOf":{"@id":"https:\/\/wenisch.tech\/portal\/validating-docker-image-pullability-without-the-docker-cli-or-socket\/"},"author":{"name":"jfwenisch","@id":"https:\/\/wenisch.tech\/portal\/#\/schema\/person\/e23d7cf238a70d9830035faaf1c09600"},"headline":"Validating Docker Image Pullability without the Docker cli or socket","datePublished":"2026-04-18T16:13:32+00:00","dateModified":"2026-05-10T16:22:23+00:00","mainEntityOfPage":{"@id":"https:\/\/wenisch.tech\/portal\/validating-docker-image-pullability-without-the-docker-cli-or-socket\/"},"wordCount":647,"commentCount":0,"publisher":{"@id":"https:\/\/wenisch.tech\/portal\/#organization"},"image":{"@id":"https:\/\/wenisch.tech\/portal\/validating-docker-image-pullability-without-the-docker-cli-or-socket\/#primaryimage"},"thumbnailUrl":"https:\/\/wenisch.tech\/portal\/wp-content\/uploads\/2026\/04\/image.png","articleSection":["Kairos"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/wenisch.tech\/portal\/validating-docker-image-pullability-without-the-docker-cli-or-socket\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/wenisch.tech\/portal\/validating-docker-image-pullability-without-the-docker-cli-or-socket\/","url":"https:\/\/wenisch.tech\/portal\/validating-docker-image-pullability-without-the-docker-cli-or-socket\/","name":"Validating Docker Image Pullability without the Docker cli or socket - wenisch.tech","isPartOf":{"@id":"https:\/\/wenisch.tech\/portal\/#website"},"primaryImageOfPage":{"@id":"https:\/\/wenisch.tech\/portal\/validating-docker-image-pullability-without-the-docker-cli-or-socket\/#primaryimage"},"image":{"@id":"https:\/\/wenisch.tech\/portal\/validating-docker-image-pullability-without-the-docker-cli-or-socket\/#primaryimage"},"thumbnailUrl":"https:\/\/wenisch.tech\/portal\/wp-content\/uploads\/2026\/04\/image.png","datePublished":"2026-04-18T16:13:32+00:00","dateModified":"2026-05-10T16:22:23+00:00","breadcrumb":{"@id":"https:\/\/wenisch.tech\/portal\/validating-docker-image-pullability-without-the-docker-cli-or-socket\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/wenisch.tech\/portal\/validating-docker-image-pullability-without-the-docker-cli-or-socket\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/wenisch.tech\/portal\/validating-docker-image-pullability-without-the-docker-cli-or-socket\/#primaryimage","url":"https:\/\/wenisch.tech\/portal\/wp-content\/uploads\/2026\/04\/image.png","contentUrl":"https:\/\/wenisch.tech\/portal\/wp-content\/uploads\/2026\/04\/image.png","width":1672,"height":941,"caption":"Validating Docker Image Pullability without the Docker cli or socket"},{"@type":"BreadcrumbList","@id":"https:\/\/wenisch.tech\/portal\/validating-docker-image-pullability-without-the-docker-cli-or-socket\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Start","item":"https:\/\/wenisch.tech\/portal\/"},{"@type":"ListItem","position":2,"name":"Validating Docker Image Pullability without the Docker cli or socket"}]},{"@type":"WebSite","@id":"https:\/\/wenisch.tech\/portal\/#website","url":"https:\/\/wenisch.tech\/portal\/","name":"wenisch.tech","description":"Open\u2011source tooling created for scalable, maintainable infrastructure operations. Modular components and automation patterns designed to remain clear, predictable, and easy to integrate.","publisher":{"@id":"https:\/\/wenisch.tech\/portal\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/wenisch.tech\/portal\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/wenisch.tech\/portal\/#organization","name":"wenisch.tech","url":"https:\/\/wenisch.tech\/portal\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/wenisch.tech\/portal\/#\/schema\/logo\/image\/","url":"https:\/\/wenisch.tech\/portal\/wp-content\/uploads\/2026\/05\/favicon.png","contentUrl":"https:\/\/wenisch.tech\/portal\/wp-content\/uploads\/2026\/05\/favicon.png","width":512,"height":512,"caption":"wenisch.tech"},"image":{"@id":"https:\/\/wenisch.tech\/portal\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/wenisch.tech\/portal\/#\/schema\/person\/e23d7cf238a70d9830035faaf1c09600","name":"jfwenisch","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/cafba998b632b777685e5be03d987b26338bca1b39e2f1b5f005995713875592?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/cafba998b632b777685e5be03d987b26338bca1b39e2f1b5f005995713875592?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/cafba998b632b777685e5be03d987b26338bca1b39e2f1b5f005995713875592?s=96&d=mm&r=g","caption":"jfwenisch"},"sameAs":["https:\/\/wenisch.tech\/portal"],"url":"https:\/\/wenisch.tech\/portal\/author\/jfwenisch\/"}]}},"_links":{"self":[{"href":"https:\/\/wenisch.tech\/portal\/wp-json\/wp\/v2\/posts\/25","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wenisch.tech\/portal\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wenisch.tech\/portal\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wenisch.tech\/portal\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wenisch.tech\/portal\/wp-json\/wp\/v2\/comments?post=25"}],"version-history":[{"count":2,"href":"https:\/\/wenisch.tech\/portal\/wp-json\/wp\/v2\/posts\/25\/revisions"}],"predecessor-version":[{"id":30,"href":"https:\/\/wenisch.tech\/portal\/wp-json\/wp\/v2\/posts\/25\/revisions\/30"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wenisch.tech\/portal\/wp-json\/wp\/v2\/media\/28"}],"wp:attachment":[{"href":"https:\/\/wenisch.tech\/portal\/wp-json\/wp\/v2\/media?parent=25"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wenisch.tech\/portal\/wp-json\/wp\/v2\/categories?post=25"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wenisch.tech\/portal\/wp-json\/wp\/v2\/tags?post=25"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}