def canonical_image_details(registry, namespace, image):
start = time.time()
if ":" in image:
(image, tag) = image.split(":")
else:
tag = "latest"
result = {}
error = None
try:
if registry == app.config["DEFAULT_REGISTRY"]:
dii = DockerHubImageInspector(namespace + "/" + image, tag)
else:
dii = DockerImageInspector(registry, namespace + "/" + image, tag)
result = {
"schema_version": dii.manifest["schemaVersion"],
"name": dii.manifest["name"],
"tag": dii.manifest["tag"],
"architecture": dii.manifest["architecture"],
"create_date": None,
"history_length": len(dii.manifest["history"]),
"num_layers": len(dii.layers),
"config": json.loads(dii.manifest["history"][0]["v1Compatibility"])["container_config"],
"layers": [],
"image_size": 0
}
if dii.create_date is not None:
result["create_date"] = dii.create_date.isoformat()
for l in dii.layers:
bytesize = dii.get_layer_size(l)
if bytesize is not None:
result["image_size"] += bytesize
result["layers"].append({"digest": l, "size": bytesize})
except HTTPError, e:
if "404" in str(e):
abort(404)
else:
error = str(e)
except ConnectTimeout, e:
error = str(e)
except Exception, e:
error = str(e)
duration = time.time() - start
return jsonify(metadata=result, duration=duration, error=error)
评论列表
文章目录