mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
Windows: Disable VM cloning for TP5 image
The Windows TP5 image is not compatible with the Hyper-V isolated container clone feature. Detect old images and pass a flag specifying that clone should not be enabled. Signed-off-by: John Starks <jostarks@microsoft.com>
This commit is contained in:
parent
e602225160
commit
8e34322253
3 changed files with 25 additions and 9 deletions
|
@ -85,6 +85,13 @@ func (clnt *client) Create(containerID string, spec Spec, options ...CreateOptio
|
|||
configuration.HvRuntime = &hcsshim.HvRuntime{
|
||||
ImagePath: spec.Windows.HvRuntime.ImagePath,
|
||||
}
|
||||
|
||||
// Images with build verison < 14350 don't support running with clone, but
|
||||
// Windows cannot automatically detect this. Explicitly block cloning in this
|
||||
// case.
|
||||
if build := buildFromVersion(spec.Platform.OSVersion); build > 0 && build < 14350 {
|
||||
configuration.HvRuntime.SkipTemplate = true
|
||||
}
|
||||
}
|
||||
|
||||
if configuration.HvPartition {
|
||||
|
|
|
@ -2,8 +2,6 @@ package libcontainerd
|
|||
|
||||
import (
|
||||
"io"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/Microsoft/hcsshim"
|
||||
)
|
||||
|
@ -38,12 +36,7 @@ func fixStdinBackspaceBehavior(w io.WriteCloser, osversion string, tty bool) io.
|
|||
if !tty {
|
||||
return w
|
||||
}
|
||||
v := strings.Split(osversion, ".")
|
||||
if len(v) < 3 {
|
||||
return w
|
||||
}
|
||||
|
||||
if build, err := strconv.Atoi(v[2]); err != nil || build >= 14350 {
|
||||
if build := buildFromVersion(osversion); build == 0 || build >= 14350 {
|
||||
return w
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
package libcontainerd
|
||||
|
||||
import "strings"
|
||||
import (
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// setupEnvironmentVariables convert a string array of environment variables
|
||||
// into a map as required by the HCS. Source array is in format [v1=k1] [v2=k2] etc.
|
||||
|
@ -19,3 +22,16 @@ func setupEnvironmentVariables(a []string) map[string]string {
|
|||
func (s *ServicingOption) Apply(interface{}) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// buildFromVersion takes an image version string and returns the Windows build
|
||||
// number. It returns 0 if the build number is not present.
|
||||
func buildFromVersion(osver string) int {
|
||||
v := strings.Split(osver, ".")
|
||||
if len(v) < 3 {
|
||||
return 0
|
||||
}
|
||||
if build, err := strconv.Atoi(v[2]); err == nil {
|
||||
return build
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue