Merge pull request #44633 from corhere/backport-23.0/fix-44512
[23.0 Backport] Prevent containers from being included in List API before they are registered
This commit is contained in:
commit
ce27df7b3c
3 changed files with 19 additions and 10 deletions
|
@ -57,7 +57,18 @@ func (daemon *Daemon) GetContainer(prefixOrName string) (*container.Container, e
|
|||
}
|
||||
return nil, errdefs.System(indexError)
|
||||
}
|
||||
return daemon.containers.Get(containerID), nil
|
||||
ctr := daemon.containers.Get(containerID)
|
||||
if ctr == nil {
|
||||
// Updates to the daemon.containersReplica ViewDB are not atomic
|
||||
// or consistent w.r.t. the live daemon.containers Store so
|
||||
// while reaching this code path may be indicative of a bug,
|
||||
// it is not _necessarily_ the case.
|
||||
logrus.WithField("prefixOrName", prefixOrName).
|
||||
WithField("id", containerID).
|
||||
Debugf("daemon.GetContainer: container is known to daemon.containersReplica but not daemon.containers")
|
||||
return nil, containerNotFound(prefixOrName)
|
||||
}
|
||||
return ctr, nil
|
||||
}
|
||||
|
||||
// checkContainer make sure the specified container validates the specified conditions
|
||||
|
@ -224,7 +235,7 @@ func (daemon *Daemon) setHostConfig(container *container.Container, hostConfig *
|
|||
|
||||
runconfig.SetDefaultNetModeIfBlank(hostConfig)
|
||||
container.HostConfig = hostConfig
|
||||
return container.CheckpointTo(daemon.containersReplica)
|
||||
return nil
|
||||
}
|
||||
|
||||
// verifyContainerSettings performs validation of the hostconfig and config
|
||||
|
|
|
@ -1309,7 +1309,8 @@ func getUnmountOnShutdownPath(config *config.Config) string {
|
|||
return filepath.Join(config.ExecRoot, "unmount-on-shutdown")
|
||||
}
|
||||
|
||||
// registerLinks writes the links to a file.
|
||||
// registerLinks registers network links between container and other containers
|
||||
// with the daemon using the specification in hostConfig.
|
||||
func (daemon *Daemon) registerLinks(container *container.Container, hostConfig *containertypes.HostConfig) error {
|
||||
if hostConfig == nil || hostConfig.NetworkMode.IsUserDefined() {
|
||||
return nil
|
||||
|
@ -1353,10 +1354,7 @@ func (daemon *Daemon) registerLinks(container *container.Container, hostConfig *
|
|||
}
|
||||
}
|
||||
|
||||
// After we load all the links into the daemon
|
||||
// set them to nil on the hostconfig
|
||||
_, err := container.WriteHostConfig()
|
||||
return err
|
||||
return nil
|
||||
}
|
||||
|
||||
// conditionalMountOnStart is a platform specific helper function during the
|
||||
|
|
|
@ -67,9 +67,9 @@ func (daemon *Daemon) ContainerStart(name string, hostConfig *containertypes.Hos
|
|||
// if user has change the network mode on starting, clean up the
|
||||
// old networks. It is a deprecated feature and has been removed in Docker 1.12
|
||||
ctr.NetworkSettings.Networks = nil
|
||||
if err := ctr.CheckpointTo(daemon.containersReplica); err != nil {
|
||||
return errdefs.System(err)
|
||||
}
|
||||
}
|
||||
if err := ctr.CheckpointTo(daemon.containersReplica); err != nil {
|
||||
return errdefs.System(err)
|
||||
}
|
||||
ctr.InitDNSHostConfig()
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue