mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
GetLayerFolders
Signed-off-by: Daniel Nephin <dnephin@docker.com>
This commit is contained in:
parent
9c25df0fa2
commit
f6639cb46d
3 changed files with 39 additions and 24 deletions
|
@ -1,4 +1,4 @@
|
|||
package daemon
|
||||
package daemon // import "github.com/docker/docker/daemon"
|
||||
|
||||
import (
|
||||
"sync/atomic"
|
||||
|
|
35
daemon/image_windows.go
Normal file
35
daemon/image_windows.go
Normal file
|
@ -0,0 +1,35 @@
|
|||
package daemon // import "github.com/docker/docker/daemon"
|
||||
|
||||
import (
|
||||
"github.com/docker/docker/image"
|
||||
"github.com/docker/docker/layer"
|
||||
"github.com/docker/docker/pkg/system"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
// GetLayerFolders returns the layer folders from an image RootFS
|
||||
func (daemon *Daemon) GetLayerFolders(img *image.Image, rwLayer layer.RWLayer) ([]string, error) {
|
||||
folders := []string{}
|
||||
max := len(img.RootFS.DiffIDs)
|
||||
for index := 1; index <= max; index++ {
|
||||
// FIXME: why does this mutate the RootFS?
|
||||
img.RootFS.DiffIDs = img.RootFS.DiffIDs[:index]
|
||||
if !system.IsOSSupported(img.OperatingSystem()) {
|
||||
return nil, errors.Wrapf(system.ErrNotSupportedOperatingSystem, "cannot get layerpath for ImageID %s", img.RootFS.ChainID())
|
||||
}
|
||||
layerPath, err := layer.GetLayerPath(daemon.layerStores[img.OperatingSystem()], img.RootFS.ChainID())
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "failed to get layer path from graphdriver %s for ImageID %s", daemon.layerStores[img.OperatingSystem()], img.RootFS.ChainID())
|
||||
}
|
||||
// Reverse order, expecting parent first
|
||||
folders = append([]string{layerPath}, folders...)
|
||||
}
|
||||
if rwLayer == nil {
|
||||
return nil, errors.New("RWLayer is unexpectedly nil")
|
||||
}
|
||||
m, err := rwLayer.Metadata()
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "failed to get layer metadata")
|
||||
}
|
||||
return append(folders, m["dir"]), nil
|
||||
}
|
|
@ -1,7 +1,6 @@
|
|||
package daemon // import "github.com/docker/docker/daemon"
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"path/filepath"
|
||||
|
@ -10,11 +9,11 @@ import (
|
|||
|
||||
containertypes "github.com/docker/docker/api/types/container"
|
||||
"github.com/docker/docker/container"
|
||||
"github.com/docker/docker/layer"
|
||||
"github.com/docker/docker/oci"
|
||||
"github.com/docker/docker/pkg/sysinfo"
|
||||
"github.com/docker/docker/pkg/system"
|
||||
"github.com/opencontainers/runtime-spec/specs-go"
|
||||
"github.com/pkg/errors"
|
||||
"golang.org/x/sys/windows"
|
||||
"golang.org/x/sys/windows/registry"
|
||||
)
|
||||
|
@ -139,29 +138,10 @@ func (daemon *Daemon) createSpec(c *container.Container) (*specs.Spec, error) {
|
|||
}
|
||||
}
|
||||
s.Process.User.Username = c.Config.User
|
||||
|
||||
// Get the layer path for each layer.
|
||||
max := len(img.RootFS.DiffIDs)
|
||||
for i := 1; i <= max; i++ {
|
||||
img.RootFS.DiffIDs = img.RootFS.DiffIDs[:i]
|
||||
if !system.IsOSSupported(img.OperatingSystem()) {
|
||||
return nil, fmt.Errorf("cannot get layerpath for ImageID %s: %s ", img.RootFS.ChainID(), system.ErrNotSupportedOperatingSystem)
|
||||
}
|
||||
layerPath, err := layer.GetLayerPath(daemon.layerStores[img.OperatingSystem()], img.RootFS.ChainID())
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to get layer path from graphdriver %s for ImageID %s - %s", daemon.layerStores[img.OperatingSystem()], img.RootFS.ChainID(), err)
|
||||
}
|
||||
// Reverse order, expecting parent most first
|
||||
s.Windows.LayerFolders = append([]string{layerPath}, s.Windows.LayerFolders...)
|
||||
}
|
||||
if c.RWLayer == nil {
|
||||
return nil, errors.New("RWLayer of container " + c.ID + " is unexpectedly nil")
|
||||
}
|
||||
m, err := c.RWLayer.Metadata()
|
||||
s.Windows.LayerFolders, err = daemon.GetLayerFolders(img, c.RWLayer)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to get layer metadata - %s", err)
|
||||
return nil, errors.Wrapf(err, "container %s", c.ID)
|
||||
}
|
||||
s.Windows.LayerFolders = append(s.Windows.LayerFolders, m["dir"])
|
||||
|
||||
dnsSearch := daemon.getDNSSearchSettings(c)
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue