Merge pull request #44629 from corhere/fix-44512
Prevent containers from being included in List API before they are registered
This commit is contained in:
commit
44a4ffd96f
3 changed files with 19 additions and 10 deletions
|
@ -56,7 +56,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
|
||||
|
@ -222,7 +233,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
|
||||
|
|
|
@ -1336,7 +1336,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
|
||||
|
@ -1380,10 +1381,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
|
||||
|
|
|
@ -68,9 +68,9 @@ func (daemon *Daemon) ContainerStart(ctx context.Context, name string, hostConfi
|
|||
// 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