浏览代码

Fixes Issue # 22992: docker commit failing.

1) docker create / run / start: this would create a snapshot device and mounts it onto the filesystem.
So the first time GET operation is called. it will create the rootfs directory and return the path to rootfs
2) Now when I do docker commit. It will call the GET operation second time. This time the refcount will check
that the count > 1 (count=2). so the rootfs already exists, it will just return the path to rootfs.

Earlier it was just returning the mp: /var/lib/docker/devicemapper/mnt/{ID} and hence the inconsistent paths error.

Signed-off-by: Shishir Mahajan <shishir.mahajan@redhat.com>
(cherry picked from commit 09d0720e2fb6e30ee018887399f353f93ac2d421)
Signed-off-by: Kenfe-Mickael Laventure <mickael.laventure@gmail.com>
Shishir Mahajan 9 年之前
父节点
当前提交
08ecb29017
共有 1 个文件被更改,包括 2 次插入2 次删除
  1. 2 2
      daemon/graphdriver/devmapper/driver.go

+ 2 - 2
daemon/graphdriver/devmapper/driver.go

@@ -153,8 +153,9 @@ func (d *Driver) Remove(id string) error {
 // Get mounts a device with given id into the root filesystem
 func (d *Driver) Get(id, mountLabel string) (string, error) {
 	mp := path.Join(d.home, "mnt", id)
+	rootFs := path.Join(mp, "rootfs")
 	if count := d.ctr.Increment(id); count > 1 {
-		return mp, nil
+		return rootFs, nil
 	}
 
 	uid, gid, err := idtools.GetRootUIDGID(d.uidMaps, d.gidMaps)
@@ -179,7 +180,6 @@ func (d *Driver) Get(id, mountLabel string) (string, error) {
 		return "", err
 	}
 
-	rootFs := path.Join(mp, "rootfs")
 	if err := idtools.MkdirAllAs(rootFs, 0755, uid, gid); err != nil && !os.IsExist(err) {
 		d.ctr.Decrement(id)
 		d.DeviceSet.UnmountDevice(id, mp)