Save driver to container and skip incompat containers

For people who toggle drivers we want to save the driver used
to create a container so that if the driver changes we can skip
loading the container and it should not show up in docker ps
Upstream-commit: 4908d7f81db91f4a28be152ec0cacb0cf711b403
Component: engine
This commit is contained in:
Michael Crosby
2013-11-14 22:53:59 -08:00
parent c579e87812
commit b264af0c15
2 changed files with 11 additions and 2 deletions
+1
View File
@@ -47,6 +47,7 @@ type Container struct {
HostnamePath string
HostsPath string
Name string
Driver string
cmd *exec.Cmd
stdout *utils.WriteBroadcaster
+10 -2
View File
@@ -262,6 +262,7 @@ func (runtime *Runtime) restore() error {
return err
}
containers := make(map[string]*Container)
currentDriver := runtime.driver.String()
for i, v := range dir {
id := v.Name()
@@ -273,8 +274,14 @@ func (runtime *Runtime) restore() error {
utils.Errorf("Failed to load container %v: %v", id, err)
continue
}
utils.Debugf("Loaded container %v", container.ID)
containers[container.ID] = container
// Ignore the container if it does not support the current driver being used by the graph
if container.Driver == "" && currentDriver == "aufs" || container.Driver == currentDriver {
utils.Debugf("Loaded container %v", container.ID)
containers[container.ID] = container
} else {
utils.Debugf("Cannot load container %s because it was created with another graph driver.", container.ID)
}
}
register := func(container *Container) {
@@ -445,6 +452,7 @@ func (runtime *Runtime) Create(config *Config, name string) (*Container, []strin
// FIXME: do we need to store this in the container?
SysInitPath: sysInitPath,
Name: name,
Driver: runtime.driver.String(),
}
container.root = runtime.containerRoot(container.ID)
// Step 1: create the container directory.