Skip to content

Commit

Permalink
Merge pull request #44633 from corhere/backport-23.0/fix-44512
Browse files Browse the repository at this point in the history
[23.0 Backport] Prevent containers from being included in List API before they are registered
  • Loading branch information
thaJeztah committed Dec 14, 2022
2 parents 98cad00 + dca58c6 commit ce27df7
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 10 deletions.
15 changes: 13 additions & 2 deletions daemon/container.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
8 changes: 3 additions & 5 deletions daemon/daemon_unix.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
6 changes: 3 additions & 3 deletions daemon/start.go
Original file line number Diff line number Diff line change
Expand Up @@ -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()
}
Expand Down

0 comments on commit ce27df7

Please sign in to comment.