mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
Merge pull request #1943 from dotcloud/1940-prevent_crash_parseNat_build-fix
Abort build if mergeConfig returns an error and fix duplicate error message
This commit is contained in:
commit
4196c704f0
4 changed files with 37 additions and 6 deletions
3
api.go
3
api.go
|
@ -908,8 +908,7 @@ func postBuild(srv *Server, version float64, w http.ResponseWriter, r *http.Requ
|
||||||
b := NewBuildFile(srv, utils.NewWriteFlusher(w), !suppressOutput, !noCache, rm)
|
b := NewBuildFile(srv, utils.NewWriteFlusher(w), !suppressOutput, !noCache, rm)
|
||||||
id, err := b.Build(context)
|
id, err := b.Build(context)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Fprintf(w, "Error build: %s\n", err)
|
return fmt.Errorf("Error build: %s", err)
|
||||||
return err
|
|
||||||
}
|
}
|
||||||
if repoName != "" {
|
if repoName != "" {
|
||||||
srv.runtime.repositories.Set(repoName, tag, id, false)
|
srv.runtime.repositories.Set(repoName, tag, id, false)
|
||||||
|
|
|
@ -283,7 +283,9 @@ func (runtime *Runtime) Create(config *Config) (*Container, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if img.Config != nil {
|
if img.Config != nil {
|
||||||
MergeConfig(config, img.Config)
|
if err := MergeConfig(config, img.Config); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(config.Entrypoint) != 0 && config.Cmd == nil {
|
if len(config.Entrypoint) != 0 && config.Cmd == nil {
|
||||||
|
|
|
@ -205,6 +205,29 @@ func TestRuntimeCreate(t *testing.T) {
|
||||||
if err == nil {
|
if err == nil {
|
||||||
t.Fatal("Builder.Create should throw an error when Cmd is empty")
|
t.Fatal("Builder.Create should throw an error when Cmd is empty")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
config := &Config{
|
||||||
|
Image: GetTestImage(runtime).ID,
|
||||||
|
Cmd: []string{"/bin/ls"},
|
||||||
|
PortSpecs: []string{"80"},
|
||||||
|
}
|
||||||
|
container, err = runtime.Create(config)
|
||||||
|
|
||||||
|
image, err := runtime.Commit(container, "testrepo", "testtag", "", "", config)
|
||||||
|
if err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = runtime.Create(
|
||||||
|
&Config{
|
||||||
|
Image: image.ID,
|
||||||
|
PortSpecs: []string{"80000:80"},
|
||||||
|
},
|
||||||
|
)
|
||||||
|
if err == nil {
|
||||||
|
t.Fatal("Builder.Create should throw an error when PortSpecs is invalid")
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestDestroy(t *testing.T) {
|
func TestDestroy(t *testing.T) {
|
||||||
|
|
13
utils.go
13
utils.go
|
@ -65,7 +65,7 @@ func CompareConfig(a, b *Config) bool {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
func MergeConfig(userConf, imageConf *Config) {
|
func MergeConfig(userConf, imageConf *Config) error {
|
||||||
if userConf.User == "" {
|
if userConf.User == "" {
|
||||||
userConf.User = imageConf.User
|
userConf.User = imageConf.User
|
||||||
}
|
}
|
||||||
|
@ -83,9 +83,15 @@ func MergeConfig(userConf, imageConf *Config) {
|
||||||
} else {
|
} else {
|
||||||
for _, imagePortSpec := range imageConf.PortSpecs {
|
for _, imagePortSpec := range imageConf.PortSpecs {
|
||||||
found := false
|
found := false
|
||||||
imageNat, _ := parseNat(imagePortSpec)
|
imageNat, err := parseNat(imagePortSpec)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
for _, userPortSpec := range userConf.PortSpecs {
|
for _, userPortSpec := range userConf.PortSpecs {
|
||||||
userNat, _ := parseNat(userPortSpec)
|
userNat, err := parseNat(userPortSpec)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
if imageNat.Proto == userNat.Proto && imageNat.Backend == userNat.Backend {
|
if imageNat.Proto == userNat.Proto && imageNat.Backend == userNat.Backend {
|
||||||
found = true
|
found = true
|
||||||
}
|
}
|
||||||
|
@ -146,6 +152,7 @@ func MergeConfig(userConf, imageConf *Config) {
|
||||||
userConf.Volumes[k] = v
|
userConf.Volumes[k] = v
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func parseLxcConfOpts(opts ListOpts) ([]KeyValuePair, error) {
|
func parseLxcConfOpts(opts ListOpts) ([]KeyValuePair, error) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue