| ... | ... |
@@ -644,6 +644,9 @@ func postContainersStart(srv *Server, version float64, w http.ResponseWriter, r |
| 644 | 644 |
} |
| 645 | 645 |
name := vars["name"] |
| 646 | 646 |
job := srv.Eng.Job("start", name)
|
| 647 |
+ if err := job.ImportEnv(HostConfig{}); err != nil {
|
|
| 648 |
+ return fmt.Errorf("Couldn't initialize host configuration")
|
|
| 649 |
+ } |
|
| 647 | 650 |
// allow a nil body for backwards compatibility |
| 648 | 651 |
if r.Body != nil {
|
| 649 | 652 |
if matchesContentType(r.Header.Get("Content-Type"), "application/json") {
|
| ... | ... |
@@ -149,10 +149,22 @@ func (job *Job) DecodeEnv(src io.Reader) error {
|
| 149 | 149 |
} |
| 150 | 150 |
|
| 151 | 151 |
func (job *Job) EncodeEnv(dst io.Writer) error {
|
| 152 |
- return json.NewEncoder(dst).Encode(job.Environ()) |
|
| 152 |
+ m := make(map[string]interface{})
|
|
| 153 |
+ for k, v := range job.Environ() {
|
|
| 154 |
+ var val interface{}
|
|
| 155 |
+ if err := json.Unmarshal([]byte(v), &val); err == nil {
|
|
| 156 |
+ m[k] = val |
|
| 157 |
+ } else {
|
|
| 158 |
+ m[k] = v |
|
| 159 |
+ } |
|
| 160 |
+ } |
|
| 161 |
+ if err := json.NewEncoder(dst).Encode(&m); err != nil {
|
|
| 162 |
+ return err |
|
| 163 |
+ } |
|
| 164 |
+ return nil |
|
| 153 | 165 |
} |
| 154 | 166 |
|
| 155 |
-func (job *Job) ExportEnv(dst interface{}) error {
|
|
| 167 |
+func (job *Job) ExportEnv(dst interface{}) (err error) {
|
|
| 156 | 168 |
var buf bytes.Buffer |
| 157 | 169 |
if err := job.EncodeEnv(&buf); err != nil {
|
| 158 | 170 |
return err |