Commit Graph

41 Commits

Author SHA1 Message Date
bb87b715d8 Windows: Unify workdir handling
Signed-off-by: John Howard <jhoward@microsoft.com>

Working directory processing was handled differently for Hyper-V and Windows-Server containers, as annotated in the builder documentation (updated in this PR). For Hyper-V containers, the working directory set by WORKDIR was not created. This PR makes Hyper-V containers work the same as Windows Server containers (and the same as Linux).

Example (only applies to Hyper-V containers, so not reproducible under CI environment)
Dockerfile:
FROM microsoft/nanoserver
WORKDIR c:\installer
ENV GOROOT=c:\installer
ADD go.exe .
RUN go --help
Running on Windows Server 2016, using docker master without this change, but with daemon set to --exec-opt isolation=hyperv as it would be for Client operating systems.
PS E:\go\src\github.com\docker\docker> dockerd -g c:\control --exec-opt isolation=hyperv
time="2017-02-01T15:48:09.657286100-08:00" level=info msg="Windows default isolation mode: hyperv"
time="2017-02-01T15:48:09.662720900-08:00" level=info msg="[graphdriver] using prior storage driver: windowsfilter"
time="2017-02-01T15:48:10.011588000-08:00" level=info msg="Graph migration to content-addressability took 0.00 seconds"
time="2017-02-01T15:48:10.016655800-08:00" level=info msg="Loading containers: start."
time="2017-02-01T15:48:10.460820000-08:00" level=info msg="Loading containers: done."
time="2017-02-01T15:48:10.509859600-08:00" level=info msg="Daemon has completed initialization"
time="2017-02-01T15:48:10.509859600-08:00" level=info msg="Docker daemon" commit=3c64061 graphdriver=windowsfilter version=1.14.0-dev
First with no explicit isolation:
PS E:\docker\build\unifyworkdir> docker build --no-cache .
Sending build context to Docker daemon  10.1 MB
Step 1/5 : FROM microsoft/nanoserver
 ---> 89b8556cb9ca
Step 2/5 : WORKDIR c:\installer
 ---> 7e0f41d08204
Removing intermediate container 236c7802042a
Step 3/5 : ENV GOROOT c:\installer
 ---> Running in 8ea5237183c1
 ---> 394b70435261
Removing intermediate container 8ea5237183c1
Step 4/5 : ADD go.exe .
 ---> e47401a1745c
Removing intermediate container 88dcc28e74b1
Step 5/5 : RUN go --help
 ---> Running in efe90e1b6b8b
container efe90e1b6b8b76586abc5c1dc0e2797b75adc26517c48733d90651e767c8463b encountered an error during CreateProcess: failure in a Windows system call: The directory name is invalid. (0x10b) extra info: {"ApplicationName":"","CommandLine":"cmd /S /C go --help","User":"","WorkingDirectory":"C:\\installer","Environment":{"GOROOT":"c:\\installer"},"EmulateConsole":false,"CreateStdInPipe":true,"CreateStdOutPipe":true,"CreateStdErrPipe":true,"ConsoleSize":[0,0]}
PS E:\docker\build\unifyworkdir>
Then forcing process isolation:
PS E:\docker\build\unifyworkdir> docker build --isolation=process --no-cache .
Sending build context to Docker daemon  10.1 MB
Step 1/5 : FROM microsoft/nanoserver
 ---> 89b8556cb9ca
Step 2/5 : WORKDIR c:\installer
 ---> 350c955980c8
Removing intermediate container 8339c1e9250c
Step 3/5 : ENV GOROOT c:\installer
 ---> Running in bde511c5e3e0
 ---> b8820063b5b6
Removing intermediate container bde511c5e3e0
Step 4/5 : ADD go.exe .
 ---> e4ac32f8902b
Removing intermediate container d586e8492eda
Step 5/5 : RUN go --help
 ---> Running in 9e1aa235af5f
