Skip to content

Instantly share code, notes, and snippets.

@dmage
Created December 14, 2021 22:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dmage/72bb7b270b76a5faa5ff2a4698a2f27d to your computer and use it in GitHub Desktop.
Save dmage/72bb7b270b76a5faa5ff2a4698a2f27d to your computer and use it in GitHub Desktop.
Broken registry
package main
import (
"fmt"
"log"
"net/http"
)
const (
alpineDigest = "sha256:e7d88de73db3d3fd9b2d63aa7f447a10fd0220b7cbf39803c803f2af9ba256b3"
alpineManifest = `{
"schemaVersion": 2,
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"config": {
"mediaType": "application/vnd.docker.container.image.v1+json",
"size": 1471,
"digest": "sha256:c059bfaa849c4d8e4aecaeb3a10c2d9b3d85f5165c66ad3a4d937758128c4d18"
},
"layers": [
{
"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
"size": 2818413,
"digest": "sha256:59bf1c3509f33515622619af21ed55bbe26d24913cedbca106468a5fb37a50c3"
}
]
}`
alpineConfigDigest = "sha256:c059bfaa849c4d8e4aecaeb3a10c2d9b3d85f5165c66ad3a4d937758128c4d18"
alpineConfig = `{"architecture":"amd64","config":{"Hostname":"","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"],"Cmd":["/bin/sh"],"Image":"sha256:b747534ae29d08c0c84cc4326caf04e873c6d02bb67cd9c7644be2b4fa8d2f31","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":null},"container":"4292e8ed2ef2b6dc4bbaf8e1cda0cb5f95b96adc4aa2da3d15181b54d07a0b34","container_config":{"Hostname":"4292e8ed2ef2","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"],"Cmd":["/bin/sh","-c","#(nop) ","CMD [\"/bin/sh\"]"],"Image":"sha256:b747534ae29d08c0c84cc4326caf04e873c6d02bb67cd9c7644be2b4fa8d2f31","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":{}},"created":"2021-11-24T20:19:40.483367546Z","docker_version":"20.10.7","history":[{"created":"2021-11-24T20:19:40.199700946Z","created_by":"/bin/sh -c #(nop) ADD file:9233f6f2237d79659a9521f7e390df217cec49f1a8aa3a12147bbca1956acdb9 in / "},{"created":"2021-11-24T20:19:40.483367546Z","created_by":"/bin/sh -c #(nop) CMD [\"/bin/sh\"]","empty_layer":true}],"os":"linux","rootfs":{"type":"layers","diff_ids":["sha256:8d3ac3489996423f53d6087c81180006263b79f206d3fdec9e66f0e27ceb8759"]}}`
)
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
log.Printf("%s - %s %s", r.RemoteAddr, r.Method, r.URL)
if r.URL.Path == "/v2/" {
w.Header().Set("Content-Type", "application/json")
fmt.Fprint(w, "{}\n")
return
}
if r.URL.Path == "/v2/foo/manifests/latest" || r.URL.Path == "/v2/foo/manifests/"+alpineDigest {
w.Header().Set("Content-Type", "application/vnd.docker.distribution.manifest.v2+json")
fmt.Fprint(w, alpineManifest)
return
}
if r.URL.Path == "/v2/foo/blobs/"+alpineConfigDigest {
w.Header().Set("Content-Type", "application/vnd.docker.container.image.v1+json")
fmt.Fprint(w, alpineConfig)
return
}
http.Error(w, "Service Unavailable", http.StatusServiceUnavailable)
})
http.ListenAndServe(":8080", nil)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment