Ich verwende Docker Registry API, um zuerst alle Bilder in der Registrierung mit List repositories Methode aufzulisten und dann in die Bilder zu loopen, um eine map [string] [] string: image [] Tags mit Listing image tags Methode zu erstellen.Wie kann ich eine map [string] [] Zeichenfolge in Docker Registry API für Bildname mit seinen Tags erstellen?
ich versucht, dieses
func GetImages(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Access-Control-Allow-Origin", "*")
res, err := http.Get(fmt.Sprintf("%s/%s", sconf.RegistryConf.url, sconf.RegistryConf.listrepo))
if err != nil {
w.WriteHeader(500)
log.Errorf("Could not get repositories: %s", err)
return
}
log.Info("Registry accessed")
js, err := ioutil.ReadAll(res.Body)
if err != nil {
w.WriteHeader(500)
log.Errorf("Could not read response: %s", err)
return
}
log.Infof("response read successfully")
var Repositories map[string][]string
err = json.Unmarshal(js, &Repositories)
if err != nil {
w.WriteHeader(500)
log.Errorf("Could not transform json to map: %s", err)
return
}
res.Body.Close()
if err != nil {
log.Warnf("Could not close body")
}
var Images []string
Images = Repositories["repositories"]
//map_image_tags := make(map[string][]string)
var map_image_tags map[string]interface{}
map_images_tags := make(map[string][]string)
log.Debugf("OK")
for i := 0; i < len(Images); i++ {
log.Debugf("OK")
res2, err := http.Get(fmt.Sprintf("%s/v2/%s/tags/lists", sconf.RegistryConf.url, Images[i]))
if err != nil {
w.WriteHeader(500)
log.Errorf("could not get tags: %s", err)
return
}
log.Debugf("OK")
js2, err := ioutil.ReadAll(res2.Body)
if err != nil {
w.WriteHeader(500)
log.Errorf("could not read body: %s", err)
return
}
log.Debugf("OK")
log.Debugf("%v", []byte(js2))
err = json.Unmarshal(js2, &map_image_tags)
log.Debugf("map:", map_image_tags)
log.Debugf("OK")
if err != nil {
w.WriteHeader(500)
log.Errorf("could not unmarshal json: %s", err)
return
}
log.Debugf("OK")
//map_images_tags[map_image_tags["name"]] = map_image_tags["tags"]
}
response, err := json.MarshalIndent(map_images_tags, "", " ")
if err != nil {
w.WriteHeader(500)
log.Errorf("Could not transform map to json: %s", err)
return
}
log.Infof("Get Registry Images: success")
fmt.Fprintf(w, string(response))
}
Aber seine nicht funktioniert, kann meine Fehler jemand zeigen Sie mir oder mir zeigen, wie ich dies von Grund auf neu machen kann?
Können Sie bitte auf "es funktioniert nicht" bitte? – johnharris85
Es wäre wahrscheinlich einfacher, wenn Sie einige geeignete Typen deklarierten, anstatt sich auf 'interface {}' zu verlassen. Gibt es einen Grund, warum du das nicht versucht hast? – JimB
@JimB Vielen Dank, es hat jetzt funktioniert –