Cannot mkdir: C:\installer is not a directory
PS E:\docker\build\unifyworkdir>
Now compare the same results after this PR. Again, first with no explicit isolation (defaulting to Hyper-V containers as that's what the daemon it set to) - note it now succeeds 😄
PS E:\docker\build\unifyworkdir> docker build --no-cache .
Sending build context to Docker daemon  10.1 MB
Step 1/5 : FROM microsoft/nanoserver
 ---> 89b8556cb9ca
Step 2/5 : WORKDIR c:\installer
 ---> 4f319f301c69
Removing intermediate container 61b9c0b1ff6f
Step 3/5 : ENV GOROOT c:\installer
 ---> Running in c464a1d612d8
 ---> 96a26ab9a7b5
Removing intermediate container c464a1d612d8
Step 4/5 : ADD go.exe .
 ---> 0290d61faf57
Removing intermediate container dc5a085fffe3
Step 5/5 : RUN go --help
 ---> Running in 60bd56042ff8
Go is a tool for managing Go source code.

Usage:

        go command [arguments]

The commands are:

        build       compile packages and dependencies
        clean       remove object files
        doc         show documentation for package or symbol
        env         print Go environment information
        fix         run go tool fix on packages
        fmt         run gofmt on package sources
        generate    generate Go files by processing source
        get         download and install packages and dependencies
        install     compile and install packages and dependencies
        list        list packages
        run         compile and run Go program
        test        test packages
        tool        run specified go tool
        version     print Go version
        vet         run go tool vet on packages

Use "go help [command]" for more information about a command.

Additional help topics:

        c           calling between Go and C
        buildmode   description of build modes
        filetype    file types
        gopath      GOPATH environment variable
        environment environment variables
        importpath  import path syntax
        packages    description of package lists
        testflag    description of testing flags
        testfunc    description of testing functions

Use "go help [topic]" for more information about that topic.

The command 'cmd /S /C go --help' returned a non-zero code: 2
And the same with forcing process isolation. Also works 😄
PS E:\docker\build\unifyworkdir> docker build --isolation=process --no-cache .
Sending build context to Docker daemon  10.1 MB
Step 1/5 : FROM microsoft/nanoserver
 ---> 89b8556cb9ca
Step 2/5 : WORKDIR c:\installer
 ---> f423b9cc3e78
Removing intermediate container 41330c88893d
Step 3/5 : ENV GOROOT c:\installer
 ---> Running in 0b99a2d7bf19
 ---> e051144bf8ec
Removing intermediate container 0b99a2d7bf19
Step 4/5 : ADD go.exe .
 ---> 7072e32b7c37
Removing intermediate container a7a97aa37fd1
Step 5/5 : RUN go --help
 ---> Running in 7097438a54e5
Go is a tool for managing Go source code.

Usage:

        go command [arguments]

The commands are:

        build       compile packages and dependencies
        clean       remove object files
        doc         show documentation for package or symbol
        env         print Go environment information
        fix         run go tool fix on packages
        fmt         run gofmt on package sources
        generate    generate Go files by processing source
        get         download and install packages and dependencies
        install     compile and install packages and dependencies
        list        list packages
        run         compile and run Go program
        test        test packages
        tool        run specified go tool
        version     print Go version
        vet         run go tool vet on packages

Use "go help [command]" for more information about a command.

Additional help topics:

        c           calling between Go and C
        buildmode   description of build modes
        filetype    file types
        gopath      GOPATH environment variable
        environment environment variables
        importpath  import path syntax
        packages    description of package lists
        testflag    description of testing flags
        testfunc    description of testing functions

Use "go help [topic]" for more information about that topic.

The command 'cmd /S /C go --help' returned a non-zero code: 2
PS E:\docker\build\unifyworkdir>
Upstream-commit: f42033ba9484ab31611bb1e4a0416beb3aa956da
Component: engine
2017-02-02 11:25:07 -08:00
287ee51be3 Refactoring ineffectual assignments
This patch fixed below 4 types of code line
1. Remove unnecessary variable assignment
2. Use variables declaration instead of explicit initial zero value
3. Change variable name to underbar when variable not used
4. Add erro check and return for ignored error

Signed-off-by: Daehyeok Mun <daehyeok@gmail.com>
Upstream-commit: 6306019d0bad9c4e60ee437e93f2450dfb0b68c0
Component: engine
2017-01-13 00:27:01 -07:00
ba28f133a9 Windows: Fix a longstanding TODO
Signed-off-by: John Howard <jhoward@microsoft.com>
Upstream-commit: 61dad306b12f4d48d3643d9331c059b9cdef731c
Component: engine
2016-11-18 10:20:43 -08:00
c8300bf35f Windows: Add cpu count option
Signed-off-by: Darren Stahl <darst@microsoft.com>
Upstream-commit: 4e15420b9be50ddd7fa65e5c7f9b732777f9cc35
Component: engine
2016-11-04 13:38:50 -07:00
133eec9cfa Add --cpus flag to control cpu resources
This fix tries to address the proposal raised in 27921 and add
`--cpus` flag for `docker run/create`.

Basically, `--cpus` will allow user to specify a number (possibly partial)
about how many CPUs the container will use. For example, on a 2-CPU system
`--cpus 1.5` means the container will take 75% (1.5/2) of the CPU share.

This fix adds a `NanoCPUs` field to `HostConfig` since swarmkit alreay
have a concept of NanoCPUs for tasks. The `--cpus` flag will translate
the number into reused `NanoCPUs` to be consistent.

This fix adds integration tests to cover the changes.

Related docs (`docker run` and Remote APIs) have been updated.

This fix fixes 27921.

Signed-off-by: Yong Tang <yong.tang.github@outlook.com>
Upstream-commit: 846baf1fd3efcbfbf9d3eb99e436ca9a59d3e185
Component: engine
2016-11-04 09:43:10 -07:00
e4a5c6f7fb Merge pull request #26965 from Microsoft/jjh/rootpath
Windows: Set correct root path logic
Upstream-commit: 15fb3fd9da06c73c4efd88140f6fc12130f361a9
Component: engine
2016-10-19 15:50:37 +02:00
f44fc82a36 Merge pull request #26961 from Microsoft/jjh/oci
Windows: OCI runtime spec compliance
Upstream-commit: 97660c6ec55f45416cb2b2d4c116267864b62b65
Component: engine
2016-09-30 10:13:57 -07:00
3616bb2973 Fix missing hostname and links in exec env
Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
Upstream-commit: e98145960988a2259074ae911b6478b7a940748b
Component: engine
2016-09-29 13:46:10 -07:00
694a7e44c5 Windows: Set correct root path logic
Signed-off-by: John Howard <jhoward@microsoft.com>
Upstream-commit: 8f76a1d08b644008fb088b70437e91bea8cc14a9
Component: engine
2016-09-27 15:21:28 -07:00
434bea436a Remove hacked Windows OCI spec, compile fixups
Signed-off-by: John Howard <jhoward@microsoft.com>
Upstream-commit: 02309170a5fb97d40260d0ee9e24b44be8c780b2
Component: engine
2016-09-27 12:07:35 -07:00
debe74e333 Windows OCI: Remove endpoint list
Signed-off-by: John Howard <jhoward@microsoft.com>
Upstream-commit: 410a8612f481e67265ce0edaf78ed1d96f6dffcf
Component: engine
2016-09-22 10:08:13 -07:00
7195c6a9d6 Merge pull request #26746 from Microsoft/jjh/hvruntime
Windows: OCI HVRuntime and LayerPaths to options
Upstream-commit: 3990f2816250cba4d48a867eccdc86712d0990b2
Component: engine
2016-09-22 09:55:58 -07:00
d73f6e50df Merge pull request #26751 from Microsoft/jjh/reverthostconfig
Revert Box from HostConfig
Upstream-commit: b683958deeaae20463649085516d57df2fbdec53
Component: engine
2016-09-21 09:53:39 +02:00
f621a80cd1 Windows: OCI HVRuntime and LayerPaths to options
Signed-off-by: John Howard <jhoward@microsoft.com>
Upstream-commit: a3aceeac50f35e2b10323087b2a1f21af45ee143
Component: engine
2016-09-20 13:51:53 -07:00
4145d55809 Merge pull request #26641 from Microsoft/jjh/aggressivenamespacing
Windows: OCI aggressive namespacing
Upstream-commit: 511fd4940282f4ed6df39f3c2ebc8b9a0f060c82
Component: engine
2016-09-20 13:37:41 -07:00
7b0a3056fd Revert Box from HostConfig
Signed-off-by: John Howard <jhoward@microsoft.com>
Upstream-commit: 6b74e2f09dfe2627cd639d683e0896b938f38313
Component: engine
2016-09-20 12:01:04 -07:00
62c8ac5cdc Merge pull request #26579 from Microsoft/jjh/ociprocess
Windows: OCI `process` struct and console size to uint
Upstream-commit: 8c508ef8132ba9b5c3daa411a593349af6d32a33
Component: engine
2016-09-19 22:52:16 +02:00
92d37247b3 Windows: OCI process struct convergence
Signed-off-by: John Howard <jhoward@microsoft.com>
Upstream-commit: 53774423ff0db50cb0934e7b1e5ce507363e8147
Component: engine
2016-09-19 10:34:31 -07:00
454fb85f2d Windows: OCI aggressive namespacing
Signed-off-by: John Howard <jhoward@microsoft.com>
Upstream-commit: c89db6c044963c626a5240ef27078b2c4616d1ae
Component: engine
2016-09-19 10:23:11 -07:00
8abf4dbc45 Windows: Remove osversion from OCI
Signed-off-by: John Howard <jhoward@microsoft.com>
Upstream-commit: 72de562943a9bfbc44d24c80dfc9d0dc112ab0f4
Component: engine
2016-09-19 10:16:15 -07:00
aa8b9ee0c3 Merge pull request #26577 from Microsoft/jjh/fstabmount
Windows: Move to fstab options as per OCI
Upstream-commit: b72c7f74a616a52a52843cf5b295962845be3ba3
Component: engine
2016-09-19 10:13:46 -07:00
9a39a676da Merge pull request #26650 from Microsoft/jjh/firststart
Windows: OCI remove first start
Upstream-commit: bc60f5af847d7ae7b466ecca7fc58a9345ee1084
Component: engine
2016-09-18 09:27:10 -04:00
f9fecb6904 Windows: OCI remove first start
Signed-off-by: John Howard <jhoward@microsoft.com>
Upstream-commit: f7fd408ba78bd1e3a28751578084eaf4e69d6c5a
Component: engine
2016-09-16 16:05:55 -07:00
dfe7e29f76 Windows: Move to fstab options as per OCI
Signed-off-by: John Howard <jhoward@microsoft.com>
Upstream-commit: bb585b9c106e8e81a445b2b864d673bc9f5991cd
Component: engine
2016-09-15 10:12:20 -07:00
5a9205e2eb Windows: Unify OCI user struct
Signed-off-by: John Howard <jhoward@microsoft.com>
Upstream-commit: 93f61b85ebe184506a3d99cee3b4ebaac559c712
Component: engine
2016-09-15 09:59:27 -07:00
955f123fe8 Fix ulimits in docker inspect when daemon default exists
This fix tries to fix 26326 where `docker inspect` will not show
ulimit even when daemon default ulimit has been set.

This fix merge the HostConfig's ulimit with daemon default in
`docker inspect`, so that when daemon is started with `default-ulimit`
and HostConfig's ulimit is not set, `docker inspect` will output
the daemon default.

An integration test has been added to cover the changes.

This fix fixes 26326.

Signed-off-by: Yong Tang <yong.tang.github@outlook.com>
Upstream-commit: 7d705a7355d650feffc966e08efc0f92297145a8
Component: engine
2016-09-07 23:15:22 -07:00
fe7b1d72f0 Merge pull request #23391 from Microsoft/WindowsSandboxSize
Windows: Added support for storage-opt size
Upstream-commit: 04e021d7511fcfdc0838a0165f70a4772c0e7718
Component: engine
2016-08-09 15:34:39 +02:00
a51fa7c69f Removing old custom RootFS behavior on Windows.
Windows base layers are no longer the special "layers+base" type, so we can remove all the special handling for that.

Signed-off-by: Stefan J. Wernli <swernli@microsoft.com>
Upstream-commit: f342b27145d8f5af27cd5de1501551af275e899b
Component: engine
2016-07-29 14:15:59 -07:00
85d966380c Windows: Added support for storage-opt size
Signed-off-by: Darren Stahl <darst@microsoft.com>
Upstream-commit: 7e5ee6d176357fb294d0ca7b9a93373f6cc84bc0
Component: engine
2016-06-21 10:53:29 -07:00
66f02f955c Windows: Added support for memory limit
Signed-off-by: Darren Stahl <darst@microsoft.com>
Upstream-commit: 12fe27a40893d92489996550ddff976eba50332c
Component: engine
2016-06-15 17:07:29 -07:00
37e80ffc41 Windows: Use image version, not OS version for TTY fixup
A previous change added a TTY fixup for stdin on older Windows versions to
work around a Windows issue with backspace/delete behavior. This change
used the OS version to determine whether to activate the behavior.
However, the Windows bug is actually in the image, not the OS, so it
should have used the image's OS version.

This ensures that a Server TP5 container running on Windows 10 will have
reasonable console behavior.

Signed-off-by: John Starks <jostarks@microsoft.com>
Upstream-commit: 6508c015fe764fd59438cabffcbc6102c9cf04ef
Component: engine
2016-05-25 12:22:52 -07:00
87afb49f07 Add IO Resource Controls for Windows
Signed-off-by: Darren Stahl <darst@microsoft.com>
Upstream-commit: 8df2066341931d9b7ba552afa902e2ef12e5eed5
Component: engine
2016-04-25 13:07:29 -07:00
430ab207ac Windows: Set default directory
Signed-off-by: John Howard <jhoward@microsoft.com>
Upstream-commit: c2d183426ba2fb4e850dc006d3ad3cc3bd86cc24
Component: engine
2016-04-18 15:59:41 -07:00
4e9b36b9f3 Merge pull request #20924 from Microsoft/10662-CPUResourceControls
Add CPU count and maximum resource controls for Windows
Upstream-commit: 172ca1ca8c4d5157789feb97a6424104b81a3479
Component: engine
2016-04-15 08:14:59 +02:00
22a06166b3 Add CPU count and maximum resource controls for Windows
Signed-off-by: Darren Stahl <darst@microsoft.com>
Upstream-commit: ea8c690886970b2929d52d8b61dcfb8becc24db9
Component: engine
2016-04-14 15:40:25 -07:00
78ecc63dec Windows: Support embedded utility VM images
For TP5, the utility VM for Hyper-V containers is embedded in the base
layer's contents.

Signed-off-by: John Starks <jostarks@microsoft.com>
Upstream-commit: c70f153f52c8ca75a395d4dc1c4a5759871ada19
Component: engine
2016-04-11 17:16:17 -07:00
cfe0e7d529 Windows: Support non-base-layered images
Previously, Windows only supported running with a OS-managed base image.
With this change, Windows supports normal, Linux-like layered images, too.

Signed-off-by: John Starks <jostarks@microsoft.com>
Upstream-commit: d45a26d7e24719814bc321db6fa173110af30740
Component: engine
2016-04-07 17:52:26 -07:00
9f10b4351a Windows: Remove TP4 support from main code
Signed-off-by: John Howard <jhoward@microsoft.com>
Upstream-commit: 331c8a86d489e573fcbf1df3c4f813bbc3168624
Component: engine
2016-04-06 12:12:20 -07:00
6a83b0bb5c Windows: escape entrypoint before passing to libcontainerd
This makes Windows behavior consistent with Linux -- the entry point must
be an executable, not an executable and set of arguments.

Signed-off-by: John Starks <jostarks@microsoft.com>
Upstream-commit: 6fa0239772e672eefb98cef91ca8d806b86182b0
Component: engine
2016-03-30 12:59:50 -07:00
01537880de Windows: Tidy after libcontainerd
Signed-off-by: John Howard <jhoward@microsoft.com>
Upstream-commit: 3ca6ad5b9e6e37766d26c29f6a99bbd80961473c
Component: engine
2016-03-20 15:59:52 -07:00
a76e16e99f Windows libcontainerd implementation
Signed-off-by: John Howard <jhoward@microsoft.com>
Signed-off-by: John Starks <jostarks@microsoft.com>
Signed-off-by: Darren Stahl <darst@microsoft.com>
Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
Upstream-commit: 94d70d835500bec3b171425271916d3e40f29635
Component: engine
2016-03-18 13:38:41 -07:00