github.com/jfrazelle/docker@v1.1.2-0.20210712172922-bf78e25fe508/daemon/images/image_unix.go (about) 1 // +build linux freebsd 2 3 package images // import "github.com/docker/docker/daemon/images" 4 5 import ( 6 "github.com/sirupsen/logrus" 7 ) 8 9 // GetContainerLayerSize returns the real size & virtual size of the container. 10 func (i *ImageService) GetContainerLayerSize(containerID string) (int64, int64) { 11 var ( 12 sizeRw, sizeRootfs int64 13 err error 14 ) 15 16 // Safe to index by runtime.GOOS as Unix hosts don't support multiple 17 // container operating systems. 18 rwlayer, err := i.layerStore.GetRWLayer(containerID) 19 if err != nil { 20 logrus.Errorf("Failed to compute size of container rootfs %v: %v", containerID, err) 21 return sizeRw, sizeRootfs 22 } 23 defer i.layerStore.ReleaseRWLayer(rwlayer) 24 25 sizeRw, err = rwlayer.Size() 26 if err != nil { 27 logrus.Errorf("Driver %s couldn't return diff size of container %s: %s", 28 i.layerStore.DriverName(), containerID, err) 29 // FIXME: GetSize should return an error. Not changing it now in case 30 // there is a side-effect. 31 sizeRw = -1 32 } 33 34 if parent := rwlayer.Parent(); parent != nil { 35 sizeRootfs, err = parent.Size() 36 if err != nil { 37 sizeRootfs = -1 38 } else if sizeRw != -1 { 39 sizeRootfs += sizeRw 40 } 41 } 42 return sizeRw, sizeRootfs 43 }