Fix Put without Get in overlay
It is called for example on daemon start after crash Signed-off-by: Alexander Morozov <lk4d4@docker.com>
This commit is contained in:
parent
29595fd944
commit
3916561619
|
@ -318,6 +318,14 @@ func (d *Driver) Put(id string) error {
|
||||||
mount := d.active[id]
|
mount := d.active[id]
|
||||||
if mount == nil {
|
if mount == nil {
|
||||||
logrus.Debugf("Put on a non-mounted device %s", id)
|
logrus.Debugf("Put on a non-mounted device %s", id)
|
||||||
|
// but it might be still here
|
||||||
|
if d.Exists(id) {
|
||||||
|
mergedDir := path.Join(d.dir(id), "merged")
|
||||||
|
err := syscall.Unmount(mergedDir, 0)
|
||||||
|
if err != nil {
|
||||||
|
logrus.Debugf("Failed to unmount %s overlay: %v", id, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1161,7 +1161,7 @@ func pingContainers(c *check.C, d *Daemon, expectFailure bool) {
|
||||||
runCommand(exec.Command(dockerBinary, args...))
|
runCommand(exec.Command(dockerBinary, args...))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *DockerDaemonSuite) TestDaemonRestartWithSockerAsVolume(c *check.C) {
|
func (s *DockerDaemonSuite) TestDaemonRestartWithSocketAsVolume(c *check.C) {
|
||||||
c.Assert(s.d.StartWithBusybox(), check.IsNil)
|
c.Assert(s.d.StartWithBusybox(), check.IsNil)
|
||||||
|
|
||||||
socket := filepath.Join(s.d.folder, "docker.sock")
|
socket := filepath.Join(s.d.folder, "docker.sock")
|
||||||
|
@ -1170,3 +1170,16 @@ func (s *DockerDaemonSuite) TestDaemonRestartWithSockerAsVolume(c *check.C) {
|
||||||
c.Assert(err, check.IsNil, check.Commentf("Output: %s", out))
|
c.Assert(err, check.IsNil, check.Commentf("Output: %s", out))
|
||||||
c.Assert(s.d.Restart(), check.IsNil)
|
c.Assert(s.d.Restart(), check.IsNil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *DockerDaemonSuite) TestCleanupMountsAfterCrash(c *check.C) {
|
||||||
|
c.Assert(s.d.StartWithBusybox(), check.IsNil)
|
||||||
|
|
||||||
|
out, err := s.d.Cmd("run", "-d", "busybox", "top")
|
||||||
|
c.Assert(err, check.IsNil, check.Commentf("Output: %s", out))
|
||||||
|
id := strings.TrimSpace(out)
|
||||||
|
c.Assert(s.d.cmd.Process.Signal(os.Kill), check.IsNil)
|
||||||
|
c.Assert(s.d.Start(), check.IsNil)
|
||||||
|
mountOut, err := exec.Command("mount").CombinedOutput()
|
||||||
|
c.Assert(err, check.IsNil, check.Commentf("Output: %s", mountOut))
|
||||||
|
c.Assert(strings.Contains(string(mountOut), id), check.Equals, false, check.Commentf("Something mounted from older daemon start: %s", mountOut))
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue