diff --git a/components/engine/daemon/daemon.go b/components/engine/daemon/daemon.go index bbecc677f4..c48a16fa5d 100644 --- a/components/engine/daemon/daemon.go +++ b/components/engine/daemon/daemon.go @@ -283,10 +283,6 @@ func (daemon *Daemon) Register(container *container.Container) error { } } - if err := daemon.prepareMountPoints(container); err != nil { - return err - } - return nil } diff --git a/components/engine/daemon/mounts.go b/components/engine/daemon/mounts.go index 4f3669d37c..c2976d443c 100644 --- a/components/engine/daemon/mounts.go +++ b/components/engine/daemon/mounts.go @@ -8,20 +8,6 @@ import ( volumestore "github.com/docker/docker/volume/store" ) -func (daemon *Daemon) prepareMountPoints(container *container.Container) error { - for _, config := range container.MountPoints { - if len(config.Driver) > 0 { - v, err := daemon.volumes.GetWithRef(config.Name, config.Driver, container.ID) - if err != nil { - return err - } - - config.Volume = v - } - } - return nil -} - func (daemon *Daemon) removeMountPoints(container *container.Container, rm bool) error { var rmErrors []string for _, m := range container.MountPoints { diff --git a/components/engine/daemon/volumes_unix.go b/components/engine/daemon/volumes_unix.go index ea19953093..09c7ae1071 100644 --- a/components/engine/daemon/volumes_unix.go +++ b/components/engine/daemon/volumes_unix.go @@ -20,6 +20,14 @@ import ( func (daemon *Daemon) setupMounts(container *container.Container) ([]execdriver.Mount, error) { var mounts []execdriver.Mount for _, m := range container.MountPoints { + // Lazy initialize m.Volume if needed. This happens after a daemon restart + if len(m.Driver) > 0 && m.Volume == nil { + v, err := daemon.createVolume(m.Name, m.Driver, nil) + if err != nil { + return nil, err + } + m.Volume = v + } path, err := m.Setup() if err != nil { return nil, err diff --git a/components/engine/daemon/volumes_windows.go b/components/engine/daemon/volumes_windows.go index dd4a9c9f2c..1efbc0e457 100644 --- a/components/engine/daemon/volumes_windows.go +++ b/components/engine/daemon/volumes_windows.go @@ -18,6 +18,14 @@ import ( func (daemon *Daemon) setupMounts(container *container.Container) ([]execdriver.Mount, error) { var mnts []execdriver.Mount for _, mount := range container.MountPoints { // type is volume.MountPoint + // Lazy initialize m.Volume if needed. This happens after a daemon restart + if len(m.Driver) > 0 && m.Volume == nil { + v, err := daemon.createVolume(m.Name, m.Driver, nil) + if err != nil { + return nil, err + } + m.Volume = v + } // If there is no source, take it from the volume path s := mount.Source if s == "" && mount.Volume != nil {