image_unix.go 1.4 KB

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