mirror of
https://github.com/moby/moby.git
synced 2025-08-01 05:47:11 +03:00
Merge pull request #18318 from calavera/fix_dns_setting_on_hostconfig_start
Make sure container start doesn't make the DNS fields nil.
This commit is contained in:
@ -166,22 +166,7 @@ func (container *Container) readHostConfig() error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Make sure the dns fields are never nil.
|
initDNSHostConfig(container)
|
||||||
// New containers don't ever have those fields nil,
|
|
||||||
// but pre created containers can still have those nil values.
|
|
||||||
// See https://github.com/docker/docker/pull/17779
|
|
||||||
// for a more detailed explanation on why we don't want that.
|
|
||||||
if container.hostConfig.DNS == nil {
|
|
||||||
container.hostConfig.DNS = make([]string, 0)
|
|
||||||
}
|
|
||||||
|
|
||||||
if container.hostConfig.DNSSearch == nil {
|
|
||||||
container.hostConfig.DNSSearch = make([]string, 0)
|
|
||||||
}
|
|
||||||
|
|
||||||
if container.hostConfig.DNSOptions == nil {
|
|
||||||
container.hostConfig.DNSOptions = make([]string, 0)
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -543,3 +528,25 @@ func (container *Container) stopSignal() int {
|
|||||||
}
|
}
|
||||||
return int(stopSignal)
|
return int(stopSignal)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// initDNSHostConfig ensures that the dns fields are never nil.
|
||||||
|
// New containers don't ever have those fields nil,
|
||||||
|
// but pre created containers can still have those nil values.
|
||||||
|
// The non-recommended host configuration in the start api can
|
||||||
|
// make these fields nil again, this corrects that issue until
|
||||||
|
// we remove that behavior for good.
|
||||||
|
// See https://github.com/docker/docker/pull/17779
|
||||||
|
// for a more detailed explanation on why we don't want that.
|
||||||
|
func initDNSHostConfig(container *Container) {
|
||||||
|
if container.hostConfig.DNS == nil {
|
||||||
|
container.hostConfig.DNS = make([]string, 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
if container.hostConfig.DNSSearch == nil {
|
||||||
|
container.hostConfig.DNSSearch = make([]string, 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
if container.hostConfig.DNSOptions == nil {
|
||||||
|
container.hostConfig.DNSOptions = make([]string, 0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -29,6 +29,7 @@ func (daemon *Daemon) ContainerStart(name string, hostConfig *runconfig.HostConf
|
|||||||
// This is kept for backward compatibility - hostconfig should be passed when
|
// This is kept for backward compatibility - hostconfig should be passed when
|
||||||
// creating a container, not during start.
|
// creating a container, not during start.
|
||||||
if hostConfig != nil {
|
if hostConfig != nil {
|
||||||
|
logrus.Warn("DEPRECATED: Setting host configuration options when the container starts is deprecated and will be removed in Docker 1.12")
|
||||||
container.Lock()
|
container.Lock()
|
||||||
if err := parseSecurityOpt(container, hostConfig); err != nil {
|
if err := parseSecurityOpt(container, hostConfig); err != nil {
|
||||||
container.Unlock()
|
container.Unlock()
|
||||||
@ -38,6 +39,7 @@ func (daemon *Daemon) ContainerStart(name string, hostConfig *runconfig.HostConf
|
|||||||
if err := daemon.setHostConfig(container, hostConfig); err != nil {
|
if err := daemon.setHostConfig(container, hostConfig); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
initDNSHostConfig(container)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if hostConfig != nil {
|
if hostConfig != nil {
|
||||||
|
@ -1371,3 +1371,20 @@ func (s *DockerSuite) TestPostContainersCreateWithWrongCpusetValues(c *check.C)
|
|||||||
expected = "Invalid value 42-3,1-- for cpuset mems.\n"
|
expected = "Invalid value 42-3,1-- for cpuset mems.\n"
|
||||||
c.Assert(string(body), checker.Equals, expected)
|
c.Assert(string(body), checker.Equals, expected)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *DockerSuite) TestStartWithNilDNS(c *check.C) {
|
||||||
|
testRequires(c, DaemonIsLinux)
|
||||||
|
out, _ := dockerCmd(c, "create", "busybox")
|
||||||
|
containerID := strings.TrimSpace(out)
|
||||||
|
|
||||||
|
config := `{"HostConfig": {"Dns": null}}`
|
||||||
|
|
||||||
|
res, b, err := sockRequestRaw("POST", "/containers/"+containerID+"/start", strings.NewReader(config), "application/json")
|
||||||
|
c.Assert(err, checker.IsNil)
|
||||||
|
c.Assert(res.StatusCode, checker.Equals, http.StatusNoContent)
|
||||||
|
b.Close()
|
||||||
|
|
||||||
|
dns, err := inspectFieldJSON(containerID, "HostConfig.Dns")
|
||||||
|
c.Assert(err, checker.IsNil)
|
||||||
|
c.Assert(dns, checker.Equals, "[]")
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user