diff --git a/container.go b/container.go index 5a4559f720..58ece78f58 100644 --- a/container.go +++ b/container.go @@ -100,17 +100,25 @@ func createContainer(id string, root string, command string, args []string, imag return container, nil } -func loadContainer(containerPath string) (*Container, error) { +func loadContainer(store *fs.Store, containerPath string) (*Container, error) { data, err := ioutil.ReadFile(path.Join(containerPath, "config.json")) if err != nil { return nil, err } + mountpoint, err := store.FetchMountpoint( + path.Join(containerPath, "rootfs"), + path.Join(containerPath, "rw"), + ) + if err != nil { + return nil, err + } container := &Container{ stdout: newWriteBroadcaster(), stderr: newWriteBroadcaster(), stdoutLog: new(bytes.Buffer), stderrLog: new(bytes.Buffer), lxcConfigPath: path.Join(containerPath, "config.lxc"), + Mountpoint: mountpoint, } if err := json.Unmarshal(data, container); err != nil { return nil, err diff --git a/docker.go b/docker.go index 105b1ea7da..50b38dbed4 100644 --- a/docker.go +++ b/docker.go @@ -92,12 +92,11 @@ func (docker *Docker) restore() error { return err } for _, v := range dir { - container, err := loadContainer(path.Join(docker.repository, v.Name())) + container, err := loadContainer(docker.Store, path.Join(docker.repository, v.Name())) if err != nil { log.Printf("Failed to load container %v: %v", v.Name(), err) continue } - container.Mountpoint.Store = docker.Store docker.containers.PushBack(container) } return nil diff --git a/fs/store.go b/fs/store.go index 697919a356..1ced3722fe 100644 --- a/fs/store.go +++ b/fs/store.go @@ -227,7 +227,7 @@ func (image *Image) Mountpoints() ([]*Mountpoint, error) { func (image *Image) Mount(root, rw string) (*Mountpoint, error) { var mountpoint *Mountpoint - if mp, err := image.fetchMountpoint(root, rw); err != nil { + if mp, err := image.store.FetchMountpoint(root, rw); err != nil { return nil, err } else if mp == nil { mountpoint, err = image.Mountpoint(root, rw) @@ -345,8 +345,8 @@ func (mp *Mountpoint) Deregister() error { return err } -func (image *Image) fetchMountpoint(root, rw string) (*Mountpoint, error) { - res, err := image.store.orm.Select(Mountpoint{}, "select * from mountpoints where Image=? and Root=? and Rw=?", image.Id, root, rw) +func (store *Store) FetchMountpoint(root, rw string) (*Mountpoint, error) { + res, err := store.orm.Select(Mountpoint{}, "select * from mountpoints where Root=? and Rw=?", root, rw) if err != nil { return nil, err } else if len(res) < 1 || res[0] == nil { @@ -354,7 +354,7 @@ func (image *Image) fetchMountpoint(root, rw string) (*Mountpoint, error) { } mp := res[0].(*Mountpoint) - mp.Store = image.store + mp.Store = store return mp, nil }