Browse code

docker save: raw json

Docker-DCO-1.1-Signed-off-by: Vincent Batts <vbatts@redhat.com> (github: vbatts)

Vincent Batts authored on 2014/06/17 22:05:29
Showing 2 changed files
... ...
@@ -1,7 +1,6 @@
1 1
 package graph
2 2
 
3 3
 import (
4
-	"encoding/json"
5 4
 	"io"
6 5
 
7 6
 	"github.com/dotcloud/docker/engine"
... ...
@@ -136,7 +135,7 @@ func (s *TagStore) CmdLookup(job *engine.Job) engine.Status {
136 136
 	name := job.Args[0]
137 137
 	if image, err := s.LookupImage(name); err == nil && image != nil {
138 138
 		if job.GetenvBool("raw") {
139
-			b, err := json.Marshal(image)
139
+			b, err := image.RawJson()
140 140
 			if err != nil {
141 141
 				return job.Error(err)
142 142
 			}
... ...
@@ -149,6 +149,22 @@ func jsonPath(root string) string {
149 149
 	return path.Join(root, "json")
150 150
 }
151 151
 
152
+func (img *Image) RawJson() ([]byte, error) {
153
+	root, err := img.root()
154
+	if err != nil {
155
+		return nil, fmt.Errorf("Failed to get root for image %s: %s", img.ID, err)
156
+	}
157
+	fh, err := os.Open(jsonPath(root))
158
+	if err != nil {
159
+		return nil, fmt.Errorf("Failed to open json for image %s: %s", img.ID, err)
160
+	}
161
+	buf, err := ioutil.ReadAll(fh)
162
+	if err != nil {
163
+		return nil, fmt.Errorf("Failed to read json for image %s: %s", img.ID, err)
164
+	}
165
+	return buf, nil
166
+}
167
+
152 168
 // TarLayer returns a tar archive of the image's filesystem layer.
153 169
 func (img *Image) TarLayer() (arch archive.Archive, err error) {
154 170
 	if img.graph == nil {