Compare commits

..

937 Commits

Author SHA1 Message Date
d866876d86 Merge pull request #259 from andrewhsu/v
[17.10] bump version to 17.10.0-ce-rc1
2017-10-04 14:11:32 -07:00
8ab000a5f4 Merge pull request #256 from vieux/17.10-changelog
[17.10] add 17.10 changelog
2017-10-04 14:08:52 -07:00
c8ede6fcc6 Merge pull request #260 from seemethere/fix_tests_for_1710_release
[17.10] Fix tests for 17.10 release
2017-10-04 14:07:13 -07:00
0d46b8e710 [integration-cli] fix s390x flaky test
s390x node-1 has kernel 4.6.0, kernel.CompareKernelVersion()
returns 0 if the kernels are equal, so include that.

Full logic for CompareKernelVersion() is
a > b ret 1,
a == b ret 0,
a < b ret -1

Signed-off-by: Christopher Jones <tophj@linux.vnet.ibm.com>
(cherry picked from commit aa5ea652c8864f014e1fa480d7e504f0d742c170)
Signed-off-by: Eli Uriegas <eli.uriegas@docker.com>
2017-10-04 13:11:31 -07:00
58f592c0d9 Add note to test changes for rmi
Signed-off-by: Eli Uriegas <eli.uriegas@docker.com>
2017-10-04 10:43:27 -07:00
e58d3abea8 Switch from using lstat to stat in docker cp test. Use the first 12 characters of the ID for the stats test substring.
Signed-off-by: Corbin <corbin.coleman@docker.com>
2017-10-03 14:02:17 -07:00
4f818dd6f7 Add detach flag for scale tests
Signed-off-by: Eli Uriegas <eli.uriegas@docker.com>
2017-09-30 13:23:18 -07:00
d73806305a Changes error check form NotNil to IsNil
rmi -f always returns a 0 exit code so these tests needed to be changed
accordingly.

Signed-off-by: Eli Uriegas <eli.uriegas@docker.com>
(cherry picked from commit 5d1587e61e)
Signed-off-by: Eli Uriegas <eli.uriegas@docker.com>
2017-09-30 13:23:18 -07:00
4e81e4fa4e Blacklist tests, will be rewritten later on
Signed-off-by: Eli Uriegas <eli.uriegas@docker.com>
2017-09-30 13:23:18 -07:00
8a6c4c93b6 Merge pull request #261 from seemethere/ensure_channel
[17.10] ensure channel is allocated
2017-09-30 09:36:10 -07:00
7b99808cac cli/command/container: ensure channel is allocated
Signed-off-by: Stephen J Day <stephen.day@docker.com>
(cherry picked from commit e78772af4d)
Signed-off-by: Eli Uriegas <eli.uriegas@docker.com>
2017-09-29 18:14:51 -07:00
fab4b40e38 bump version to 17.10.0-ce-rc1
Signed-off-by: Andrew Hsu <andrewhsu@docker.com>
2017-09-29 16:12:03 -07:00
079f5eb5e5 removed deprecation line
Signed-off-by: Andrew Hsu <andrewhsu@docker.com>
2017-09-29 15:56:26 -07:00
db0a220cda update punctuation and spacing
Signed-off-by: Andrew Hsu <andrewhsu@docker.com>
2017-09-29 15:47:47 -07:00
71bb1e8c44 add 17.10 changelog
Signed-off-by: Victor Vieux <victorvieux@gmail.com>
2017-09-29 15:47:47 -07:00
328a5917ad Merge component 'engine' from git@github.com:moby/moby master 2017-09-29 22:30:27 +00:00
09bc512154 Merge component 'cli' from git@github.com:docker/cli master 2017-09-29 22:08:57 +00:00
4b8b813d22 Merge pull request #570 from thaJeztah/bump-moby-vendor
Bump moby vendor to 14ce1f1cf48e9859223c6311de58aec4dc
Upstream-commit: 31908a4b45
Component: cli
2017-09-29 23:08:16 +02:00
0e6592d05e Merge pull request #572 from thaJeztah/bump-vendor-for-powerpc
revendor logrus and x/crypto
Upstream-commit: 00cc728dfb
Component: cli
2017-09-29 13:58:38 -07:00
4c4e74cebe Merge pull request #35042 from pradipd/panic_fix
Fixing panic when sandbox is nil
Upstream-commit: ab2b03a0e139537376bbf66c1e1e9e897a403f06
Component: engine
2017-09-29 12:51:55 -07:00
28e35b96d0 Fixing panic when sandbox is nil
Signed-off-by: Pradip Dhara <pradipd@microsoft.com>
Upstream-commit: c4ad0747e929a41ecec7e8c2ae2bd0cc037401ed
Component: engine
2017-09-29 09:23:06 -07:00
c9fbb737e9 Fixes for updated dependencies
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Upstream-commit: 0082310aa5
Component: cli
2017-09-29 17:45:31 +02:00
c9e8020d97 bump moby/moby and dependencies to 14ce1f1cf48e9859223c6311de58aec4dc0f046c
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Upstream-commit: 98dbfeee76
Component: cli
2017-09-29 17:44:49 +02:00
0b195d3e47 Merge pull request #571 from thaJeztah/bump-vndr
Bump vndr to a6e196d8b4b0cbbdc29aebdb20c59ac6926bb384
Upstream-commit: 107f6c6ab2
Component: cli
2017-09-29 17:39:21 +02:00
6230f06c47 revendor logrus and x/crypto
updates to the same version as is currently used
on moby/moby; this bump contains fixes for ppc64le.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Upstream-commit: e3b7700fb9
Component: cli
2017-09-29 15:32:42 +02:00
5edb9ec08c Bump vndr to a6e196d8b4b0cbbdc29aebdb20c59ac6926bb384
Includes a fix to cleanup unused vendor-directories

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Upstream-commit: 368b639e7e
Component: cli
2017-09-29 14:58:05 +02:00
907b966c7e Merge pull request #35029 from fntlnz/builder/cleaning
Cleaning dead code out of the builder
Upstream-commit: de6cb7ab848d6131634e40d21d30bf2fe183e9a3
Component: engine
2017-09-29 16:28:02 +09:00
4034b44eca Cleaning dead code out of the builder
Signed-off-by: Lorenzo Fontana <lo@linux.com>
Upstream-commit: dff2a23749a6b7c949146d7850f514cd74e3a8d7
Component: engine
2017-09-29 02:55:35 +02:00
80c3ad8db1 Merge pull request #35008 from yujuhong/cli-version
Fix version comparison when negotiating the the API version
Upstream-commit: 14ce1f1cf48e9859223c6311de58aec4dc0f046c
Component: engine
2017-09-28 11:58:50 -10:00
d62e09de17 Merge pull request #35025 from Microsoft/jjh/TestRunAttachFailedNoLeak
Windows: RS3: Temporarily disable TestRunAttachFailedNoLeak
Upstream-commit: 048ef0db6a75898aee57bf725ed64940744cd938
Component: engine
2017-09-28 21:59:32 +02:00
5fe53bab44 Merge pull request #565 from thaJeztah/change-stats-format
Change default stats format and add --no-trunc flag
Upstream-commit: 64d5c32b8e
Component: cli
2017-09-28 15:14:43 -04:00
ae273c63d1 Merge component 'engine' from git@github.com:moby/moby master 2017-09-28 10:34:35 -07:00
4330196b5a Windows: RS3: Temporarily disable TestRunAttachFailedNoLeak
Signed-off-by: John Howard <jhoward@microsoft.com>
Upstream-commit: 9e587fa72b8cc42895681efe3d0b9fdcdfe3b06d
Component: engine
2017-09-28 10:15:58 -07:00
e25514ef0c Merge pull request #35004 from thaJeztah/dont-warn-for-comment-only-lines
Warn on empty continuation lines only, not on comment-only lines
Upstream-commit: 94b987043ffd372aad49dfc51c3be2c2f6cff97f
Component: engine
2017-09-28 08:56:30 -07:00
d6eb3e21a4 Merge pull request #35007 from seemethere/fix_service_detach_tests
Explicitly add --detach to service CLI calls
Upstream-commit: 5a4841079bc247937e6ed1042ab24ffd01a8547c
Component: engine
2017-09-28 11:17:14 +02:00
747a47b477 Fix version comparison when negotiating the the API version
Signed-off-by: Yu-Ju Hong <yjhong@google.com>
Upstream-commit: 4b6ec10b07c14e7fff1cc51156b6d954147f826f
Component: engine
2017-09-27 18:42:02 -07:00
d7aeee3eda remove --detach on scale
Signed-off-by: Victor Vieux <victorvieux@gmail.com>
Upstream-commit: 0ad0294124badebe0d9a73f1b7e2f030e4a24e2b
Component: engine
2017-09-27 17:47:51 -07:00
8d23cb5213 Merge pull request #34966 from AkihiroSuda/seccomp
Dockerfile: use seccomp provided by stretch
Upstream-commit: aa02e2b7bc1f5f4b921f64337e4f6d1cf7aa8fe4
Component: engine
2017-09-27 16:21:55 -07:00
ca5a5c5ca1 Explicitly add --detach to service CLI calls
The behavior of service (create/update/scale) was changed in a recent PR
to docker/cli. This commit serves to remedy test failures experienced
when attempting to use service calls.

Should not affect current behavior.

Signed-off-by: Eli Uriegas <eli.uriegas@docker.com>
Upstream-commit: e5b3ebbc649e4b1a10d4cdca342a153c301ec225
Component: engine
2017-09-27 16:17:55 -07:00
f6d296e26e Warn on empty continuation lines only, not for comments
Commit 8d1ae76dcbbb73d8e20c6a14a7d3fe2410b95f55 added
deprecation warnings for empty continuation lines,
but also treated comment-only lines as empty.

This patch distinguishes empty continuation lines
from comment-only lines, and only outputs warnings
for the former.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Upstream-commit: 2fd736ac10c1c46d1001373d887cb99b3d8ee824
Component: engine
2017-09-28 00:11:10 +02:00
00bb761ead Merge pull request #34990 from pradipd/update_field_name
Update field name
Upstream-commit: 853df8f32bf560428fdc39dfd9bfa7bb7c610346
Component: engine
2017-09-27 20:00:18 +02:00
747646833d Merge component 'engine' from git@github.com:moby/moby master 2017-09-27 10:25:04 -07:00
b4a6a3d358 Add --no-trunc option to docker container stats
This patch adds a `--no-trunc` option to `docker container stats`;

With this patch applied, the default output is:

    CONTAINER ID        NAME                                    CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PIDS
    b95a83497c91        awesome_brattain                        0.28%               5.629MiB / 1.952GiB   0.28%               916B / 0B           147kB / 0B          9
    67b2525d8ad1        foobar                                  0.00%               1.727MiB / 1.952GiB   0.09%               2.48kB / 0B         4.11MB / 0B         2
    e5c383697914        test-1951.1.kay7x1lh1twk9c0oig50sd5tr   0.00%               196KiB / 1.952GiB     0.01%               71.2kB / 0B         770kB / 0B          1
    4bda148efbc0        random.1.vnc8on831idyr42slu578u3cr      0.00%               1.672MiB / 1.952GiB   0.08%               110kB / 0B          578kB / 0B          2
    84e3deaa45b2        registry                                0.01%               3.402MiB / 1.952GiB   0.17%               127kB / 378B        233kB / 0B          10
    2ed915778ceb        foo.1.lsmxrefn5yp9c9ijz1hzgdq4u         0.00%               1.727MiB / 1.952GiB   0.09%               166kB / 7.76kB      614kB / 0B          2

Addin the `--no-trunc` option, changes the output to:

    CONTAINER ID                                                       NAME                                    CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PIDS
    b95a83497c9161c9b444e3d70e1a9dfba0c1840d41720e146a95a08ebf938afc   awesome_brattain                        0.25%               5.75MiB / 1.952GiB    0.29%               648B / 0B           147kB / 0B          10
    67b2525d8ad10bb236a49960e93c09993b0baabeef12c2d46cd5f4fbb6f4808c   foobar                                  0.00%               1.727MiB / 1.952GiB   0.09%               2.35kB / 0B         4.11MB / 0B         2
    e5c383697914b98b10cbbc9d0bd324b7b927099ac584f031057b8208d2fba9b1   test-1951.1.kay7x1lh1twk9c0oig50sd5tr   0.00%               196KiB / 1.952GiB     0.01%               71.1kB / 0B         770kB / 0B          1
    4bda148efbc006b0063373c3678083159af89f8cc83a6a28def14cb0dd171f70   random.1.vnc8on831idyr42slu578u3cr      0.00%               1.672MiB / 1.952GiB   0.08%               110kB / 0B          578kB / 0B          2
    84e3deaa45b2fc363e06167df9b90ab59f88d4f101e3f9b8df03a62a8f6783e1   registry                                0.00%               3.387MiB / 1.952GiB   0.17%               127kB / 378B        233kB / 0B          10
    2ed915778cebddf9ec69263a75cfdcf00962a5198d94d42cda75d5cd45bb82f2   foo.1.lsmxrefn5yp9c9ijz1hzgdq4u         0.00%               1.727MiB / 1.952GiB   0.09%               166kB / 7.76kB      614kB / 0B          2

Which is the same as the default before this patch was applied.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Upstream-commit: e63417a9c0
Component: cli
2017-09-27 18:59:25 +02:00
915d4f9741 Merge component 'cli' from git@github.com:docker/cli master 2017-09-27 09:23:02 -07:00
a58b05b91c Update default output format for stats to include ID and Name
The `docker container stats` output has a column (`CONTAINER`), that shows either
the container _id_ or container _name_, depending on the arguments given.

For example, running `docker container stats foobar` shows:

    CONTAINER           CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PIDS
    foobar              0.00%               1.938MiB / 1.952GiB   0.10%               782B / 0B           4.11MB / 0B         2

Whereas `docker container stats 67b2525d8ad1` (`67b2525d8ad1` being the ID for
container `foobar`) shows:

    CONTAINER           CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PIDS
    67b2525d8ad1        0.00%               1.938MiB / 1.952GiB   0.10%               916B / 0B           4.11MB / 0B         2

This behavior is confusing.

This patch updates the default output format for `docker stats` to use separate
columns for container ID and container Name (similar to `docker container ls`).

With this patch applied, both commands show the same output:

    $ docker container stats foobar
    CONTAINER ID                                                       NAME                CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PIDS
    67b2525d8ad10bb236a49960e93c09993b0baabeef12c2d46cd5f4fbb6f4808c   foobar              0.00%               1.938MiB / 1.952GiB   0.10%               1.25kB / 0B         4.11MB / 0B         2

    $ docker container stats 67b2525d8ad1
    CONTAINER ID                                                       NAME                CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PIDS
    67b2525d8ad10bb236a49960e93c09993b0baabeef12c2d46cd5f4fbb6f4808c   foobar              0.00%               1.938MiB / 1.952GiB   0.10%               1.31kB / 0B         4.11MB / 0B         2

Users that want to use the old format can configure a custom format in the
cli configuration file (`~/.docker/config.json`);

on Linux:

    {
      "statsFormat" : "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.MemPerc}}\t{{.NetIO}}\t{{.BlockIO}}\t{{.PIDs}}"
    }

on Windows:

    {
      "statsFormat" : "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.NetIO}}\t{{.BlockIO}}"
    }

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Upstream-commit: 0a78472211
Component: cli
2017-09-27 18:05:51 +02:00
4d03073a2c Merge pull request #34811 from yongtang/runc
Update runc to 0351df1c5a66838d0c392b4ac4cf9450de844e2d
Upstream-commit: 502eddb9859dcd30ce46732b24cefe49cf1ccbd1
Component: engine
2017-09-27 08:44:43 -07:00
d14643fb47 Merge pull request #34792 from runcom/fix-relabel-symlinks
volume: evaluate symlinks before relabeling mount source
Upstream-commit: f60e7aac62a14907132aa5c3bc9d5cf5ca0e6ebc
Component: engine
2017-09-27 17:42:23 +02:00
240408899b Merge pull request #34928 from darrenstahlmsft/HnsRunning
Ensure Host Network Service exists
Upstream-commit: 6af60b3c6180817e06ce87d562643b442a866502
Component: engine
2017-09-27 17:35:08 +02:00
4262667057 Merge pull request #34985 from thaJeztah/remove-use-of-deprecated-filter-functions
Remove use of deprecated filter functions
Upstream-commit: a343cba40c25deb2893e13f9a81dbcc4d19d16e2
Component: engine
2017-09-27 17:34:07 +02:00
7ed1303eb4 Merge pull request #34881 from ityangchen/test-moby
"docker swarm init --force-new-cluster" use limit
Upstream-commit: 0b968f91958eea12c2fa82cec64790cb03367232
Component: engine
2017-09-27 14:11:46 +02:00
689b8ff233 Merge pull request #562 from dnephin/update-gometalinter
Update gometalinter
Upstream-commit: feb4d79935
Component: cli
2017-09-27 09:42:37 +02:00
5a67fa7a37 Merge pull request #563 from riyazdf/remove-extra-options
trust: remove extraneous OPTIONS from commands that do not use it
Upstream-commit: e27e07a8a9
Component: cli
2017-09-27 09:41:33 +02:00
bb1eca37a9 trust: remove extraneous OPTIONS from commands that do not use it
Signed-off-by: Riyaz Faizullabhoy <riyaz.faizullabhoy@docker.com>
Upstream-commit: 9ad0e8f223
Component: cli
2017-09-26 16:15:45 -07:00
e4f32567d3 Updating moby to correspond to naming convention used in https://github.com/docker/swarmkit/pull/2385
Signed-off-by: Pradip Dhara <pradipd@microsoft.com>
Upstream-commit: d00a07b1e6d46c3cc9ef95e8b6227115830e2701
Component: engine
2017-09-26 22:08:10 +00:00
fa385958f4 vndr swarmkit 941a01844b89c56aa61086fecb167ab3af1de22b
Signed-off-by: Pradip Dhara <pradipd@microsoft.com>
Upstream-commit: 8e15b1cffb95d1e82943a628353c6df7cd54f6c4
Component: engine
2017-09-26 22:08:10 +00:00
23c421f3c5 Merge pull request #557 from allencloud/add-more-event-filter-type
Add more event filters in doc: config, node, secret and service
Upstream-commit: 62d62ff513
Component: cli
2017-09-26 22:48:22 +02:00
de74f6b50c Merge pull request #34952 from allencloud/add-specific-event-filter
add node/service/secret/config specific event filter
Upstream-commit: afe31900915782daf67b40d405d8e7b8e01ab2dd
Component: engine
2017-09-26 22:46:41 +02:00
f99bd6dc82 Merge component 'engine' from git@github.com:moby/moby master 2017-09-26 12:50:25 -07:00
dead314452 Refactor image commands to make use of the new trust struct for trusted pull
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 4203b49431
Component: cli
2017-09-26 15:15:42 -04:00
8a5301f81b Merge pull request #34911 from dnephin/new-ci-entrypoint
Add a new entrypoint for CI
Upstream-commit: a971f9c9d7d1bdc69b197a82c3fb010681f5cd1f
Component: engine
2017-09-26 11:50:44 -07:00
1a654751d3 Merge component 'cli' from git@github.com:docker/cli master 2017-09-26 10:56:04 -07:00
7fd47ecc0d Merge pull request #34961 from fcrisciani/libnetwork-vendoring
Vendoring libnetwork
Upstream-commit: 37eb796ccb6de7def92f0ab3f18c686ae92ef29f
Component: engine
2017-09-26 10:50:32 -07:00
09b100cab2 Merge pull request #34973 from darrenstahlmsft/fixError
Fix error string about containers feature
Upstream-commit: 9feef9287474d0e9afe489d9ad0b71a986a012cb
Component: engine
2017-09-26 18:44:12 +02:00
6424aeb9fa Merge pull request #34918 from thaJeztah/update-copy-add-error
Improve error message for COPY missing destination
Upstream-commit: 76b5ab6f43aeffe4261e2b1f848476d36d332880
Component: engine
2017-09-26 18:43:36 +02:00
57c6d20473 Merge pull request #34358 from ripcurld0/fix_link_problem
Add an integration test for bug #31392 regression
Upstream-commit: 584ed9603b4cb79160d0dd8689cdbbdedb9fe00f
Component: engine
2017-09-26 18:41:08 +02:00
f321e1ed9d Update gometalinter
The update includes bug fixes in gometalinter and updates to linters, which
discovered more linter problems.

Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: d956386b2d
Component: cli
2017-09-26 12:33:35 -04:00
2a54e5d16e add node/service/secret/config specific event filter
Signed-off-by: Allen Sun <shlallen1990@gmail.com>
Upstream-commit: 4611ecd3cdc9b2738f58a136b79f752add223f3f
Component: engine
2017-09-27 00:23:51 +08:00
e3c3856028 Merge pull request #34908 from thaJeztah/bump-api-version-1.33
Bump API version to 1.33
Upstream-commit: 74a084162ce544fe995715ba47aa84d3d75b95c1
Component: engine
2017-09-26 18:09:50 +02:00
86f10d67d5 add more event filters in doc: config, node, secret and service
Signed-off-by: Allen Sun <shlallen1990@gmail.com>
Upstream-commit: fc98f8757a
Component: cli
2017-09-27 00:04:56 +08:00
399de7ee20 Merge pull request #551 from dnephin/set-local-constant
Use a local constant
Upstream-commit: 0856c20e04
Component: cli
2017-09-26 17:42:50 +02:00
57dd97eab1 Merge pull request #555 from joaofnfernandes/docs/advertise-addr
Add note about joining through a load balancer
Upstream-commit: b77f3fd5ac
Component: cli
2017-09-26 17:15:42 +02:00
671d46ed3d Merge pull request #34983 from thaJeztah/suppress-tmp-rename-warning
Suppress warning for renaming missing tmp directory
Upstream-commit: 65234597216d03866bc26bdad06cb1f25f832206
Component: engine
2017-09-26 16:53:28 +02:00
9e59512fe4 Merge pull request #451 from tych0/use-pass-backend
Use pass backend
Upstream-commit: be8dab26a3
Component: cli
2017-09-26 16:40:32 +02:00
1fe51e0bb7 document the pass backend and default behavior
Also add a big warning about cleartext passwords.

Signed-off-by: Tycho Andersen <tycho@docker.com>
Upstream-commit: a2f116733b
Component: cli
2017-09-26 08:31:02 -06:00
5dbfedf3f9 Replace uses of filters.ToParam(), FromParam() with filters.ToJSON(), FromJSON()
`filters.ToParam()` and `filters.FromParam()` were deprecated in favor of
`filters.ToJSON()` and `filters.FromJSON()` in 065118390a3ecaf0dbd2fa752d54d43f8f1e8ec6,
but still used in various locations.

This patch replaces uses of `filters.ToParam()` and  `filters.FromParam()` with
`filters.ToJSON()` and `filters.FromJSON()`.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Upstream-commit: a4efe66cf2a7648dbcf5b9993bf351925b905b5b
Component: engine
2017-09-26 13:59:45 +02:00
c4c68bf819 Replace uses of filters.Include() with filters.Contains()
The `filters.Include()` method was deprecated in favor of `filters.Contains()`
in 065118390a3ecaf0dbd2fa752d54d43f8f1e8ec6, but still used in various
locations.

This patch replaces uses of `filters.Include()` with `filters.Contains()`.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Upstream-commit: 97c5ae25c4d857563acd1f3467afc760145b1d55
Component: engine
2017-09-26 13:39:56 +02:00
b987e63572 Update runc to 0351df1c5a66838d0c392b4ac4cf9450de844e2d
This fix updates runc to 0351df1c5a66838d0c392b4ac4cf9450de844e2d

With this fix the warnings generated by netgo and dlopen by go 1.9
are addressed.

See
- opencontainers/runc#1577
- opencontainers/runc#1579

This fix is part of the efforts for go 1.9 (#33892)

Signed-off-by: Yong Tang <yong.tang.github@outlook.com>
Upstream-commit: e0ff1d147bc12234f1be25a620bf6b3bf3179d97
Component: engine
2017-09-26 11:07:27 +00:00
cbf8cc6faf Suppress warning for renaming missing tmp directory
When starting `dockerd` on a host that has no `/var/lib/docker/tmp` directory,
a warning was printed in the logs:

    $ dockerd --data-root=/no-such-directory
    ...
    WARN[2017-09-26T09:37:00.045153377Z] failed to rename /no-such-directory/tmp for background deletion: rename /no-such-directory/tmp /no-such-directory/tmp-old: no such file or directory. Deleting synchronously

Although harmless, the warning does not show any useful information, so can be
skipped.

This patch checks thetype of error, so that warning is not printed.
Other errors will still show up:

    $ touch /i-am-a-file
    $ dockerd --data-root=/i-am-a-file
    Unable to get the full path to root (/i-am-a-file): canonical path points to a file '/i-am-a-file'

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Upstream-commit: 2b50b14aebc12722f81db8d8f66415e1fa7b954a
Component: engine
2017-09-26 12:04:30 +02:00
b4098a4e18 Merge pull request #34968 from chris-crone/integration-test-docker-ee
Docker EE integration test fixes
Upstream-commit: 147443a42665419d8b3c2047a7d345440bfb63c0
Component: engine
2017-09-26 10:50:09 +02:00
48757849a4 Merge pull request #34946 from dnephin/fix-jsonlog
Move pkg/jsonlog to be a subpackage of the single consumer
Upstream-commit: 7d47823c22945bb24a609a7ef20c0559d78d96e4
Component: engine
2017-09-26 10:49:57 +02:00
ec4868350d Add an integration test for bug #31392 regression
This verifies that bug #31392 won't surface again.

To reproduce the bug:
1) docker run -dit --name a0 busybox sh
2) docker run -dit --name b0 --link a0 busybox sh
3) docker rename a0 a1
4) docker run -dit --name a0 busybox sh
5) docker rm -f b0
6) docker run -dit --name b0 --link a0 busybox sh

Signed-off-by: Boaz Shuster <ripcurld.github@gmail.com>
Upstream-commit: 48a26ba9e42f25ebc1ad732b4c0d31e77a7aaa55
Component: engine
2017-09-26 10:55:59 +03:00
fa79e0059e Merge pull request #34943 from tonistiigi/vendor-buildkit
vendor: update buildkit to aaff9d591
Upstream-commit: 4d48baacde3dd6bb9e4c4f8ef1319765ded031f4
Component: engine
2017-09-26 08:37:46 +02:00
3366e8951a Merge pull request #34965 from vdemeester/fix-pkg-mount-unit-test-under-selinux
Fix TestMount under a selinux system
Upstream-commit: 41313c87a25aec122fb43fdaf2433d1b121f1808
Component: engine
2017-09-26 08:37:22 +02:00
401172966f "docker swarm init --force-new-cluster" use limit
Signed-off-by: yangchenliang <yangchenliang@huawei.com>

When worker executor `docker swarm init
--force-new-cluster`,docker would hang.So only manager can process it.

Signed-off-by: yangchenliang <yangchenliang@huawei.com>
Upstream-commit: 12e947efdba5481020f6543514ade83d87c69a28
Component: engine
2017-09-26 12:05:19 +08:00
1608188995 Merge pull request #472 from riyazdf/docker-trust
docker trust: view, revoke, sign subcommands (experimental)
Upstream-commit: af3cdccf52
Component: cli
2017-09-25 17:26:52 -07:00
f367f50630 Move jsonlog to a subpackage of jsonfilelog
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 035604cca6d6bd9a432268caf7515a35023908ed
Component: engine
2017-09-25 16:07:25 -04:00
7d644fb209 Fix benchmarks and remove more unnecessary code.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: a06ad2792ab92d4f246e4b4cc4c3529eb060651e
Component: engine
2017-09-25 16:07:25 -04:00
4701b66889 Remove unused JSONLog marshaling
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 231c5cbd50e1870f31eb6a525b2df2ed7a716565
Component: engine
2017-09-25 16:07:25 -04:00
a001c9d5c7 Remove unused Format
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 638d4cc7e4390ab217be711913017b22ce2cd5c2
Component: engine
2017-09-25 16:07:25 -04:00
0c6f170345 Unexport FastTimeMarshalJSON
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 7de92de636ef307d66b7b20b24f166a47f40f72b
Component: engine
2017-09-25 16:07:25 -04:00
101f740d40 Move RFC3339NanoFixed to a more appropriate package.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 27cfa68af16721c978803c3b695bcc7181ccc721
Component: engine
2017-09-25 16:07:24 -04:00
658351133f Fix error string about containers feature
Signed-off-by: Darren Stahl <darst@microsoft.com>
Upstream-commit: 31405b556f155d8f56902086c7c24efe25dd8de0
Component: engine
2017-09-25 12:39:27 -07:00
3c4574bac3 Ensure Host Network Service exists
If HNS does not exist on the Docker host, the daemon may fail with unexpected
and difficult to diagnose errors. This check prevents the daemon from starting
on a system that does not have the correct prerequisites.

Signed-off-by: Darren Stahl <darst@microsoft.com>
Upstream-commit: 1edcc63560cb1286f452565754092bc2eb428ffa
Component: engine
2017-09-25 11:07:44 -07:00
025e41d2ae Add note about joining through a load balancer
Signed-off-by: Joao Fernandes <joao.fernandes@docker.com>
Upstream-commit: 8595d15d60
Component: cli
2017-09-25 10:53:20 -07:00
702bac1553 mark command as experimental in docs and cli
Signed-off-by: Riyaz Faizullabhoy <riyaz.faizullabhoy@docker.com>
Upstream-commit: e07f345267
Component: cli
2017-09-25 09:39:46 -07:00
e0bca90fda trust: rename inspect to view, add repo name to signer table header
Signed-off-by: Riyaz Faizullabhoy <riyaz.faizullabhoy@docker.com>
Upstream-commit: c6db0cd7a1
Component: cli
2017-09-25 09:39:46 -07:00
94f2b59302 tests: use alice/bob/claire conventional names for signers
Signed-off-by: Riyaz Faizullabhoy <riyaz.faizullabhoy@docker.com>
Upstream-commit: 46a879e3b9
Component: cli
2017-09-25 09:39:46 -07:00
188ec7af2a trust: update remove to error on empty references for consistency
Signed-off-by: Riyaz Faizullabhoy <riyaz.faizullabhoy@docker.com>
Upstream-commit: 4e95fcd72c
Component: cli
2017-09-25 09:39:46 -07:00
a59fc63f3b tests: move trust test to proper package
Signed-off-by: Riyaz Faizullabhoy <riyaz.faizullabhoy@docker.com>
Upstream-commit: 67cf09cbe1
Component: cli
2017-09-25 09:39:46 -07:00
7c83ece8ef trust: update reference type and use golden output
Signed-off-by: Riyaz Faizullabhoy <riyaz.faizullabhoy@docker.com>
Upstream-commit: 4e89dc800a
Component: cli
2017-09-25 09:39:44 -07:00
1659928f34 tests: address review feedback
Signed-off-by: Riyaz Faizullabhoy <riyaz.faizullabhoy@docker.com>
Upstream-commit: 6fca400f1e
Component: cli
2017-09-25 09:38:41 -07:00
51f87f33d4 trust: use mock CLI for testing offline
Signed-off-by: Riyaz Faizullabhoy <riyaz.faizullabhoy@docker.com>
Upstream-commit: f667bd7559
Component: cli
2017-09-25 09:38:40 -07:00
93ba24cc42 cli: introduce NotaryClient getter
Signed-off-by: Riyaz Faizullabhoy <riyaz.faizullabhoy@docker.com>
Upstream-commit: e5c35ab9d1
Component: cli
2017-09-25 09:38:38 -07:00
b53048a314 trust: add Repository client interface
Signed-off-by: Riyaz Faizullabhoy <riyaz.faizullabhoy@docker.com>
Upstream-commit: 7c5b836ca5
Component: cli
2017-09-25 09:34:54 -07:00
e42a2df102 trust: address review feedback, refactor to align with existing cli/command semantics
Signed-off-by: Riyaz Faizullabhoy <riyaz.faizullabhoy@docker.com>
Upstream-commit: 45c102a03d
Component: cli
2017-09-25 09:34:53 -07:00
e92c4686dd docs: update docker trust docs with correct tense and formatting
Signed-off-by: Riyaz Faizullabhoy <riyaz.faizullabhoy@docker.com>
Upstream-commit: 007aff70bf
Component: cli
2017-09-25 09:34:53 -07:00
97f2ec42fa trust revoke: docs for docker trust revoke
Signed-off-by: Riyaz Faizullabhoy <riyaz.faizullabhoy@docker.com>
Upstream-commit: 43717a866e
Component: cli
2017-09-25 09:34:53 -07:00
e8d4ecb361 trust revoke: add docker trust revoke command
Signed-off-by: Riyaz Faizullabhoy <riyaz.faizullabhoy@docker.com>
Upstream-commit: 609f8b4b81
Component: cli
2017-09-25 09:34:53 -07:00
ad5c7cb4bb trust sign: docs for docker trust sign
Signed-off-by: Riyaz Faizullabhoy <riyaz.faizullabhoy@docker.com>
Upstream-commit: bc665ed762
Component: cli
2017-09-25 09:34:53 -07:00
644ae3a3f1 trust sign: add docker trust sign command
Signed-off-by: Riyaz Faizullabhoy <riyaz.faizullabhoy@docker.com>
Upstream-commit: fab6bb6798
Component: cli
2017-09-25 09:34:53 -07:00
1115dc5cef trust inspect: docs for docker trust inspect
Signed-off-by: Riyaz Faizullabhoy <riyaz.faizullabhoy@docker.com>
Upstream-commit: 809ef0fd74
Component: cli
2017-09-25 09:34:53 -07:00
530ee183f1 trust inspect: add docker trust inspect command with formatting print
Signed-off-by: Riyaz Faizullabhoy <riyaz.faizullabhoy@docker.com>
Upstream-commit: ec6bc9460f
Component: cli
2017-09-25 09:34:52 -07:00
742798f154 trust: update existing code for new vendoring, refactor for docker trust code sharing
Signed-off-by: Riyaz Faizullabhoy <riyaz.faizullabhoy@docker.com>
Upstream-commit: 5846e6e5d5
Component: cli
2017-09-25 09:34:52 -07:00
86beae9d05 vendor: upgrade notary version for docker trust
Signed-off-by: Riyaz Faizullabhoy <riyaz.faizullabhoy@docker.com>
Upstream-commit: fb1cbaeb66
Component: cli
2017-09-25 09:34:52 -07:00
0975184f91 Docker EE integration test fixes
Signed-off-by: Christopher Crone <christopher.crone@docker.com>
Upstream-commit: 8c5f98c93e06de81b7fb6416372a3f42aa7aeb5d
Component: engine
2017-09-25 18:09:19 +02:00
0c54b3a041 Improve error message for COPY missing destination
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Upstream-commit: 5d05a8291314b8f727b04b504b8d7fc7ed7f42da
Component: engine
2017-09-25 14:17:18 +02:00
522e6cc8ec Do not use deprecated call for APIClient
Signed-off-by: Christopher Crone <christopher.crone@docker.com>
Upstream-commit: 82440a039f58b6a1487f8042486fe8dba675df54
Component: engine
2017-09-25 14:08:03 +02:00
0b2721b9c1 Protect environment for system integration tests
Signed-off-by: Christopher Crone <christopher.crone@docker.com>
Upstream-commit: d43dac2202667a407f4c5ab061c04b0ea334aa20
Component: engine
2017-09-25 14:05:18 +02:00
e38ecccceb Match not implemented error check to others
Signed-off-by: Christopher Crone <christopher.crone@docker.com>
Upstream-commit: 7406088853b6cbcb8996c367062cee2e1ee6eaaa
Component: engine
2017-09-25 13:58:51 +02:00
954a7de027 Dockerfile: use seccomp provided by stretch
Signed-off-by: Akihiro Suda <suda.akihiro@lab.ntt.co.jp>
Upstream-commit: 1b51a05375b48c5f655fbbedc5a1e7cba044122c
Component: engine
2017-09-25 10:03:37 +00:00
08619d0c7c Fix TestMount under a selinux system
Signed-off-by: Vincent Demeester <vincent@sbr.pm>
Upstream-commit: 8bebd42df2d8eaa0ecdc9c78bc1e395a752eb5c9
Component: engine
2017-09-25 11:54:30 +02:00
5c2be22475 Merge pull request #307 from allencloud/sort-secrets-and-configs-in-cli
using nature sort secrets and configs in cli
Upstream-commit: bd6e1757f5
Component: cli
2017-09-25 09:41:50 +02:00
fdeab20153 sort secrets and configs in cli
Signed-off-by: Allen Sun <shlallen1990@gmail.com>
Upstream-commit: 26f06c5bcb
Component: cli
2017-09-25 13:18:13 +08:00
28762b7242 Vendoring libnetwork
Fix for networkDB garbage collection (PR: https://github.com/docker/libnetwork/pull/1944)
Added extra logs to monitor the netowrkDB status and number of entries per network

Signed-off-by: Flavio Crisciani <flavio.crisciani@docker.com>
Upstream-commit: 04043428ea5ce679618aec2007b77ac51d0b6af0
Component: engine
2017-09-24 16:44:16 -07:00
0f097012c8 Merge pull request #546 from dnephin/fix-version-on-failure
Set APIVersion on the client, even when Ping fails
Upstream-commit: a41caadef0
Component: cli
2017-09-23 09:04:03 -04:00
753a551b2e Merge pull request #552 from allencloud/volume-has-no-id
remove volume id because it only has name
Upstream-commit: 29c4f0df57
Component: cli
2017-09-23 08:58:37 -04:00
a0ff43ff51 remove volume id because it only has name
Signed-off-by: Allen Sun <shlallen1990@gmail.com>
Upstream-commit: fe1c1b6b5c
Component: cli
2017-09-23 11:26:56 +08:00
f3a4b20d25 Use a local constant
This constant is going to be removed from jsonlog package.

Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 32612058cb
Component: cli
2017-09-22 17:59:46 -04:00
278bf3cb85 Merge pull request #34929 from stevvooe/remove-promise-package
pkg/package: remove promise package
Upstream-commit: c982ee805d895a4fc2bf01f2d1d8afa06b408dd0
Component: engine
2017-09-22 11:52:23 -07:00
afac6be123 builder: updates to session after vendor
Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
Upstream-commit: d4729749023fde0c57cded0c8159dc85cd7ee448
Component: engine
2017-09-22 09:51:52 -07:00
441f6cef6d Set APIVersion on the client, even when Ping fails
Refactor to support testing
Also add tests

Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: e828efa4ab
Component: cli
2017-09-22 10:08:19 -04:00
6771dc87e0 Merge pull request #34878 from chchliang/imagebranch
Add  testcases with ` Image` , covering all methods.
Upstream-commit: ba317637de9b9918cdc2139466dd51c6200bd158
Component: engine
2017-09-22 10:08:54 +02:00
793cd3af24 Merge pull request #30696 from yummypeng/lock-RWLayer-while-committing
Fixes #29654: take reference to RWLayer while committing/exporting
Upstream-commit: a157dc53a850dff19ead074f24f9eff61b9d0622
Component: engine
2017-09-22 09:41:57 +02:00
2d68241660 vendor: update buildkit
Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
Upstream-commit: ed6fd3d95bde4651ffb66d37cd1e5e76ee3c1f7b
Component: engine
2017-09-21 22:17:43 -07:00
d1d8439f3f Fixes #29654: take reference to RWLayer while committing/exporting
Take an extra reference to rwlayer while the container is being
committed or exported to avoid the removal of that layer.

Also add some checks before commit/export.

Signed-off-by: Yuanhong Peng <pengyuanhong@huawei.com>
Upstream-commit: 8c32659979150630a2c4eae4e7da944806c46297
Component: engine
2017-09-22 09:47:42 +08:00
6700f361c5 pkg/package: remove promise package
The promise package represents a simple enough concurrency pattern that
replicating it in place is sufficient. To end the propagation of this
package, it has been removed and the uses have been inlined.

While this code could likely be refactored to be simpler without the
package, the changes have been minimized to reduce the possibility of
defects. Someone else may want to do further refactoring to remove
closures and reduce the number of goroutines in use.

Signed-off-by: Stephen J Day <stephen.day@docker.com>
Upstream-commit: 0cd4ab3f9a3f242468484fc62b46e632fdba5e13
Component: engine
2017-09-21 17:56:45 -07:00
3a50fe644a Merge pull request #34861 from tklauser/fix-cstring-leaks
Fix CString memory leaks
Upstream-commit: 777d4a1bf45c85db6931205d4adbe38a17c583d7
Component: engine
2017-09-21 09:14:07 -07:00
e22297f2e2 Merge pull request #34907 from chris-crone/set-test-ostype
Set integration test OSType with environment variable
Upstream-commit: 409d4711812c5c23815a783524e543ec653a234b
Component: engine
2017-09-21 04:13:17 -07:00
9f6a445ef2 Merge pull request #34910 from chris-crone/plugin-list-not-implemented
Handle plugin list not implemented
Upstream-commit: 7d8deaa0db40b8b88d8e5039d23d4fcdb627fc00
Component: engine
2017-09-21 04:12:35 -07:00
aebe8e8ce7 add Images testcase
Signed-off-by: chchliang <chen.chuanliang@zte.com.cn>
Upstream-commit: 832f39c2ed53fc4a91265798198273044448bc7f
Component: engine
2017-09-21 17:54:29 +08:00
0dfdf37ab2 Merge pull request #34914 from euank/000003-percent
overlay2: fix faulty errcheck
Upstream-commit: 48cce229330561c104f777dac4f3f39ef2e2de6e
Component: engine
2017-09-20 19:52:10 -07:00
ccdce91e65 overlay2: fix faulty errcheck
The change in 7a7357dae1bcccb17e9b2d4c7c8f5c025fce56ca inadvertently
changed the `defer` error code into a no-op. This restores its behavior
prior to that code change, and also introduces a little more error
logging.

Signed-off-by: Euan Kemp <euan.kemp@coreos.com>
Upstream-commit: 639ab92f011245e17e9a293455a8dae1eb034022
Component: engine
2017-09-20 15:25:57 -07:00
e55d5634bf Add a new entrypoint for CI
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: dbf580be57a4bb854d7ce20d313e3a22ea337be5
Component: engine
2017-09-20 17:26:30 -04:00
028b015443 Merge pull request #250 from seemethere/update_moby_components_hash
Hash needs to be updated for moby-components script
2017-09-20 13:40:13 -07:00
1e4bfaa04a Hash needs to be updated for moby-components script
Signed-off-by: Eli Uriegas <eli.uriegas@docker.com>
2017-09-20 13:25:51 -07:00
5cb2c664ef Merge pull request #34886 from cpuguy83/may_detach_mount
Automatically set `may_detach_mounts=1` on startup
Upstream-commit: 7d70d0fac339b2ed9715739748c89d0486456407
Component: engine
2017-09-20 11:31:45 -07:00
da0223d365 Set integration test OSType with environment variable
Signed-off-by: Christopher Crone <christopher.crone@docker.com>
Upstream-commit: f0e5b3d7d89c0c87d001faa18bc60fd1b4531901
Component: engine
2017-09-20 19:50:17 +02:00
20c1a2b928 Handle plugin list not implemented
Signed-off-by: Christopher Crone <christopher.crone@docker.com>
Upstream-commit: e7e11bdd44878d28c642d72761aa41eb9ffce3d1
Component: engine
2017-09-20 19:48:33 +02:00
9337e13113 prefer pass backend if it is available
Signed-off-by: Tycho Andersen <tycho@docker.com>
Upstream-commit: 713e87e780
Component: cli
2017-09-20 11:15:49 -06:00
6280c12bb9 version bump for docker-credential-helpers
Signed-off-by: Tycho Andersen <tycho@docker.com>
Upstream-commit: 6bd5c63c78
Component: cli
2017-09-20 11:15:49 -06:00
315e815656 defaultCredentialStore: make this a function
In the next patch, we'll use this to implement some logic about which
password backend to use.

Signed-off-by: Tycho Andersen <tycho@docker.com>
Upstream-commit: 4cf1849418
Component: cli
2017-09-20 11:14:27 -06:00
7e0e805bca Merge pull request #34863 from keloyang/close-pipe
Close pipe in overlay2 graphdriver
Upstream-commit: e40d5e665c6de904ea1e22bb3aa615638ec05e2a
Component: engine
2017-09-20 09:37:15 -07:00
cdbfcd2c1d Merge pull request #545 from thaJeztah/fix-nocopy-description
Fix nocopy description
Upstream-commit: 10e292dbab
Component: cli
2017-09-20 17:54:55 +02:00
36e37bb56e Merge pull request #544 from vdemeester/fix-build-loading
Fix loader error with different build syntax
Upstream-commit: 09c8f47af1
Component: cli
2017-09-20 11:03:54 -04:00
62cdceef74 Fix nocopy description
nocopy does not apply to bind mounts, only volumes

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Upstream-commit: 0e72a6ff81
Component: cli
2017-09-20 16:43:15 +02:00
de0f898e39 Automatically set may_detach_mounts=1 on startup
This is kernel config available in RHEL7.4 based kernels that enables
mountpoint removal where the mountpoint exists in other namespaces.
In particular this is important for making this pattern work:

```
umount -l /some/path
rm -r /some/path
```

Where `/some/path` exists in another mount namespace.
Setting this value will prevent `device or resource busy` errors when
attempting to the removal of `/some/path` in the example.

This setting is the default, and non-configurable, on upstream kernels
since 3.15.

Signed-off-by: Brian Goff <cpuguy83@gmail.com>
Upstream-commit: 83c2152de503012195bd26069fd8fbd2dea4b32f
Component: engine
2017-09-20 09:57:25 -04:00
e2fa4c4d55 Bump API version to 1.33
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Upstream-commit: 15a59e763b6bdb44f28ffafb20e173606308ce2c
Component: engine
2017-09-20 15:19:16 +02:00
7d19908a7b Merge pull request #504 from albers/completion-search--format
Add bash completion for `search --format`
Upstream-commit: da82dcb1db
Component: cli
2017-09-20 14:41:28 +02:00
95b34532ce Fix loader error with different build syntax
`build: .` was not working anymore. Fixing this by adding a new
tranform function for BuildConfig.

Signed-off-by: Vincent Demeester <vincent@sbr.pm>
Upstream-commit: 0da9f14821
Component: cli
2017-09-20 14:02:33 +02:00
c59fc2b89e Merge pull request #352 from albers/fix-completion--credential-spec
Improve bash completion for `--credential-spec`
Upstream-commit: 16804b7313
Component: cli
2017-09-20 11:52:11 +02:00
48266cefa7 Merge pull request #531 from seemethere/add_cross_targets
Add a way to just build windows and osx
Upstream-commit: bd31cb4bd5
Component: cli
2017-09-20 08:52:56 +02:00
0ee27e86a8 Add a way to just build windows and osx
Signed-off-by: Eli Uriegas <eli.uriegas@docker.com>
Upstream-commit: 51080d6148
Component: cli
2017-09-19 16:48:31 -07:00
bb1c0c5aa8 Merge pull request #34846 from Microsoft/jjh/debuggcs
LCOW: Add UVM debugability by grabbing logs before tear-down
Upstream-commit: 7cbbbb95097f065757d38bcccdb1bbef81d10ddb
Component: engine
2017-09-19 22:33:46 +02:00
d9942eee10 Merge pull request #34117 from cpuguy83/decouple_plugin_manager_from_executor
Decouple plugin manager from libcontainerd package
Upstream-commit: b6b85da6576b3e923325897aab9b12d85c014e1b
Component: engine
2017-09-19 21:07:57 +02:00
5338e5013a Merge component 'packaging' from git@github.com:docker/docker-ce-packaging master 2017-09-19 11:14:46 -07:00
46ea757ea5 Merge component 'engine' from git@github.com:moby/moby master 2017-09-19 11:14:35 -07:00
95004c9da9 Merge pull request #31993 from dccurtis/issue-31816
Fixing ‘docker cp’ to allow new target file name in a host symlinked directory
Upstream-commit: 149f3aceb277ecccd33ee815e9c54d6aec782ab5
Component: engine
2017-09-19 10:54:53 -07:00
d382cdf023 Merge pull request #33492 from simonferquel/typed-builder-commands-squashed
[Builder] Introduce a typed command system and 2 phase parse/dispatch build
Upstream-commit: 22e15721b1f33f32f07615e034cf3a7b4c865aa3
Component: engine
2017-09-20 02:52:23 +09:00
6a9321461a Merge pull request #34684 from cpuguy83/fix_selinux_with_mount_api
Set selinux label on local volumes from mounts API
Upstream-commit: 3ddced570dbd7c07291df15bf0b5ac02b04453ca
Component: engine
2017-09-19 13:43:40 -04:00
a5ceeb03a8 Merge component 'cli' from git@github.com:docker/cli master 2017-09-19 10:12:43 -07:00
ddb0ee3757 Revendor Microsoft/opengcs @ v0.3.4
Signed-off-by: John Howard <jhoward@microsoft.com>
Upstream-commit: 2798576b37aa99643a06366f00072b6026c0b77e
Component: engine
2017-09-19 09:56:23 -07:00
cb0c1a12c4 Decouple plugin manager from libcontainerd package
libcontainerd has a bunch of platform dependent code and huge interfaces
that are a pain implement.
To make the plugin manager a bit easier to work with, extract the plugin
executor into an interface and move the containerd implementation to a
separate package.

Signed-off-by: Brian Goff <cpuguy83@gmail.com>
Upstream-commit: c85e8622a4813d7b72d74517faa03ab5de4c4550
Component: engine
2017-09-19 12:17:55 -04:00
84b2d8c7a7 Merge pull request #34732 from vizv/fix-relabel-config-files
daemon: relabel config files.
Upstream-commit: 1bb55e6495cea72d6bca17d90ab25573766d07b3
Component: engine
2017-09-19 08:46:54 -07:00
1411476434 Merge pull request #542 from vdemeester/tidying-loader-test-a-bit
Tidying up compose/loader test a bit
Upstream-commit: 9e162fb011
Component: cli
2017-09-19 17:44:08 +02:00
00de807109 Merge pull request #541 from thaJeztah/fix-service-create-markdown
Fix service_create markdown
Upstream-commit: 68935944b3
Component: cli
2017-09-19 17:17:45 +02:00
13c06c5996 Tidying up compose/loader test a bit
- Use `require` instead of `assert` when the assumption is "breaking" for the code
following. For example when asserting an error is not nil and then doing
`err.Error` on it ; if `err` is nil, the test will panic instead of fail.
- Use `assert.Len` when possible. The error message is better.

Signed-off-by: Vincent Demeester <vincent@sbr.pm>
Upstream-commit: f34655ecf8
Component: cli
2017-09-19 16:48:52 +02:00
f7daf26c0f Set selinux label on local volumes from mounts API
When using a volume via the `Binds` API, a shared selinux label is
automatically set.
The `Mounts` API is not setting this, which makes volumes specified via
the mounts API useless when selinux is enabled.

This fix adopts the same selinux label for volumes on the mounts API as on
binds.
Note in the case of both the `Binds` API and the `Mounts` API, the
selinux label is only applied when the volume driver is the `local`
driver.

Signed-off-by: Brian Goff <cpuguy83@gmail.com>
Upstream-commit: 5bbf5cc671ec8007bf8e0416799fff01d6a79b7e
Component: engine
2017-09-19 10:46:38 -04:00
8828a6255a Merge pull request #537 from vdemeester/add-jenkins-status-to-readme
Add jenkins build status to readme
Upstream-commit: b3aa1195d4
Component: cli
2017-09-19 16:33:33 +02:00
6daf6c2b58 Fix service_create markdown
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Upstream-commit: 01ef9acd31
Component: cli
2017-09-19 16:29:52 +02:00
da00b40eb4 Merge pull request #34721 from kinvolk/iaguis/add-missing-ecryptfs-string
Add missing eCryptfs translation to FsNames
Upstream-commit: 3fa72d38ec61377b506d31711f5cf1b855219926
Component: engine
2017-09-19 05:45:24 -07:00
07893693ca Merge pull request #34891 from Microsoft/jjh/fixcomment
LCOW: Fix comment in graphdriver code
Upstream-commit: 13e8a7a0067ce5d8d458b3a5985691bed0b0f30e
Component: engine
2017-09-19 14:43:35 +02:00
889843574b volume: evaluate symlinks before relabeling mount source
Simple reproducer:

```sh
$ mkdir /var/foo
$ touch /var/foo/test
$ ln -s /var/foo /var/bar
$ docker run -ti -v /var/bar:/var/bar:Z fedora sh
sh-4.3# ls -lZ /var/bar/
ls: cannot open directory '/var/bar/': Permission denied
```

Signed-off-by: Antonio Murdaca <runcom@redhat.com>
Upstream-commit: e0b22c0b9e013527ef121250b51ae780d2d2912d
Component: engine
2017-09-19 10:54:03 +02:00
822098983e Merge pull request #34520 from fnoeding/fixed-raw-splunk-logger
Fixed `raw` mode splunk logger
Upstream-commit: 5c57ca17d50c392b7ad627fc1215d7a7e91e0c41
Component: engine
2017-09-19 10:53:01 +02:00
1cc4bb63c2 Merge pull request #34856 from dnephin/cleanup-version-tests
Replace old version tests
Upstream-commit: 7cd7cf9167fd4bc57889dfe01447f4bb0d52acc2
Component: engine
2017-09-19 10:34:50 +02:00
1cc36398f9 Merge pull request #34495 from ripcurld0/registry_mirror_json
Exit if service config is loaded unsuccessfully on startup
Upstream-commit: b075cd2d78c1bafcded7d12ddb2e7c215e2e5117
Component: engine
2017-09-18 21:59:14 -07:00
a17ffddbf6 Merge pull request #34550 from kolyshkin/libeudev
Update Dockerfiles to use Debian Stretch
Upstream-commit: cfdac1245a8d97ef21fb739ef3e631bdb852bbc7
Component: engine
2017-09-18 21:03:31 -07:00
f8cc2fb021 LCOW: Fix comment in graphdriver code
Signed-off-by: John Howard <jhoward@microsoft.com>
Upstream-commit: f9fc269c204b96b34a479f3e55e41886ed2626b0
Component: engine
2017-09-18 19:52:55 -07:00
b07dcb72fb Close pipe if mountFrom failed.
Signed-off-by: Shukui Yang <yangshukui@huawei.com>
Upstream-commit: 9f38923901352459bb621d0b3587a6517e67eeb3
Component: engine
2017-09-19 01:25:39 +00:00
7ac80a2691 Merge pull request #34674 from pradipd/windows_routingmesh
Enabling ILB/ELB on windows using per-node, per-network LB endpoint.
Upstream-commit: a2ee40b98c281139c75b38e0e11aa35726021169
Component: engine
2017-09-18 15:56:17 -07:00
3303de2b82 Merge pull request #34759 from kolyshkin/gometalinter
Gometalinter fixups for non-x86
Upstream-commit: 65e88d996ad13ad5ca9c2d2c625a87f9271d1e82
Component: engine
2017-09-18 13:44:15 -07:00
b8677707a9 vendoring libnetwork and swarmkit
Signed-off-by: Pradip Dhara <pradipd@microsoft.com>
Upstream-commit: 4c1b07924a7449e6e37fac4479624fcaf01ce889
Component: engine
2017-09-18 20:38:18 +00:00
61af2a7b87 Enabling ILB/ELB on windows using per-node, per-network LB endpoint.
Signed-off-by: Pradip Dhara <pradipd@microsoft.com>
Upstream-commit: 9bed0883e762181ad6c4d5607ae2228e164e44b5
Component: engine
2017-09-18 20:27:56 +00:00
fab90b5b50 Merge pull request #524 from thaJeztah/update-deprecated-api-cors
Update deprecated.md for "api-enable-cors"
Upstream-commit: 139fcd3ee9
Component: cli
2017-09-18 21:37:08 +02:00
f01963dfea Merge pull request #34805 from chris-crone/containerize-integration-tests
Containerize integration tests
Upstream-commit: 9be245f438f9fb2eaeb7891673b16aed9262a192
Component: engine
2017-09-18 21:11:06 +02:00
dd976e6170 integration-cli/docker_cli_logs_test.go: Wait()
To avoid a zombie apocalypse, use cmd.Wait() to properly finish
the processes we spawn by Start().

Found while investigating DockerSuite.TestLogsFollowSlowStdoutConsumer
failure on ARM (see
https://github.com/moby/moby/pull/34550#issuecomment-324937936).

[v2: don't expect no error from Wait() when process is killed]

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
Upstream-commit: 14f0a1888f92667f82bea548bfa2fe4a890a75e8
Component: engine
2017-09-18 11:18:36 -07:00
0a503dae01 Merge pull request #366 from twistlock/plugable_secrets_backend
Plugable secrets backend
Upstream-commit: 3edf97e5a9
Component: cli
2017-09-18 19:25:15 +02:00
50bc0b5a39 Merge pull request #523 from thaJeztah/more-yaml-information
Add more information to the generated YAML for documentation
Upstream-commit: 37ac97c72e
Component: cli
2017-09-18 13:12:39 -04:00
9f902b9066 Merge pull request #526 from thaJeztah/docs-fix-system-prune
Update system prune docs for --volumes flag
Upstream-commit: d4251b4268
Component: cli
2017-09-18 19:10:46 +02:00
5421741502 Add missing eCryptfs translation to FsNames
It was causing the error message to be

    'overlay' is not supported over <unknown>

instead of

    'overlay' is not supported over ecryptfs

Signed-off-by: Iago López Galeiras <iago@kinvolk.io>
Upstream-commit: ddb31b4fdf7311ad6c7e62aa15b5f6da16518e77
Component: engine
2017-09-18 19:06:13 +02:00
133eff770e TestLogsFollowSlowStdoutConsumer: fix for slow ARM
We run our CI on Scaleway C1 machine, which is pretty slow,
including I/O. This test was failing on it, as it tried to
write 100000 lines of log very fast, and the loggerCloseTimeout
(defined and used in container/monitor.go) prevents the
daemon to finish writing it within this time frame,

Reducing the size to 150000 characters (75000 lines) should
help avoiding hitting it, without compromising the test case
itself.

Alternatively, we could have increased the timeout further. It was
originally set to 1s (commit b6a42673a) and later increased 10x
(commit c0391bf55). Please let me know if you want me to go that way.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
Upstream-commit: 1bc93bff221bd30e80f776cc620a8937314569ef
Component: engine
2017-09-18 08:47:55 -07:00
e01e198f54 Introduce a typed command system and 2 phase parse/dispatch build
This is a work base to introduce more features like build time
dockerfile optimisations, dependency analysis and parallel build, as
well as a first step to go from a dispatch-inline process to a
frontend+backend process.

Signed-off-by: Simon Ferquel <simon.ferquel@docker.com>
Upstream-commit: 669c0677980b04bcbf871bb7c2d9f07caccfd42b
Component: engine
2017-09-18 09:48:56 +02:00
3a4f4fd3c4 overlay gd: fix build for 32-bit ARM
This commit reverts a hunk of commit 2f5f0af3f ("Add unconvert linter")
and adds a hint for unconvert linter to ignore excessive conversion as
it is required on 32-bit platforms (e.g. armhf).

The exact error on armhf is this:

	19:06:45 ---> Making bundle: dynbinary (in bundles/17.06.0-dev/dynbinary)
	19:06:48 Building: bundles/17.06.0-dev/dynbinary-daemon/dockerd-17.06.0-dev
	19:10:58 # github.com/docker/docker/daemon/graphdriver/overlay
	19:10:58 daemon/graphdriver/overlay/copy.go:161: cannot use stat.Atim.Sec (type int32) as type int64 in argument to time.Unix
	19:10:58 daemon/graphdriver/overlay/copy.go:161: cannot use stat.Atim.Nsec (type int32) as type int64 in argument to time.Unix
	19:10:58 daemon/graphdriver/overlay/copy.go:162: cannot use stat.Mtim.Sec (type int32) as type int64 in argument to time.Unix
	19:10:58 daemon/graphdriver/overlay/copy.go:162: cannot use stat.Mtim.Nsec (type int32) as type int64 in argument to time.Unix

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
Upstream-commit: b569f57890d4cad132be437e5dac55130b6c76e9
Component: engine
2017-09-17 22:04:31 -07:00
dd4630ca9c Fix test-docker-py on some arches
When running 'make all' on armhf, I got this:

> ---> Making bundle: .integration-daemon-start (in bundles/17.06.0-dev/test-docker-py)
> Using test binary docker
> INFO: Waiting for daemon to start...
> Starting dockerd
> .
> Traceback (most recent call last):
>   File "/usr/local/lib/python2.7/dist-packages/_pytest/config.py", line
> 320, in _importconftest
>     mod = conftestpath.pyimport()
>   File "/usr/local/lib/python2.7/dist-packages/py/_path/local.py", line
> 662, in pyimport
>     __import__(modname)
>   File "/docker-py/tests/integration/conftest.py", line 6, in <module>
>     import docker.errors
>   File "/docker-py/docker/__init__.py", line 2, in <module>
>     from .api import APIClient
>   File "/docker-py/docker/api/__init__.py", line 2, in <module>
>     from .client import APIClient
>   File "/docker-py/docker/api/client.py", line 11, in <module>
>     from .build import BuildApiMixin
>   File "/docker-py/docker/api/build.py", line 6, in <module>
>     from .. import auth
>   File "/docker-py/docker/auth.py", line 6, in <module>
>     import dockerpycreds
> ImportError: No module named dockerpycreds
> ERROR: could not load /docker-py/tests/integration/conftest.py

The fix for this was already provided by commit 0ec8f56a3 and
commit c7c923594, but for some reason it did not made its way
to Dockerfiles for all architectures.

While at it, remove excessive comments.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
Upstream-commit: 7439d360fd567e063b8e9c4174a5c21b9fbc06aa
Component: engine
2017-09-17 22:04:31 -07:00
a14ef1d5fc devmapper: tell why xfs is not supported
Instead of providing a generic message listing all possible reasons
why xfs is not available on the system, let's be specific.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
Upstream-commit: c21245c9200ab39a9219b28f8185573b78a55074
Component: engine
2017-09-17 22:04:31 -07:00
e3dc487328 devmapper: show dmesg if mount fails
If mount fails, the reason might be right there in the kernel log ring buffer.
Let's include it in the error message, it might be of great help.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
Upstream-commit: 46833ee1c353c247e3ef817a08d5a35a2a43bdf3
Component: engine
2017-09-17 22:04:31 -07:00
a4c2f1d0c4 devmapper: don't create too new xfs
Since the update to Debian Stretch, devmapper unit test fails. One
reason is, the combination of somewhat old (less than 3.16) kernel and
relatively new xfsprogs leads to creating a filesystem which is not supported
by the kernel:

> [12206.467518] XFS (dm-1): Superblock has unknown read-only compatible features (0x1) enabled.
> [12206.472046] XFS (dm-1): Attempted to mount read-only compatible filesystem read-write.
> Filesystem can only be safely mounted read only.
> [12206.472079] XFS (dm-1): SB validate failed with error 22.

Ideally, that would be automatically and implicitly handled by xfsprogs.
In real life, we have to take care about it here. Sigh.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
Upstream-commit: 6b01bc5adb1255cb48e22e755ab86fd2c3305211
Component: engine
2017-09-17 22:04:31 -07:00
c25f7e149b Dockerfiles: fix test-docker-py
Presumably after switch to debian-stretch as a base, the following
errors happens in Jenkins:

10:48:03 ---> Making bundle: test-docker-py (in
bundles/17.06.0-dev/test-docker-py)
10:48:03 ---> Making bundle: .integration-daemon-start (in
bundles/17.06.0-dev/test-docker-py)
10:48:03 Using test binary docker
10:48:03 # DOCKER_EXPERIMENTAL is set: starting daemon with experimental
features enabled!
10:48:03 /etc/init.d/apparmor: 130: /etc/init.d/apparmor:
systemd-detect-virt: not found
10:48:03 Starting AppArmor profiles:Warning from stdin (line 1):
/sbin/apparmor_parser: cannot use or update cache, disable, or
force-complain via stdin
10:48:03 Warning failed to create cache: (null)
10:48:03 .
10:48:03 INFO: Waiting for daemon to start...
10:48:03 Starting dockerd
10:48:05 .
10:48:06 Traceback (most recent call last):
10:48:06   File
"/usr/local/lib/python2.7/dist-packages/_pytest/config.py", line 320, in
_importconftest
10:48:06     mod = conftestpath.pyimport()
10:48:06   File
"/usr/local/lib/python2.7/dist-packages/py/_path/local.py", line 662, in
pyimport
10:48:06     __import__(modname)
10:48:06   File "/docker-py/tests/integration/conftest.py", line 6, in
<module>
10:48:06     import docker.errors
10:48:06   File "/docker-py/docker/__init__.py", line 2, in <module>
10:48:06     from .api import APIClient
10:48:06   File "/docker-py/docker/api/__init__.py", line 2, in <module>
10:48:06     from .client import APIClient
10:48:06   File "/docker-py/docker/api/client.py", line 6, in <module>
10:48:06     import requests
10:48:06 ImportError: No module named requests
10:48:06 ERROR: could not load /docker-py/tests/integration/conftest.py
10:48:06

and

00:38:55   File "/docker-py/docker/transport/ssladapter.py", line 21, in
<module>
00:38:55     from backports.ssl_match_hostname import match_hostname
00:38:55 ImportError: No module named backports.ssl_match_hostname
00:38:55 ERROR: could not load /docker-py/tests/integration/conftest.py

To fix, install the missing python modules.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
Upstream-commit: ce2a0120c1925492a9bb7f6339cdbf716a4c50e0
Component: engine
2017-09-17 22:04:31 -07:00
c53f4217c9 TestRunSeccompProfileAllow32Bit: fix
Since the update to Debian Stretch, this test fails. The reason is dynamic
binary, which requires i386 ld.so for loading (and apparently it is no longer
installed by default):

> root@09d4b173c3dc:/go/src/github.com/docker/docker# file exit32-test
> exit32-test: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, BuildID[sha1]=a0d3d6cb59788453b983f65f8dc6ac52920147b6, stripped
> root@09d4b173c3dc:/go/src/github.com/docker/docker# ls -l /lib/ld-linux.so.2
> ls: cannot access '/lib/ld-linux.so.2': No such file or directory

To fix, just add -static.

Interestingly, ldd can'f figure it out.

> root@a324f8edfcaa:/go/src/github.com/docker/docker# ldd exit32-test
>	not a dynamic executable

Other tools (e.g. objdump) also show it's a dynamic binary.

While at it, remove the extra "id" argument (a copy-paste error I
guess).

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
Upstream-commit: 771256b305c8c06fca5eb1d041b60fbe093c0e1b
Component: engine
2017-09-17 22:04:31 -07:00
322ee8f812 devmapper gd: disable for static build
Static build with devmapper is impossible now since libudev is required
and no static version of libudev is available (as static libraries are
not supported by systemd which udev is part of).

This should not hurt anyone as "[t]he primary user of static builds
is the Editions, and docker in docker via the containers, and none
of those use device mapper".

Also, since the need for static libdevmapper is gone, there is no need
to self-compile libdevmapper -- let's use the one from Debian Stretch.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
Upstream-commit: 84f1c054e66d3999aaf2751062cda8a77925b7ae
Component: engine
2017-09-17 22:04:31 -07:00
8fb9073dbb Update Dockerfiles to use Debian stretch
The main gain here is that they all use exactly the same distro; previously
arm64 was using Ubuntu Xenial because Debian jessie was too old.

Does not seem that we can change any of the downloaded dependencies still,
as eg libseccomp is still not the version we are using.

Signed-off-by: Justin Cormack <justin.cormack@docker.com>
Upstream-commit: e89a5e5e91476102a471797fc2a81aa2f0f2b3fb
Component: engine
2017-09-17 22:02:13 -07:00
5681a2921d Exit if service config is loaded unsuccessfully on startup
Signed-off-by: Boaz Shuster <ripcurld.github@gmail.com>
Upstream-commit: 5258297dac1e32c8dd1caff528d321ac7eb4a87c
Component: engine
2017-09-17 18:50:16 +03:00
af2e8abbf0 Merge pull request #34842 from dnephin/fix-integration-on-timeout
[integration-cli] Only attempt to find pid with local daemon
Upstream-commit: c5c0702a4d523071b3e41a13c233b6ec9e261b06
Component: engine
2017-09-16 06:48:18 -07:00
347269ee44 Merge pull request #52 from thaJeztah/switch-to-arm64v8
Switch aarch64 images to arm64v8
Upstream-commit: a1debdbcf0220c10799fce225f2f189e681de385
Component: packaging
2017-09-15 18:54:10 -07:00
19d23646ea Merge pull request #51 from thaJeztah/switch-to-arm32v7
Switch armhf images to arm32v7
Upstream-commit: dfb5b129949527991b6ef9fa1d82c1a8a3f412eb
Component: packaging
2017-09-15 18:53:37 -07:00
35f91d208e Switch aarch64 images to arm64v8
The "aarch64" images on Docker Hub are deprecated
in favor of the "arm64v8" images.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Upstream-commit: cc436770b773767ad59e766be66323282b030d33
Component: packaging
2017-09-16 03:10:07 +02:00
4609e2004f Switch armhf images to arm32v7
The "armhf" images on Docker Hub are deprecated
in favor of the "arm32v7" and "arm32v6" images.

Note that the Alpine image is built for arm32v6,
which is compatible for both arm32v6 and arm32v7.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Upstream-commit: 2b8d4afddf118b809157f4249a45656cfaa96cd3
Component: packaging
2017-09-16 03:05:34 +02:00
a8090896a0 Merge pull request #34252 from Microsoft/akagup/lcow-remotefs-sandbox
LCOW: Support for docker cp, ADD/COPY on build
Upstream-commit: a5f9783c930834b8e6035fb0ad9c22fd4bbfc355
Component: engine
2017-09-15 16:49:48 -07:00
d8ebaa5838 Replace old version tests
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 813d2e082a094d11bda0d0f5a708ce30805ab28e
Component: engine
2017-09-15 12:56:09 -04:00
a785d9466c Merge pull request #535 from thaJeztah/remove-swp-file
Remove .swp file that was accidentally added
Upstream-commit: 6d614ec54d
Component: cli
2017-09-15 16:13:31 +02:00
892a44a627 Various fixes
Signed-off-by: Christopher Crone <christopher.crone@docker.com>
Upstream-commit: b7d8d2c4ab709f072cbdc4f89a8c80065648757e
Component: engine
2017-09-15 16:01:15 +02:00
2a72ee1fde Merge pull request #509 from xificurC/fix-secrets-and-configs-idempotence
sort secrets and configs to ensure idempotence
Upstream-commit: a09a2c6d15
Component: cli
2017-09-15 15:43:59 +02:00
adba854430 Merge pull request #34849 from chchliang/testlayer
add testcase in layer/empty_test.go with Platform(),Metadata()
Upstream-commit: 5c10698d5c5223f9cb49704124be592e3d39d0df
Component: engine
2017-09-15 06:39:20 -07:00
2a306cdba9 Add jenkins build status to readme
Signed-off-by: Vincent Demeester <vincent@sbr.pm>
Upstream-commit: c56d7ec37f
Component: cli
2017-09-15 15:08:28 +02:00
04f1d90792 Merge pull request #532 from dnephin/fix-e2e-fixture
Fix e2e test by using a pinned version of alpine
Upstream-commit: 9053aa1038
Component: cli
2017-09-15 14:49:37 +02:00
eae91199bd Remove .swp file that was accidentally added
This file was added by accident in dd95731a21
and not noticed during review.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Upstream-commit: e612236a3d
Component: cli
2017-09-15 13:20:40 +02:00
b66e771f48 Merge pull request #534 from mion00/document_node_hostname_templating
Document .Node.Hostname templating
Upstream-commit: e2ee30ae42
Component: cli
2017-09-15 13:02:31 +02:00
3223c51c8a Remove erroneous Println
Signed-off-by: Christopher Crone <christopher.crone@docker.com>
Upstream-commit: eb396e8984ce64ea6ee9c04905780d74ed7d8d8b
Component: engine
2017-09-15 13:02:27 +02:00
b43594fccc Merge pull request #442 from jhowardmsft/jjh/34508docs
Docs for Windows daemon graphdriver options
Upstream-commit: 5a7f25f24c
Component: cli
2017-09-15 12:19:14 +02:00
a5b24016fd Document .Node.Hostname templating
Update placeholders table and add example code
Follow up to moby/moby#34686

Signed-off-by: Carlo Mion <mion00@gmail.com>
Upstream-commit: 21825b6842
Component: cli
2017-09-15 10:23:56 +02:00
5086fdcfde Fix CString memory leaks
Make sure to call C.free on C string allocated using C.CString in every
exit path.

C.CString allocates memory in the C heap using malloc. It is the callers
responsibility to free them. See
https://golang.org/cmd/cgo/#hdr-Go_references_to_C for details.

Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
Upstream-commit: 593dbfd1448e8dac08488786fde6fe7fb057bdac
Component: engine
2017-09-15 09:57:26 +02:00
ae2d031a76 add testcase in layer/empty_test.go with Metadata()
Signed-off-by: chchliang <chen.chuanliang@zte.com.cn>
Upstream-commit: c72112b171ac046d11e8279b799315e962332450
Component: engine
2017-09-15 14:13:48 +08:00
70abc439d8 Merge pull request #34258 from simonferquel/lcow-mounts
LCOW: Prepare work for bind mounts
Upstream-commit: 0300fa7f806f978451c09ebbff402ddd34e928d9
Component: engine
2017-09-14 15:00:08 -07:00
a641c1b7f0 Add LCOW behind experimental,
might not be the cleanest way, but it's definitly the way with the
minimum code change.

Signed-off-by: Victor Vieux <victorvieux@gmail.com>
Upstream-commit: ff686743c50dc34b57f5627ba6fee38502bdd3ec
Component: engine
2017-09-14 13:51:16 -07:00
aeb89eb179 Volume refactoring for LCOW
Signed-off-by: Simon Ferquel <simon.ferquel@docker.com>
Upstream-commit: e89b6e8c2d2c36c43f22aeaf2a885646c2994051
Component: engine
2017-09-14 12:33:31 -07:00
cddfe04f6a LCOW: Implemented support for docker cp + build
This enables docker cp and ADD/COPY docker build support for LCOW.
Originally, the graphdriver.Get() interface returned a local path
to the container root filesystem. This does not work for LCOW, so
the Get() method now returns an interface that LCOW implements to
support copying to and from the container.

Signed-off-by: Akash Gupta <akagup@microsoft.com>
Upstream-commit: 7a7357dae1bcccb17e9b2d4c7c8f5c025fce56ca
Component: engine
2017-09-14 12:07:52 -07:00
14427ba493 Vendor containerd/continuity@22694c680e
Signed-off-by: Akash Gupta <akagup@microsoft.com>
Upstream-commit: ba13c173d1704168b918705b827963dc6e3900ab
Component: engine
2017-09-14 12:00:38 -07:00
29ef2e0479 Merge pull request #34217 from yongtang/34208-http-add-root
Fix build with `ADD` urls without any sub path
Upstream-commit: d60c1866679f9fcd5701eedabe49e9fa11228b08
Component: engine
2017-09-14 11:55:24 -07:00
f34f36be87 Merge pull request #34332 from clnperez/logrus-revendor
revendor logrus and x/crypto
Upstream-commit: 2a54dc080471476037c87cc6961cc126368ffdd9
Component: engine
2017-09-14 11:29:05 -07:00
44733ed80a Fixes after dnephin review
Signed-off-by: Christopher Crone <christopher.crone@docker.com>
Upstream-commit: 7dabed019a7aac9b317b586d582431eef3b65e33
Component: engine
2017-09-14 19:27:09 +02:00
6cc83af533 Fix Windows build
Signed-off-by: Christopher Crone <christopher.crone@docker.com>
Upstream-commit: 81f69a593146f61d3f6568403168ba28b1714f97
Component: engine
2017-09-14 19:27:09 +02:00
82ba6d5d3e Test requires SameHostDaemon
Signed-off-by: Christopher Crone <christopher.crone@docker.com>
Upstream-commit: 61b13ba0d12aeeadc1c08eae62ba83f62208a6d3
Component: engine
2017-09-14 19:27:09 +02:00
414afe084c Correct log message
Signed-off-by: Christopher Crone <christopher.crone@docker.com>
Upstream-commit: 5eab08930c9c2d39bb76fd6320e9979b504750a6
Component: engine
2017-09-14 19:27:09 +02:00
a13cdc241b Set client version instead of negotiating it
Signed-off-by: Christopher Crone <christopher.crone@docker.com>
Upstream-commit: 85431566a81792e3612df3b6b858f7b0c3506883
Component: engine
2017-09-14 19:27:09 +02:00
454535ed22 Bring up DockerNetworkSuite
Signed-off-by: Christopher Crone <christopher.crone@docker.com>
Upstream-commit: 42d812df0a12d92fad1f327f0b0f5d9eb7a9f107
Component: engine
2017-09-14 19:27:09 +02:00
58906ac91c Remove race and split TestAPINetworkInspect test
Signed-off-by: Christopher Crone <christopher.crone@docker.com>
Upstream-commit: 6936ce3b65f149ba6ab1cd5c257358c06eb9cdbb
Component: engine
2017-09-14 19:27:09 +02:00
4d643fb18a Fixes for dnephin review
Signed-off-by: Christopher Crone <christopher.crone@docker.com>
Upstream-commit: 86f9eb4a085a61b3355dc38452c47def806bf7c9
Component: engine
2017-09-14 19:27:09 +02:00
f23d5bec57 Skip some tests for E2E
Signed-off-by: Christopher Crone <christopher.crone@docker.com>
Upstream-commit: f089a1df393228085c4895b8db0fa95128173398
Component: engine
2017-09-14 19:27:09 +02:00
abba79d025 Check integration test requirements using daemon
When running against a remote daemon, we cannot use the local
filesystem to determine configuration.

Signed-off-by: Christopher Crone <christopher.crone@docker.com>
Upstream-commit: b1fb41988dc1b7071a58f76f6ad2730fc1a02eca
Component: engine
2017-09-14 19:27:09 +02:00
2801aaa58e Use TLS for tests if needed
Signed-off-by: Christopher Crone <christopher.crone@docker.com>
Upstream-commit: 0bdba0e91a072ee2cdecb4e632c13f187eb88e9c
Component: engine
2017-09-14 19:27:09 +02:00
e3234a8303 Fix tests that depend on clean environment
Signed-off-by: Christopher Crone <christopher.crone@docker.com>
Upstream-commit: dc6ddfa8415d90e9a9788d5cfd5a10c17449bbc9
Component: engine
2017-09-14 19:27:09 +02:00
fe0ff1cb68 Add E2E requirement for integration tests
Signed-off-by: Christopher Crone <christopher.crone@docker.com>
Upstream-commit: d622e81af50f4690d5867a89b430d1b94707fd26
Component: engine
2017-09-14 19:27:09 +02:00
559acd0f8b Containerize integration tests
Signed-off-by: Christopher Crone <christopher.crone@docker.com>
Upstream-commit: 07f10d8e2e2214000635c32d23f9435fa3fb48b8
Component: engine
2017-09-14 19:27:09 +02:00
16788ee2e5 Protect entire environment when testing
Signed-off-by: Christopher Crone <christopher.crone@docker.com>
Upstream-commit: 063c89c71fd1fbeb7ef7c46f43ee805b620e7136
Component: engine
2017-09-14 19:27:09 +02:00
9c49974512 Allow protection of entire environment during tests
Signed-off-by: Christopher Crone <christopher.crone@docker.com>
Upstream-commit: 0520581523caeacdf718a2dd1db2958c24b47cf6
Component: engine
2017-09-14 19:27:09 +02:00
b3c31e9800 Add unit test to cover changes.
Signed-off-by: Yong Tang <yong.tang.github@outlook.com>
Upstream-commit: 027297a60f5f5a70e1e3eb3a68280f64c66bc877
Component: engine
2017-09-14 16:17:38 +00:00
ac38bbaf63 Fix build with ADD urls without any sub path
This fix tries to address the issue raised in #34208 where
in Dockerfile an `ADD` followed by an url without any sub path
will cause an error.

The issue is because the temporary filename relies on the sub path.

An integration test has been added.

This fix fixes #34208.

Signed-off-by: Yong Tang <yong.tang.github@outlook.com>
Upstream-commit: bea0a072d86604071c99e9b6989b19ca4fe22032
Component: engine
2017-09-14 16:17:38 +00:00
97847089f1 revendor logrus and x/crypto
this fixes the issue that was blocking a test from running on ppc64le.
the logrus revendor changes the color code used in that same test, so
that breaks the test for all platforms (updated in this pr)

Signed-off-by: Christy Perez <christy@linux.vnet.ibm.com>
Upstream-commit: 008b217844f8738cc47ef9ff108dc41dc37736cc
Component: engine
2017-09-14 11:05:47 -05:00
1546d32eb0 Only attempt to find pid with local daemon
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 014cecda464fb1171e613676e0a8a85c02ec1674
Component: engine
2017-09-14 12:05:18 -04:00
c95e22b252 Merge pull request #34837 from tophj-ibm/switch-hub-test-to-alpine
[integration-cli] fix p/z HubPullSuite tests
Upstream-commit: 3a081f53c150190201ddb05c97344ed5071446b0
Component: engine
2017-09-14 18:02:13 +02:00
6c749ced41 Fix e2e test by using a pinned version of alpine
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: ab2e219116
Component: cli
2017-09-14 11:38:46 -04:00
023fe0b32f [integration-cli] fix p/z HubPullSuite tests
This test tries to pull all the tags in the busybox repo and looks to see
if there were more than two images pulled. This was failing on
p/z due to the recent change to manifest lists, where one of the busybox
tags didn't have a p/z manifest in it's manifest list.

This error seems fine to me, so I changed the test to see if pull fails,
it fails with the "manifest not found" error.

Also switched from busybox -> alpine, because it has significantly less tags,
and the images are close in size.

Signed-off-by: Christopher Jones <tophj@linux.vnet.ibm.com>
Upstream-commit: 5739ba1b918402b8eda748ac2f5dd7ce00f2e69f
Component: engine
2017-09-14 09:42:09 -04:00
93617a3f74 Merge pull request #34784 from dnephin/fix-client-not-found
Cleanup client not found errors
Upstream-commit: bb0e8ee51c8940c3ce23e4f594068612203c6139
Component: engine
2017-09-14 12:04:56 +02:00
c30f13232a Merge pull request #34686 from mion00/templating-node-hostname-support
Add support for .Node.Hostname templating in swarm services
Upstream-commit: 2ee8ef864f9fb9c31848fe10a61605a39fb81635
Component: engine
2017-09-13 21:06:11 -07:00
803b5f0e94 Merge pull request #34821 from thaJeztah/remove-enable-api-cors
Remove deprecated --enable-api-cors flag
Upstream-commit: dc35a8a5d22b6c828cd105be7c62b72919df25cd
Component: engine
2017-09-13 20:10:27 -07:00
63f4bb52b4 Merge pull request #34828 from allencloud/add-config-tags-in-swagger
add configs tag in swagger.yml
Upstream-commit: 80edccda708c6771824c245b4d634c2a9ce29795
Component: engine
2017-09-14 02:37:28 +02:00
4fe1c1584a Merge pull request #34844 from kolyshkin/lvm2-fix
Fix fetching LVM2 sources
Upstream-commit: a8f6e60bfc95421f0d8539fddaecd32642cd947f
Component: engine
2017-09-14 02:01:14 +02:00
150f7f6a55 Add more information about commands to generated YAML docs
This patch adds aditional information about commands to the YAML files
that are generated for the reference documentation.

The following fields are added for each command:

Property          | Type      | Description
------------------|-----------|---------------------------------------------------------------------------------------
deprecated        | Boolean   | Indicates if the command is marked deprecated
min_api_version   | String    | The API version required to use this command (e.g. "1.23")
experimental      | Boolean   | Indicates if the command requires the daemon to run with experimental features enabled

For example (taken from the experimental `docker checkpoint create` command):

    command: docker checkpoint create
    short: Create a checkpoint from a running container
    long: Create a checkpoint from a running container
    usage: docker checkpoint create [OPTIONS] CONTAINER CHECKPOINT
    pname: docker checkpoint
    plink: docker_checkpoint.yaml
    options:
    - option: checkpoint-dir
      value_type: string
      description: Use a custom checkpoint storage directory
      deprecated: false
      experimental: false
    - option: leave-running
      value_type: bool
      default_value: "false"
      description: Leave the container running after checkpoint
      deprecated: false
      experimental: false
    deprecated: false
    min_api_version: "1.25"
    experimental: true

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Upstream-commit: 1f48e75c5c
Component: cli
2017-09-14 00:48:22 +02:00
46def61677 Add more information about command flags to generated YAML docs
This patch adds aditional information about command flags to the YAML files
that are generated for the reference documentation.

The following fields are added for each flag:

Property          | Type      | Description
------------------|-----------|---------------------------------------------------------------------------------------
value_type        | String    | The "type" of value to be passed to this flag (e.g., `uint64`, `list`)
deprecated        | Boolean   | Indicates if the flag is marked deprecated
min_api_version   | String    | The API version required to use this flag (e.g. "1.23")
experimental      | Boolean   | Indicates if the flag requires the daemon to run with experimental features enabled

For example (taken from the `docker image build` command):

    - option: security-opt
      value_type: stringSlice
      default_value: '[]'
      description: Security options
      deprecated: false
      experimental: false
    - option: shm-size
      value_type: bytes
      default_value: "0"
      description: Size of /dev/shm
      deprecated: false
      experimental: false
    - option: squash
      value_type: bool
      default_value: "false"
      description: Squash newly built layers into a single new layer
      deprecated: false
      min_api_version: "1.25"
      experimental: true

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Upstream-commit: a8ba6f93d9
Component: cli
2017-09-14 00:47:42 +02:00
c752d6bc2e Update system prune docs for --volumes flag
The `--volumes` flag was added in 37fd6128dc,
but the documentation was not updated.

This patch updates the documentation.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Upstream-commit: b4db84de69
Component: cli
2017-09-14 00:42:12 +02:00
d011c4127f LCOW: Add GCS debugging
Signed-off-by: John Howard <jhoward@microsoft.com>
Upstream-commit: 5a0e2beac330d49c2b7436bf29e87d52dab4f557
Component: engine
2017-09-13 14:54:34 -07:00
08356f8921 Fix fetching LVM2 sources
Version 2.02.173 has disappeared, let's revert back to latest stable
one.

https://github.com/moby/moby/issues/34843

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
Upstream-commit: a436d8a634392f9e82b6930a560d56900d887ce7
Component: engine
2017-09-13 14:34:36 -07:00
69753f2d25 Merge pull request #513 from shouze/reset-id-pair-during-build-to-avoid-cache-busting
Reset uid/gid to 0 in build context to fix cache busting issues on ADD/COPY
Upstream-commit: 7b77ab5c60
Component: cli
2017-09-13 15:19:26 -04:00
57a43e8ab0 Merge pull request #34775 from darrenstahlmsft/RevendorHcsshim
Update hcsshim to v0.6.5
Upstream-commit: a15cdd707acc37e7bc5dd618a461618c3a0cda20
Component: engine
2017-09-13 11:14:36 -07:00
07369b8b77 Merge pull request #34809 from dnephin/add-gosimple-linter
Add gosimple linter
Upstream-commit: e51bc3ecd04d950f8854947ec8906937eaf87129
Component: engine
2017-09-13 12:44:59 -04:00
1a8ec36d61 Merge pull request #529 from thaJeztah/bump-version
Bump version to 17.10.0-dev
Upstream-commit: acc29884fa
Component: cli
2017-09-13 18:21:01 +02:00
7742f2c56c Merge pull request #481 from cdrage/add-build-to-service-config
Add 'build' to types.go
Upstream-commit: 2eb31e6b60
Component: cli
2017-09-13 18:20:42 +02:00
8453ea8ddd Merge pull request #525 from thaJeztah/change-detach-default
Use non-detached mode as default for service commands
Upstream-commit: e5aeb4b5e8
Component: cli
2017-09-13 11:35:08 -04:00
f7e5e8fdc8 Add 'build' to types.go
This adds 'build' to types.go in order for projects that use docker/cli
to parse Docker Compose files to correctly retrieve `build` keys

Signed-off-by: Charlie Drage <charlie@charliedrage.com>
Upstream-commit: 9bdb0763b9
Component: cli
2017-09-13 10:47:17 -04:00
002e234c45 Merge pull request #34829 from Microsoft/jjh/spotfix
LCOW: Spot fix for multi-os image pulling
Upstream-commit: 0dbc182b6c4f6a72933680f98a6240a7681d94ee
Component: engine
2017-09-13 14:32:15 +02:00
b402c14275 Bump version to 17.10.0-dev
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Upstream-commit: e17475e935
Component: cli
2017-09-13 14:08:56 +02:00
ad105d4aec Use non-detached mode as default for service commands
Commit 330a0035334871d92207b583c1c36d52a244753f added a `--detach=false` option
to various service-related commands, with the intent to make this the default in
a future version (17.09).

This patch changes the default to use "interactive" (non-detached), allowing
users to override this by setting the `--detach` option.

To prevent problems when connecting to older daemon versions (17.05 and below,
see commit db60f25561), the detach option is
ignored for those versions, and detach is always true.

Before this change, a warning was printed to announce the upcoming default:

    $ docker service create nginx:alpine
    saxiyn3pe559d753730zr0xer
    Since --detach=false was not specified, tasks will be created in the background.
    In a future release, --detach=false will become the default.

After this change, no warning is printed, but `--detach` is disabled;

    $ docker service create nginx:alpine
    y9jujwzozi0hwgj5yaadzliq6
    overall progress: 1 out of 1 tasks
    1/1: running   [==================================================>]
    verify: Service converged

Setting the `--detach` flag makes the cli use the pre-17.06 behavior:

    $ docker service create --detach nginx:alpine
    280hjnzy0wzje5o56gr22a46n

Running against a 17.03 daemon, without specifying the `--detach` flag;

    $ docker service create nginx:alpine
    kqheg7ogj0kszoa34g4p73i8q

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Upstream-commit: 0c27355f7b
Component: cli
2017-09-13 12:27:55 +02:00
806d838e90 LCOW: Spot fix for multi-os image pulling
Signed-off-by: John Howard <jhoward@microsoft.com>
Upstream-commit: b291f5a31728f7ff6386bb37f15e7c0885d3b2a7
Component: engine
2017-09-12 23:33:34 -07:00
523435549c add configs tag in swagger.yml
Signed-off-by: Allen Sun <allensun.shl@alibaba-inc.com>
Upstream-commit: 16929d337a5dbd9aaa029271db1cdba25dd0d2f2
Component: engine
2017-09-13 09:48:05 +08:00
9d7caf267c Update gometalinter
This is mostly to include the following fix:
https://github.com/alecthomas/gometalinter/commit/78e3fbd90a20b03a

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
Upstream-commit: 6be4b3703c2a2b41ccdf97fcf8d2da6863a402bd
Component: engine
2017-09-12 18:46:37 -07:00
99b37c7406 Update hcsshim to v0.6.5
Signed-off-by: Darren Stahl <darst@microsoft.com>
Upstream-commit: bffc7a423f20730f086c30bc189d6c6ad81d16dd
Component: engine
2017-09-12 18:46:12 -07:00
57c34191f2 gometalinter: add per-platform configurable options
I have run into two separate issues while doing 'make all' on armhf
(a Scaleway C1 machine, same as used in CI). This commit fixes both.

1. There were a lot of "not enough memory" errors, and after that
in a few runs gometalinter just stuck forever on FUTEX_WAIT with
no children left.

Looking into docs, I found the --enable-gc option which solved the issue.

[Update: this has already been added]

2. Timeout of 2 minutes is not enough for the abovementioned platform.
The longest running linter is goimports which takes almost 6 minutes to run.

Set the timeout to the observable run time roughly doubled.

In addition, ARM platforms does not have too much RAM (2GB), so
running too many processes in parallel might be problematic. Limit
it by using -j2

[v2: make the timeout arch-dependent, also tested on aarch64 (2m15s)]
[v3: moved timeout setting to Dockerfiles]
[v4: generalized to GOMETALINTER_OPTS, added -j2 for ARM platforms]
[v5: rebase to master]

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
Upstream-commit: b96093fa56a9c085cb3123010be2430753c40cbc
Component: engine
2017-09-12 18:45:34 -07:00
4219a83be8 overlay gd: fix build for 32-bit ARM
This commit reverts a hunk of commit 2f5f0af3f ("Add unconvert linter")
and adds a hint for unconvert linter to ignore excessive conversion as
it is required on 32-bit platforms (e.g. armhf).

The exact error on armhf is this:

	19:06:45 ---> Making bundle: dynbinary (in bundles/17.06.0-dev/dynbinary)
	19:06:48 Building: bundles/17.06.0-dev/dynbinary-daemon/dockerd-17.06.0-dev
	19:10:58 # github.com/docker/docker/daemon/graphdriver/overlay
	19:10:58 daemon/graphdriver/overlay/copy.go:161: cannot use stat.Atim.Sec (type int32) as type int64 in argument to time.Unix
	19:10:58 daemon/graphdriver/overlay/copy.go:161: cannot use stat.Atim.Nsec (type int32) as type int64 in argument to time.Unix
	19:10:58 daemon/graphdriver/overlay/copy.go:162: cannot use stat.Mtim.Sec (type int32) as type int64 in argument to time.Unix
	19:10:58 daemon/graphdriver/overlay/copy.go:162: cannot use stat.Mtim.Nsec (type int32) as type int64 in argument to time.Unix

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
Upstream-commit: 21b2c278cc86f0fc411018becbcbf2a7e44b6057
Component: engine
2017-09-12 18:44:55 -07:00
a87f17c01b Fix 'make all' for other platforms
Since commit d7e2c4ce7 ("Use gometalinter for linting") command
"make all" fails on all the non-default platforms (i.e. ARMs, PPC, and
s390) in this way:

	# make all
	...
	Congratulations!  All commits are properly signed with the DCO!
	/go/src/github.com/docker/docker/hack/validate/gometalinter: line 6: gometalinter: command not found
	Makefile:105: recipe for target 'all' failed
	make: *** [all] Error 127

Make sure gometalinter is installed for those platforms

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
Upstream-commit: fc3040a4c41d3916739639b70fc3efd92888a0f5
Component: engine
2017-09-12 18:44:55 -07:00
053e3db35e Merge pull request #528 from andrewhsu/ven
vndr github.com/docker/docker to 84144a8 to fix stuff
Upstream-commit: f697de32b9
Component: cli
2017-09-12 17:52:55 -07:00
e18e2f39e3 vndr github.com/docker/docker to 84144a8 to fix stuff
Signed-off-by: Andrew Hsu <andrewhsu@docker.com>
Upstream-commit: 850b46e67c
Component: cli
2017-09-12 17:27:15 -07:00
6e9f643bb2 Reset idPair during build to avoid cache busting
Signed-off-by: Sébastien HOUZÉ <cto@verylastroom.com>
Upstream-commit: 7e407610d4
Component: cli
2017-09-13 02:04:03 +02:00
eae7cc4c29 Merge pull request #516 from andrewhsu/v
vndr docker/docker to ea220e7 to bring in fix for arm
Upstream-commit: b60413264d
Component: cli
2017-09-12 16:01:04 -07:00
ca1972776d Merge pull request #34826 from cezarsa/usagefix
Fix variable shadowing causing LayersSize to be reported as 0
Upstream-commit: 84144a8c66c1bb2af8fa997288f51ef2719971b4
Component: engine
2017-09-12 15:51:26 -07:00
baffbb54c8 remove unused vndr github.com/docker/libtrust
Signed-off-by: Andrew Hsu <andrewhsu@docker.com>
Upstream-commit: 536da4a07a
Component: cli
2017-09-12 13:48:21 -07:00
fda4a38658 vndr golang.org/x/sys to 07c1829
To satisfy requirements of the vndr of docker/docker

Signed-off-by: Andrew Hsu <andrewhsu@docker.com>
Upstream-commit: 50696bbf72
Component: cli
2017-09-12 12:11:18 -07:00
55cb898a72 Fix variable shadowing causing LayersSize to be reported as 0
Signed-off-by: Cezar Sa Espinola <cezarsa@gmail.com>
Upstream-commit: 313bc1e339fa4292d9ef5bc74acc82436eab7e1e
Component: engine
2017-09-12 14:11:11 -03:00
18c29c5c5f Add gosimple linter
Update gometalinter

Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: f7f101d57ef8cbf2d8723a18b7d723c5c5dd04b6
Component: engine
2017-09-12 12:09:59 -04:00
1d65628454 Merge pull request #34754 from Microsoft/jjh/read-only
LCOW: VHDX boot to readonly.
Upstream-commit: 969b76d85f93e214cbc44f25a3f44b67cb0dc078
Component: engine
2017-09-12 08:35:21 -07:00
52611dee7a Merge pull request #34796 from donutloop/fix_typos_in_locker_example
Fix typos in Locker example
Upstream-commit: 099b4de391696b740779bfcb8322b4f4186e297e
Component: engine
2017-09-12 15:48:23 +02:00
a300c8a80f Update deprecated.md for "api-enable-cors"
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Upstream-commit: 7c69bf1d24
Component: cli
2017-09-12 12:47:57 +02:00
3e4a18de4d Remove deprecated --enable-api-cors flag
The `--enable-api-cors` flag was deprecated in f3dd2db4ff7de1399a49af928cd3eae4fccf8764,
and marked for removal in docker 17.09 through 85f92ef3590b386ea17e3948262725a2d3ce4db5.

This patch removes the deprecated flag.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Upstream-commit: 7d4eab554379524c2421a7ecd3319d1d087d1de2
Component: engine
2017-09-12 12:43:34 +02:00
ee7b60968b Cleanup client not found errors.
And fix remove calls to return a notFound error

Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 81bb9978ab5ac99e84a5bf62d0d469f0aec1d506
Component: engine
2017-09-11 19:53:18 -04:00
7f5ba34576 Merge pull request #48 from seemethere/remove_version_dependency_from_package_building
Removes engine VERSION dependency
Upstream-commit: 3c05e034e76cb3025a9f10cf6086fed312dc7670
Component: packaging
2017-09-11 13:19:31 -07:00
528c150b8c Removes engine VERSION dependency
Signed-off-by: Eli Uriegas <eli.uriegas@docker.com>
Upstream-commit: 89d8a83e20172e66c16c6ddbc46f43e5f67f7045
Component: packaging
2017-09-11 12:11:59 -07:00
99e268ef3c Merge pull request #508 from docker/revert-493-patch-1
Revert "Change sshfs by cloudstor on Installing and using a plugin"
Upstream-commit: 04390f8a74
Component: cli
2017-09-11 11:25:50 -07:00
599a2ae3b1 Merge pull request #521 from dnephin/add-albers-to-maintainers
Add albers to maintainers
Upstream-commit: d0bda815d2
Component: cli
2017-09-11 19:47:20 +02:00
591014017f Add albers to maintainers.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 92cf825238
Component: cli
2017-09-11 11:22:10 -04:00
2c45bc6a92 Merge pull request #34770 from dnephin/fix-client-with-empty-id
Fix volume inspect with empty ID
Upstream-commit: 63a9ea58eb4c704ed7d7dab950f12f708cf220f7
Component: engine
2017-09-11 07:01:50 -07:00
8e2757c531 Merge pull request #421 from thaJeztah/refactor-docker-info
Refactor/cleanup of docker info
Upstream-commit: e77dc2232e
Component: cli
2017-09-11 15:25:02 +02:00
033298b8f6 Refactor/cleanup of docker info
Some mild refactoring of the docker info command;

- Use `fmt.Fprinln()` instead of `fmt.Fprintf()` where possible
- Rename `fprintfIfNotEmpty()` to `fprintlnNonEmpty()`, and removed
  return variables, because they were not used. `fprintlnNonEmpty()`
  now uses fmt.Fprintln()` instead of `fmt.Fprintf()`, because
  formatting was not used.
- Use `fprintlnNonEmpty()` to get rid of some `if` statements
- Extract printing Swarm-related information to a `printSwarmInfo()` function
- Change `Http Proxy` and `Https Proxy` to `HTTP Proxy` / `HTTPS Proxy`

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Upstream-commit: 6f1b510843
Component: cli
2017-09-11 15:13:06 +02:00
95956aa7ef Merge pull request #519 from gesellix/typo-configration
[docs] Fix typo in configration.
Upstream-commit: 202205365a
Component: cli
2017-09-11 14:57:08 +02:00
1b8f2ad866 [docs] Fix typo in configration.
Signed-off-by: Tobias Gesellchen <tobias@gesellix.de>
Upstream-commit: f8ed8d22c6
Component: cli
2017-09-10 23:12:29 +02:00
e388be9473 Fix typos in Locker example
Signed-off-by: Marcel Edmund Franke <marcel.edmund.franke@gmail.com>
Upstream-commit: 6d3bc28289c265a65879a7f28264e6bacb95fbe1
Component: engine
2017-09-10 11:34:19 +02:00
af0adf66d4 Merge pull request #34790 from dnephin/add-ineffassign-linter
Add ineffassign linter
Upstream-commit: 13fec0607394f7c6da0148f8d513b6fcbf7cce61
Component: engine
2017-09-09 15:41:55 -07:00
4b9c2f5fd5 vndr docker/docker to ea220e7 to bring in fix for arm
Primarily to bring in fix for "Clear Architecture field in platform
constraint for arm architectures".

Signed-off-by: Andrew Hsu <andrewhsu@docker.com>
Upstream-commit: ef027b6d72
Component: cli
2017-09-08 16:27:56 -07:00
fdd3e06a77 Add ineffassign linter
Also enable GC in linting to reduce memory usage.

Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 09652bf8789142a5a5a1de2d41590300761b4954
Component: engine
2017-09-08 18:23:21 -04:00
30a4e0ab8e Merge pull request #510 from dnephin/add-parse-log-details
Use a local copy of ParseLogDetails
Upstream-commit: aae519d0f6
Component: cli
2017-09-08 11:38:24 -07:00
fbd21afa80 Merge pull request #511 from dnephin/fix-end-of-line-whitespace-tests
Use golden files for tests that expect end-of-line whitespace
Upstream-commit: d3d9b38d55
Component: cli
2017-09-08 11:37:28 -07:00
94dd311bdc Merge pull request #495 from dnephin/container-run-e2e
Add en e2e test for `container run`
Upstream-commit: cc517f2d8a
Component: cli
2017-09-08 11:36:32 -07:00
9211237d01 Merge pull request #34767 from dnephin/deprecate-some-client
Cleanup client/ interface
Upstream-commit: 96255ba07ae7de2bb2a18567c478b63d5ac74ee4
Component: engine
2017-09-08 13:29:10 -04:00
b363a8f8a7 sort secrets and configs to ensure idempotence
`docker stack deploy` keeps restarting services it doesn't need to (no changes)
because the entries' order gets randomized at some previous (de)serialization.
Maybe it would be worth looking into this at a higher level and ensure
all (de)serialization happens in an ordered collection.

This quick fix sorts secrets and configs (in place, mutably) which ensures the
same order for each run.

Based on
https://github.com/moby/moby/pull/30506

Fixes
https://github.com/moby/moby/issues/34746

Signed-off-by: Peter Nagy <xificurC@gmail.com>
Upstream-commit: 27e8bdf32b
Component: cli
2017-09-08 16:09:48 +02:00
66ae0e70f8 Merge pull request #34771 from Microsoft/jjh/hcsshim
Revendor Microsoft/hcsshim @ v0.6.4
Upstream-commit: 8ec484ff4bef7698cc4b3ba8195dd182c2af8045
Component: engine
2017-09-07 14:51:07 -07:00
d7ed53048b Use golden files for tests that expect end-of-line whitespace
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 51587de1c4
Component: cli
2017-09-07 17:50:44 -04:00
b543555e86 Merge pull request #34761 from dnephin/fix-mount-create-api-test
Some cleanup of mount create API test
Upstream-commit: bf3a8bddeb5e1ae04b6f73bfe811372ee3e78e36
Component: engine
2017-09-07 17:09:19 -04:00
58743c32f5 Merge pull request #34756 from dnephin/better-filters
Improve docs and interface for api/types/filters
Upstream-commit: c8400bf24dcea8e160d6b614d996b0f659c7d8d9
Component: engine
2017-09-07 17:00:59 -04:00
810209d155 Revendor Microsoft/hcsshim @ v0.6.4
Signed-off-by: John Howard <jhoward@microsoft.com>
Upstream-commit: e47c626e0a5e7285782620c027b3d5195c643a5a
Component: engine
2017-09-07 12:08:40 -07:00
f1b816d854 Merge pull request #34685 from dnephin/remove-bundle-version
Remove version from bundle path
Upstream-commit: f69188aec9f74a946422a256c14bf8efc82f20d4
Component: engine
2017-09-07 11:53:53 -07:00
2e7d5b113f Merge pull request #34757 from dnephin/fix-test-run-environment
Fix TestRunEnvironment
Upstream-commit: d76f0d4e0694f5adcaab327e801ee8553620c5b3
Component: engine
2017-09-07 11:28:57 -07:00
5899c64938 Fix volume inspect with empty ID
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 5ac298fd0e5c065483653970be587626026971c2
Component: engine
2017-09-07 13:46:23 -04:00
56f259f37d Revert "Change sshfs by cloudstor on Installing and using a plugin"
Signed-off-by: Misty Stanley-Jones <misty@docker.com>
Upstream-commit: eb77961399
Component: cli
2017-09-07 10:15:59 -07:00
0d3330814c Use a local copy of ParseLogDetails
It's being removed from client/

Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: a747389bf4
Component: cli
2017-09-07 12:50:25 -04:00
d7504f67d1 Merge pull request #34738 from wgliang/optimization1
Optimize some wrong usage and spelling
Upstream-commit: 2dcb77b24c80dd95b52358c92436f68f2a33eb01
Component: engine
2017-09-07 09:45:14 -07:00
980d05f2ea Cleanup client/ interface
- Remove ParseLogDetails, this is not part of the client. Moved to docker/cli
- Deprecate ParseHost and replace with ParseHostURL
- Deprecate redundant IsErr helpers

Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 54242cd067c234960d1295a67271475f9d099f22
Component: engine
2017-09-07 12:32:38 -04:00
5f49aab36a Merge pull request #34687 from tych0/bump-runc
bump runc version
Upstream-commit: a68ee8c8950b1923c3a92b9cec0d9a723897111d
Component: engine
2017-09-07 14:52:18 +02:00
6f155f233b Merge pull request #34021 from nishanttotla/dont-set-architecture-constraint
Clear Architecture field in platform constraint for arm architectures
Upstream-commit: ea220e70a13963da544645376cd9331021eec6b4
Component: engine
2017-09-07 11:18:12 +02:00
a8b7a6b071 Merge pull request #34730 from simonferquel/fix-TestEventsOOMDisableTrue-flakkyness
Events CLI tests: fix flakyness of TestEventsOOMDisableTrue
Upstream-commit: 72eb1d0a47488d279df2b80bfd3f6091eaff66a7
Component: engine
2017-09-07 11:16:37 +02:00
3aa4929239 Plugable secret backend
This commit extends SwarmKit secret management with pluggable secret
backends support.
Following previous commits:
1. docker/swarmkit@eebac27434
2. docker/docker@08f7cf0526
Added driver parameter to `docker secret` command.

Specifically:

1. `docker secret create [secret_name] --driver [driver_name]`
2.  Displaying the driver in
```
    $ docker secret ls
    $ docker secret inspect [secret_name]
    $ docker secret inspect [secret_name] -pretty
```

Signed-off-by: Liron Levin <liron@twistlock.com>
Upstream-commit: 0ee9e05d8f
Component: cli
2017-09-07 11:10:44 +03:00
eec1d4ef54 Optimize some wrong usage and spelling
Signed-off-by: wgliang <liangcszzu@163.com>
Upstream-commit: 94cefa21459a0c620e5a9c2da04df6d3a43dae17
Component: engine
2017-09-07 09:44:08 +08:00
567b25fb28 Some cleanup of mount create API test
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 58b96aced87b33c4175fa5d3422289f763ab599d
Component: engine
2017-09-06 19:32:35 -04:00
5063459b89 Merge pull request #34748 from dnephin/cleanup-client-deps
Cleanup client/ package dependencies
Upstream-commit: be97c66708c24727836a22247319ff2943d91a03
Component: engine
2017-09-06 16:14:29 -07:00
74473d87d6 Merge pull request #493 from jmaitrehenry/patch-1
Change sshfs by cloudstor on Installing and using a plugin
Upstream-commit: af94015b8c
Component: cli
2017-09-06 14:42:34 -07:00
11b376603e Fix a bad assumption
If the empty variable happens to be sorted to the end of the list then TrimSpace()
would remove it. Instead only strip the single trailing newline.

Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: fff605c3b3557acf6bf793813d695fba59d7fa21
Component: engine
2017-09-06 17:32:56 -04:00
4a595ff1d9 Add an end-to-end test for container run
for testing attach, remove, and pull image when missing.

Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: c34360cc8e
Component: cli
2017-09-06 17:07:38 -04:00
6fc4c48771 Move common e2e things into an internal package.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 677d17150a
Component: cli
2017-09-06 17:07:38 -04:00
e65a64c87e Add gotestyourself/poll
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 683b6226ed
Component: cli
2017-09-06 17:07:35 -04:00
cb4257d5fb Cleanup filter package.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 065118390a3ecaf0dbd2fa752d54d43f8f1e8ec6
Component: engine
2017-09-06 16:41:47 -04:00
9f20b18453 Move tlsconfig to client package.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 6916c215b00ab4d7edf4be14848ab2e695697381
Component: engine
2017-09-06 16:39:55 -04:00
c87a482794 Revendor Microsoft/opengcs @v0.3.3
Signed-off-by: John Howard <jhoward@microsoft.com>
Upstream-commit: bf898b7a0cedfec5b7e8104a1ac684f9dd232638
Component: engine
2017-09-06 12:55:25 -07:00
8db4d9c803 LCOW: VHDX boot to read-only
Signed-off-by: John Howard <jhoward@microsoft.com>
Upstream-commit: 17a24034bb4281e2b63949beaa5d3846c0891726
Component: engine
2017-09-06 10:55:19 -07:00
cc7b3620f0 Remove libtrust dep from api
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 2f007e46d0100d865a061c1a8e544bddc0b7a368
Component: engine
2017-09-06 12:05:19 -04:00
33519380e5 Move names to a more appropriate package.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 22b246417f52aa6bd0e358e41e2bfb9c0a59c867
Component: engine
2017-09-06 12:05:16 -04:00
67de569278 Merge pull request #34745 from simonferquel/fix-pkg-archive-conversion
Re-enable some conversion for darwin-amd64 platform
Upstream-commit: 945d80cd6ad5fc9d30a947ab8872721272ac7bff
Component: engine
2017-09-06 09:00:29 -07:00
6ee8cdfa2e Merge pull request #34697 from fcrisciani/ln-vendoring
Vendoring libnetwork
Upstream-commit: 3b449dbfbad4374f618a901ff585d2ea62b1029e
Component: engine
2017-09-06 17:52:56 +02:00
0bd644faaf re-enable some conversion for darwin-amd64 platform
Signed-off-by: Simon Ferquel <simon.ferquel@docker.com>
Upstream-commit: 7c9e64a2e1891bf1020d9312a18741c734fa1cd6
Component: engine
2017-09-06 12:22:41 +02:00
fd94302cba Relabel config files.
Without relabel these files, SELinux-enabled containers will show
"permission denied" errors for configuration files mounted with
`docker server create ... --config ... ...`.

Signed-off-by: Wenxuan Zhao <viz@linux.com>
Upstream-commit: 472c03a8c364090afb88258b3dd9748183c29d05
Component: engine
2017-09-05 18:39:48 -03:00
54efaca689 Merge pull request #34707 from vieux/force_format
force inspect test format
Upstream-commit: d7b4c7e0eac223eda54940adbb4c44bf71ec039c
Component: engine
2017-09-05 13:35:07 -07:00
50ebf89669 Merge pull request #219 from seemethere/update_makefile
Add update-components target, Fix PHONY Targets
2017-09-05 13:10:56 -07:00
57918230aa Add update-components target, Fix PHONY Targets
This allows easier updating of Docker CE components

Signed-off-by: Eli Uriegas <eli.uriegas@docker.com>
2017-09-05 12:57:43 -07:00
f109c25168 Merge pull request #34682 from dnephin/fail-build-on-integration-suite
Fix integration suite and propagate failures
Upstream-commit: 975675e9245e1d9a18cae978a0231ff83772048b
Component: engine
2017-09-05 12:40:00 -07:00
33d6fdcfda Merge pull request #353 from albers/completion-nodelist
Use native formatting in bash completion of nodes
Upstream-commit: 0426ea1443
Component: cli
2017-09-05 15:09:00 -04:00
28cf6767d3 Merge pull request #424 from simonferquel/update-vendoring
updated vendoring
Upstream-commit: 5c5cdd0e36
Component: cli
2017-09-05 15:06:09 -04:00
56b8d8a2a0 Remove version from bundle path
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: bac2447964c8cdfcf35f928841d60310db997c76
Component: engine
2017-09-05 13:38:32 -04:00
33179f56a2 force inspect test format
Signed-off-by: Victor Vieux <victorvieux@gmail.com>
Upstream-commit: 8e6567cb837e1c885de5146517557c7a5d8a5f17
Component: engine
2017-09-05 08:31:44 -07:00
e76adc6a0e Merge pull request #406 from ksouf/issue_37_network_list_test
adding network list test
Upstream-commit: ec99774a85
Component: cli
2017-09-05 11:24:32 -04:00
30986cbc05 Avoid failing the test if container is already stopped
Signed-off-by: Simon Ferquel <simon.ferquel@docker.com>
Upstream-commit: adf75503dba2e782139173c011999eacd0c3d7e2
Component: engine
2017-09-05 17:19:57 +02:00
db0c7d8918 Merge pull request #34704 from seemethere/add_overwriteable_version
Allows VERSION to be overwritten by env variable
Upstream-commit: 9e0a1845f23327c4623a49329b2480d98e02173f
Component: engine
2017-09-04 16:47:52 -07:00
2f974e7293 Add bash completion for search --format
Signed-off-by: Harald Albers <github@albersweb.de>
Upstream-commit: f6219ac3c6
Component: cli
2017-09-04 18:21:47 +02:00
09edca8b4e Merge pull request #491 from FrenchBen/fix-stack
Move output of stack rm to stdout
Upstream-commit: 38c1895021
Component: cli
2017-09-04 15:56:30 +02:00
55c903723c Add support for .Node.Hostname templating in swarm services
Signed-off-by: Carlo Mion <mion00@gmail.com>
Upstream-commit: e2f09fa6dd1705eb69ab97fbf759253a4162228a
Component: engine
2017-09-02 10:06:16 +02:00
f6c2d4d077 Merge component 'engine' from git@github.com:moby/moby master 2017-09-01 17:28:12 -07:00
444c2e65a4 Remove unused depdendencies from vendor
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 724f03bb23
Component: cli
2017-09-01 19:41:06 -04:00
4bafd44516 updated vendoring
Signed-off-by: Simon Ferquel <simon.ferquel@docker.com>
Upstream-commit: a0113c3a44
Component: cli
2017-09-01 19:41:06 -04:00
adef76604d Merge component 'cli' from git@github.com:docker/cli master 2017-09-01 16:25:12 -07:00
5a2228df09 Merge component 'packaging' from git@github.com:docker/docker-ce-packaging master 2017-09-01 16:10:15 -07:00
0376ee94b9 Merge pull request #49 from seemethere/remove_rpm_changelog
Remove RPM changelog
Upstream-commit: cc3be7f52531077a29c2da0deef5f25a8631f3a1
Component: packaging
2017-09-01 16:03:38 -07:00
0699e6b42a Allows VERSION to be overwritten by env variable
VERSION was hardcoded to be used as the `VERSION` file from the root
directory, this makes it so that you have the option to overwrite this.

Signed-off-by: Eli Uriegas <eli.uriegas@docker.com>
Upstream-commit: 76643025793ca742b1c19bd35cab35c8ff7d3e77
Component: engine
2017-09-01 15:47:15 -07:00
80e330e43c Merge pull request #34706 from dnephin/fix-ci-master
Fix lint errors on master
Upstream-commit: 9b4a616e4b3819ef062780b5fd854616be2c22bb
Component: engine
2017-09-01 15:45:32 -07:00
cc688b2215 Remove RPM changelog
We haven't been updating it, seems like a waste to just track releases
through it.

Signed-off-by: Eli Uriegas <eli.uriegas@docker.com>
Upstream-commit: 895abef8259363895fda4587f5a157f588608234
Component: packaging
2017-09-01 15:25:26 -07:00
ee07288be3 Move output of stack rm to stdout
Signed-off-by: French Ben <frenchben@docker.com>

Update for the test to capture the proper removal

Signed-off-by: French Ben <frenchben@docker.com>

Satisfy lint length limit

Signed-off-by: French Ben <frenchben@docker.com>

Updated e2e test

Signed-off-by: French Ben <frenchben@docker.com>
Upstream-commit: bb8f49773c
Component: cli
2017-09-01 14:25:20 -07:00
2578773887 Clear Architecture field in platform constraint for arm architectures
Signed-off-by: Nishant Totla <nishanttotla@gmail.com>
Upstream-commit: 772af6040ed4f2f26c22901597333a900be17aae
Component: engine
2017-09-01 13:08:20 -07:00
7ded486a94 Merge pull request #34700 from tklauser/pkg-term-winsize
pkg/term: use IoctlGetWinsize/IoctlSetWinsize from golang.org/x/sys/unix
Upstream-commit: a127269803b9053713cd51d20f4ae00dae19b6d1
Component: engine
2017-09-01 15:58:25 -04:00
7ecd17f5d0 Fix lint errors.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: d0dbf8e397afe0365be59f98e5f52bb4d8d3f4e5
Component: engine
2017-09-01 15:12:22 -04:00
d99a5ff6bf Change sshfs by cloudstor on Installing and using a plugin
Signed-off-by: Julien Maitrehenry <julien.maitrehenry@me.com>
Upstream-commit: e97d72334f
Component: cli
2017-09-01 14:42:01 -04:00
ec509204fd Merge pull request #34689 from chchliang/envunitest
add an exception case
Upstream-commit: a301f96df6f951027a0c795e9d72ef657b51c2f9
Component: engine
2017-09-01 10:53:42 -07:00
58ef7a0132 Fix integration suite and propagate failures
Failures from the integration suite were not propagating to the outter shell
for some reason. Handle the failure with an if exit 1.

Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 96707bc600747257e82917ca079fa5006d636b2c
Component: engine
2017-09-01 13:07:47 -04:00
8ef302a435 Merge pull request #34625 from dnephin/more-linters
Add interfacer and unconvert linters
Upstream-commit: cb952bf00695b3429476f59c5534a9c604c6f010
Component: engine
2017-09-01 08:46:08 -07:00
d0e9f9bfe2 Merge pull request #34695 from dnephin/fix-rename-integration-test
Remove assertions that were testing CLI behaviour
Upstream-commit: a337aaab08babcd7b5d70d91ad0c3c7ad16a649d
Component: engine
2017-09-01 10:18:43 -04:00
2be7b6733b pkg/term: use IoctlGetWinsize/IoctlSetWinsize from golang.org/x/sys/unix
Use unix.IoctlGetWinsize and unix.IoctlSetWinsize instead of manually
reimplementing them.

Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
Upstream-commit: 32dfc0cb64992aa5e208273658b6e404268c63f4
Component: engine
2017-09-01 14:43:09 +02:00
4e9d201c36 add an exception case and map changge to struct with expect error
Signed-off-by: chchliang <chen.chuanliang@zte.com.cn>

add an exception case and map changge to struct with expect error

Signed-off-by: chchliang <chen.chuanliang@zte.com.cn>
Upstream-commit: 76e9f0d6d45d7464c34223c25337128530b1a0c6
Component: engine
2017-09-01 15:49:56 +08:00
35c8905315 Vendoring libnetwork
Diff:
5b28c0ec98...d5c8223190

Signed-off-by: Flavio Crisciani <flavio.crisciani@docker.com>
Upstream-commit: 1ddeb11835600127a3319fc0dd3764e57ffbf521
Component: engine
2017-08-31 19:10:23 -07:00
f119dacce1 Merge pull request #485 from seemethere/re_add_test_target
Re-adds test target to the Makefile
Upstream-commit: d861a1c3dd
Component: cli
2017-08-31 17:50:14 -07:00
dfa6a23587 Merge component 'packaging' from git@github.com:docker/docker-ce-packaging master 2017-08-31 17:11:47 -07:00
b508d80e8c Merge pull request #47 from andrewhsu/libudev-dev
added libudev-dev pkg as build requirement
Upstream-commit: 88b7df7cde5e989d9622d009f4e7373ccbcfe828
Component: packaging
2017-08-31 17:10:18 -07:00
0c9cb73cd5 Merge pull request #46 from andrewhsu/rm-wheezy-arm
remove debian-wheezy armv7l dockerfile build env
Upstream-commit: fb9319c2ab914af7033486cb50926401cc97056c
Component: packaging
2017-08-31 16:32:43 -07:00
c57dae8fc6 remove debian-wheezy armv7l dockerfile build env
Because we don't ship it.

Signed-off-by: Andrew Hsu <andrewhsu@docker.com>
Upstream-commit: cbcf1f67165278fc789d3c68b2965a05dbf823c9
Component: packaging
2017-08-31 16:26:00 -07:00
827348367b added libudev-dev pkg as build requirement
For jessie and wheezy flavors of distros. Some dep seems to have changed
from before.

Signed-off-by: Andrew Hsu <andrewhsu@docker.com>
Upstream-commit: be93a43e60b60befd6d6688e0cb8e23bc27c0724
Component: packaging
2017-08-31 16:24:25 -07:00
6742eeff7c Remove assertions that were testing CLI behaviour.
These tests will be moved to docker/cli

Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 6590ee0dfba45d7eb4ee12f72621b90294925f20
Component: engine
2017-08-31 18:19:17 -04:00
d48b9a840a Merge pull request #489 from dnephin/fix-container-run
Fix crash in container run after pulling an image
Upstream-commit: d817967647
Component: cli
2017-08-31 18:11:26 -04:00
5ed8076112 Merge pull request #484 from ripcurld0/ps_exit_1
When nothing found in stack exit with exit code 1
Upstream-commit: 5a9bf7f359
Component: cli
2017-08-31 17:13:00 -04:00
264557313d Fix crash in containe run after pulling an image.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: a0d8d80250
Component: cli
2017-08-31 17:08:02 -04:00
fdee4e99e9 Re-adds test target to the Makefile
The test target existed before, this is to provide a legacy interface to
allow easy testing for downstream Docker CE.

Without this we would need separate Makefiles/Jenkinsfiles for releases
past 17.07. Later on this target could also be used to test both unit
tests and integration tests at the same time.

Signed-off-by: Eli Uriegas <eli.uriegas@docker.com>
Upstream-commit: d53c8de06b
Component: cli
2017-08-31 10:32:00 -07:00
c7214e3099 Merge pull request #34656 from dnephin/move-testenv-to-internal
Move integration-cli/environment to an internal package
Upstream-commit: 184cea5ff710abde25547749e5608b24a255ba09
Component: engine
2017-08-31 08:52:24 -07:00
59d4d30f28 Merge pull request #45 from andrewhsu/rm-f24
remove fedora-24 packaging scripts because it is EOL
Upstream-commit: d88b3626fe6e6eeebac17f6d83d5378490ee997e
Component: packaging
2017-08-30 20:23:22 -07:00
84f9eef358 remove fedora-24 build scripts because it is EOL
Signed-off-by: Andrew Hsu <andrewhsu@docker.com>
Upstream-commit: a84d468adb9c44c12c90e9358b54a5f089ee302f
Component: packaging
2017-08-30 20:07:33 -07:00
08880363bd Merge pull request #29 from thaJeztah/remove-redundant-contrib
remove desktop-integration contrib from .deb
Upstream-commit: 50c7ac954e520fc9270cc765d3c11afb5b261154
Component: packaging
2017-08-30 19:47:50 -07:00
8c93ab2869 Merge component 'packaging' from git@github.com:docker/docker-ce-packaging master 2017-08-30 19:20:19 -07:00
d637802b2c Merge pull request #43 from seemethere/add_ppc64le
Adds ppc64le builds for ubuntu zesty
Upstream-commit: 093ae20dd0124fbcc7756f8452e5c7006743498c
Component: packaging
2017-08-30 17:28:57 -07:00
e7ed69be1f Merge pull request #213 from andrewhsu/v
update version to 17.09.0-dev
2017-08-30 17:21:53 -07:00
cace4119ad Merge pull request #212 from andrewhsu/cl
update changelog for upcoming 17.09.0 release
2017-08-30 17:21:42 -07:00
f7460e2cd7 update version to 17.09.0-dev
Signed-off-by: Andrew Hsu <andrewhsu@docker.com>
2017-08-30 17:09:30 -07:00
bc78d44351 update changelog for upcoming 17.09.0 release
Signed-off-by: Andrew Hsu <andrewhsu@docker.com>
2017-08-30 16:55:01 -07:00
9dabee631f Merge component 'engine' from git@github.com:moby/moby master 2017-08-30 16:44:42 -07:00
5a06fdc713 Merge component 'cli' from git@github.com:docker/cli master 2017-08-30 15:35:48 -07:00
ac255fc662 Merge component 'packaging' from git@github.com:docker/docker-ce-packaging master 2017-08-30 15:29:29 -07:00
3c0eab373a bump runc version
This picks up 66eb2a3e8fc930e1bb6703561152edf5ab550bff, which fixes
readonly containers in user namespaces.

Signed-off-by: Tycho Andersen <tycho@docker.com>
Upstream-commit: 47e9d856c43b6b251d86afc099ec092aa83b1534
Component: engine
2017-08-30 14:26:59 -07:00
384ceb07e9 When nothing found in stack exit with exit code 1
To keep on a consistent behaviour such as in docker-service-ps
if docker-stack-ps didn't find a given stack, the command line
should exit with exit code 1.

Signed-off-by: Boaz Shuster <ripcurld.github@gmail.com>
Upstream-commit: 79f9af2475
Component: cli
2017-08-30 23:25:36 +03:00
117658f23d Adds ppc64le builds for ubuntu zesty
Signed-off-by: Eli Uriegas <eli.uriegas@docker.com>
Upstream-commit: 2eeeff85dcef8bd684425a56dda5ae83b3f5fc58
Component: packaging
2017-08-30 13:07:10 -07:00
cd6cac51ad Merge pull request #32 from tophj-ibm/add-ppc64le-support-xenial
[ppc64le] add deb support for ubuntu-xenial
Upstream-commit: 53b3255dbeea0288fc3c8c02e4ad3cab56d2521e
Component: packaging
2017-08-30 13:05:52 -07:00
8bf4dec055 Merge pull request #475 from AliyunContainerService/start_period
Support start_period for healthcheck in Docker Compose
Upstream-commit: e636a5388c
Component: cli
2017-08-30 14:11:43 -04:00
98aa729835 Merge pull request #34554 from dnephin/use-release-version-of-docker-cli
Pin docker-cli version to the 17.06-ce release version
Upstream-commit: e23965d620e1655f44d47edd8b5e08c2c384fd03
Component: engine
2017-08-30 13:43:39 -04:00
9f71faec7e Refactor test environment
split all non-cli portions into a new internal/test/environment package

Set a test environment on packages instead of creating new ones.

Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: f85ef42ea538911c82821ab6cc0166d492e9a379
Component: engine
2017-08-30 13:13:18 -04:00
511c42a159 Update fixtures/load to use the APIClient
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 61e7d0595d0838671570fbaef21f35a4a41faed7
Component: engine
2017-08-30 13:11:06 -04:00
8be8bd8ae1 Merge pull request #477 from dnephin/some-tests-for-container-command
A few tests for container command
Upstream-commit: 8ea02f6f08
Component: cli
2017-08-30 09:38:38 -07:00
73cf62aaae Change the type of interval, timeout and start_period of healthcheck from string to * time.Duration
Signed-off-by: Li Yi <denverdino@gmail.com>
Upstream-commit: e02fcfd34e
Component: cli
2017-08-30 23:39:12 +08:00
17038054a4 Merge pull request #34667 from dnephin/add-container-config-decode-tests
Add container config decode tests
Upstream-commit: e95585f7b0c1ad93dee0fb5cbd8a5c387053f140
Component: engine
2017-08-30 07:25:27 -07:00
de66c38335 Merge pull request #34668 from dnephin/fix-registry-dependencies
Fix bad import graph from opts/opts.go
Upstream-commit: d85e83960b4aa77e8cf59dd1eabac1884359575f
Component: engine
2017-08-29 19:55:23 -04:00
2dd395d190 Merge pull request #34669 from dnephin/cleanup-registry-client-2
Remove command line flag install from registry package
Upstream-commit: 73a5e7b5c75023263e90b830944a45f0723df6a1
Component: engine
2017-08-29 16:54:08 -07:00
44d38eb2ce Merge pull request #482 from dnephin/add-ulimit-to-unsupported
Add ulimits to unsupported compose fields
Upstream-commit: 65202d669a
Component: cli
2017-08-29 19:26:36 -04:00
811eac4392 Reduce complexity in cli/command/container
Add tests for exec and cleanup existing tests.

Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: e7f90b6b38
Component: cli
2017-08-29 19:25:50 -04:00
853b31143d Add ulimits to unsupported compose fields.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: bdc8cf364e
Component: cli
2017-08-29 17:05:16 -04:00
f77a5de38d Remove command line flag install from registry package.
Settings flags is the responsibility of the application (cmd/) not a library

Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 73ec0ff86b06925e63016c0948be3a49cf8915b4
Component: engine
2017-08-29 15:55:09 -04:00
931cac7408 Fix bad import graph from opts/opts.go
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: b68221c37ee597950364788204546f9c9d0e46a1
Component: engine
2017-08-29 15:32:43 -04:00
897f142771 Add decodeContainerConfig test removed from docker/cli
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 06ecc04167622077bf96ab8f8a14fe93a90179a7
Component: engine
2017-08-29 15:14:50 -04:00
79507cd3e5 Add gotestyourself/skip
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 385727588ed68dafb7d18906d7b15260b52778e8
Component: engine
2017-08-29 14:35:12 -04:00
a174528496 Merge pull request #480 from dnephin/remove-unnecessary-deps
Remove 5k lines of unnecessary dependencies
Upstream-commit: e6006219ab
Component: cli
2017-08-29 10:37:43 -07:00
4ac950c1d0 Remove unused vendor.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 8edd2dd3df
Component: cli
2017-08-29 13:22:17 -04:00
ee93512169 Remove test for code not in this repo.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: dae1b7112c
Component: cli
2017-08-29 13:19:28 -04:00
b55202146c Merge pull request #476 from dnephin/small-cleanup-to-two-formatters
Reduce complexity of image formatter
Upstream-commit: 6780c29d6e
Component: cli
2017-08-29 12:04:43 -04:00
6eb6b7d9d2 adding network list test
Signed-off-by: khaled souf <khaled.souf@gmail.com>
Upstream-commit: 15d92a9e03
Component: cli
2017-08-29 16:30:37 +02:00
55ca4eff51 Merge pull request #33684 from dnephin/update-service-ps-tests
Update service ps to be an API test
Upstream-commit: 15b8d0420b57776028875dbf89fc6d9dbb0666e2
Component: engine
2017-08-29 09:44:20 +02:00
a4cd4da158 Support start_period for healthcheck in Docker Compose
Signed-off-by: Li Yi <denverdino@gmail.com>
Upstream-commit: 0abdad615f
Component: cli
2017-08-29 11:19:29 +08:00
5fa8a99c76 Merge pull request #34653 from tonistiigi/fix-readbody-test
integration-cli: fix testutil refactor merge conflict
Upstream-commit: 765e543a385bef1174bc73e98b59af1c81b29b45
Component: engine
2017-08-28 15:37:55 -07:00
250005dc95 Merge pull request #207 from vieux/contrib
improve CONTRIBUTING.md
2017-08-28 15:12:46 -07:00
f0c0f969b6 integration-cli: fix testutil refactor merge conflict
Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
Upstream-commit: ba6f9e4cc9687dd1ccd1ab304b363ed578c6d908
Component: engine
2017-08-28 10:19:54 -07:00
ef16add9bb Merge pull request #34263 from estesp/chown-flag-add-copy
Add --chown flag to ADD/COPY commands
Upstream-commit: a1183dda578f531ef65766611f9e16a0636e3a17
Component: engine
2017-08-28 09:50:44 -07:00
83dbde2057 Reduce complexity of two formatters
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: d318c4112b
Component: cli
2017-08-28 12:49:07 -04:00
7ae4b76cda Merge pull request #471 from cyli/surface-autolock
Include whether the managers in the swarm are autolocked as part of `docker info`
Upstream-commit: 7e52344cd2
Component: cli
2017-08-28 17:46:09 +02:00
ae8028a8f8 Merge pull request #34331 from twistlock/plugable_secrets_backend
[WIP] update swarmkit dependecies to support plugable secrets
Upstream-commit: 964ba0eaa83ac44e614c7ca68fbe2d92c5435a8c
Component: engine
2017-08-28 10:31:27 -04:00
b812e1036b Use native formatting in bash completion of nodes
Completion of nodes now uses native Docker commands that were not available
when this function was created.

Signed-off-by: Harald Albers <github@albersweb.de>
Upstream-commit: e391e34801
Component: cli
2017-08-28 09:59:19 +02:00
b132c15093 Improve bash completion for --credential-spec
This option is Windows specific and should be only available if the
daemon runs on Windows.

Signed-off-by: Harald Albers <github@albersweb.de>
Upstream-commit: 056ccf88be
Component: cli
2017-08-28 09:53:58 +02:00
36da978ca7 Merge pull request #34468 from Microsoft/jjh/lcowisolation
LCOW: Force Hyper-V Isolation
Upstream-commit: a63a2e84d8613cd6a666cafcd3d521fc0df46706
Component: engine
2017-08-27 13:35:55 -07:00
4a60bb27ab Merge pull request #34615 from dnephin/remove-pkg-testutil-assert
Move ErrorContains to an internal package
Upstream-commit: 6ed5db6243243c8b7ee3ff165f21bda4465124e5
Component: engine
2017-08-26 19:09:27 -07:00
6143a4613a Include whether the managers in the swarm are autolocked as part of docker info.
Signed-off-by: Ying Li <ying.li@docker.com>
Upstream-commit: 3428b78e96
Component: cli
2017-08-25 16:33:46 -07:00
1057cf80e4 Replace service ps cli tests with service inspect API test.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 6cd6d8646a90fa2013416bc8f11bd78d72c4180d
Component: engine
2017-08-25 17:27:41 -04:00
402a69d8fb Cleanup daemon.LoadBusybox() to use the API instead of client
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 98a4613017df2b7de045d93e25a376fd00baeb0c
Component: engine
2017-08-25 17:24:25 -04:00
29f6815811 Add gotestyourself to vendor.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 381a1c0a5ac99b6d7ab33a29150878b9a8008e95
Component: engine
2017-08-25 17:24:25 -04:00
67a4f5a5d6 Merge pull request #34613 from dnephin/remove-pkg-testutil-cmd
Remove pkg testutil cmd
Upstream-commit: a5631c75e1349f6d71c53dbabee7f166f770d2b2
Component: engine
2017-08-25 15:09:52 -04:00
de5380dba8 Merge pull request #454 from mstanleyjones/resource-updating-windows
docker update does not work on Windows containers
Upstream-commit: 21b5bbe411
Component: cli
2017-08-25 19:57:12 +02:00
2d72ab2282 docker update does not work on Windows containers
Signed-off-by: Misty Stanley-Jones <misty@docker.com>
Upstream-commit: 047d3c23a7
Component: cli
2017-08-25 10:35:28 -07:00
a1941ae3c8 Merge pull request #34352 from ChenMin46/fix_rename_shared_namespace
Use ID rather than Name to identify a container when sharing namespace
Upstream-commit: 70214f95b25a63234ecdd59a253b09faf4c68fcd
Component: engine
2017-08-25 09:39:58 -07:00
0458d1b8d1 Merge pull request #452 from dnephin/compose-allow-x-fields
Allow extension fields in the v3.4 version of the compose format
Upstream-commit: d83752cdf2
Component: cli
2017-08-25 12:37:47 -04:00
9e09dbbb1a Merge pull request #469 from dnephin/add-testing-doc
Add testing guidelines document
Upstream-commit: cfb228b963
Component: cli
2017-08-25 12:35:16 -04:00
61202c02f5 Merge pull request #34590 from shouze/add-support-of-ChownOpts-to-TarWithOptions
archive: add ChownOpts support to TarWithOptions
Upstream-commit: 475c9926db9228e94b222eaf6e9fe30f0b02582a
Component: engine
2017-08-25 18:21:31 +02:00
687fe21a97 Remove pkg/testutil/cmd
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: c2c127fa5a23599d698a71ead103b2f676fdf5c4
Component: engine
2017-08-25 12:07:31 -04:00
e8bff97a66 Update tests to use icmd
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 92427b3a8146e048c4b85e5ece1530da97d8472d
Component: engine
2017-08-25 12:07:30 -04:00
be2aa448d0 Add gotestyourself to vendor
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 0a7ff351b76f369b1cb1bc741e54b0d9018e7410
Component: engine
2017-08-25 12:06:25 -04:00
9cb0439501 Move ErrorContains to an internal package.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: e62b2d410cda6ac9166ac8d052fd3fb99a9460bf
Component: engine
2017-08-25 12:04:58 -04:00
8ae7aa2322 Merge pull request #34583 from tklauser/win-event-functions
Use windows event functions from golang.org/x/sys/windows
Upstream-commit: 2cea2f5469871c16564c900c5b27cee102ebff0b
Component: engine
2017-08-25 07:43:03 -07:00
3b7e9c65c0 Merge pull request #367 from kolyshkin/ipcmode
Introduce/document new IPC modes
Upstream-commit: 8ebc03a71f
Component: cli
2017-08-25 09:48:00 +02:00
939356770a Merge pull request #468 from rubensfig/34373-docker-doc
Added docker documentation for Expose
Upstream-commit: 1086e84718
Component: cli
2017-08-25 09:07:16 +02:00
9f8c4fc433 Merge pull request #34614 from dnephin/remove-pkg-testutil-tempfile
Remove pkg testutil tempfile
Upstream-commit: ff6fbe224f8b490b05f8489e5ae3219126d8017b
Component: engine
2017-08-24 15:24:15 -07:00
51ed00caab Merge pull request #34627 from estesp/no-userns-plugin-upgrade-test
Turn off plugin upgrade test when userns on
Upstream-commit: 0f957d2c09af7216d839f267c14db86d9194b5d0
Component: engine
2017-08-24 15:04:44 -07:00
2ca5291236 Merge pull request #34356 from mlaventure/update-containerd
Update containerd to 06b9cb35161009dcb7123345749fef02f7cea8e0
Upstream-commit: 285bc997311b75263bfac9e8ff7c4d60cdeca0bc
Component: engine
2017-08-24 14:25:44 -07:00
ffac489c66 Merge pull request #34626 from kolyshkin/ipcmode-samehost
docker_api_ipcmode_test: add SameHostDaemon req
Upstream-commit: acd2995143023805f890677eef05849211410c4d
Component: engine
2017-08-24 13:01:26 -07:00
01392057b0 Add unconvert linter
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 2f5f0af3fdb7e9ee607a0e178dbe2af6e10cccf4
Component: engine
2017-08-24 15:08:31 -04:00
157456237a Add interfacer linter
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 709bf8b7bcc67f3ea3a7a39e29af8ae16a38b06f
Component: engine
2017-08-24 15:08:26 -04:00
3104a37598 Add TESTING document.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: ffed6f5ff9
Component: cli
2017-08-24 14:45:50 -04:00
7776562662 Use ID rather than Name to identify a container when sharing namespace
Fix: https://github.com/moby/moby/issues/34307

Signed-off-by: Chen Min <chenmin46@huawei.com>
Upstream-commit: b6e5ea8e5757fa89e03ed3e76f1d85c068b3522d
Component: engine
2017-08-25 01:55:50 +08:00
4d6d2b530e Turn off plugin upgrade test when userns on
Until volume plugins can be made aware of the remapped root,
interactions with volumes created by plugin will not work as the file
ownership denies permissions to the userns remapped range.

Docker-DCO-1.1-Signed-off-by: Phil Estes <estesp@linux.vnet.ibm.com>
Upstream-commit: b1ced2af03c5a8009c314bde80b5f2516e0522fd
Component: engine
2017-08-24 10:52:11 -07:00
863e01391b [ppc64le] add deb support for ubuntu-xenial
Adds ubuntu-xenial as a make deb target for ppc64le

Signed-off-by: Christopher Jones <tophj@linux.vnet.ibm.com>
Upstream-commit: e2a3a2f2f157e1a84346c0aad2b87ef2b2a7f0f3
Component: packaging
2017-08-24 13:24:05 -04:00
c2a60a890d Merge pull request #34451 from Microsoft/jjh/bootvhdx
LCOW: Additional flags for VHD boot
Upstream-commit: e5cdaf1bd9c5d7984e491cb346ae1453dbb79f50
Component: engine
2017-08-24 08:38:19 -07:00
80c42a7f96 Merge pull request #33534 from sbko/31410-replace-deprecated-sockrequest
Stop using deprecated SockRequest
Upstream-commit: eb52bb22a4f3b9632545f10c0a3af436aced817d
Component: engine
2017-08-24 11:30:13 -04:00
42d094ea01 docker_api_ipcmode_test: add SameHostDaemon req
This is needed for tests that do some checks and/or create files
on the host system. Inspired by commit d9f3548a9.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
Upstream-commit: 8a9878081f8e14a54067f249bc98ae66f0b61ba3
Component: engine
2017-08-24 17:02:21 +03:00
364ecfbfa8 Merge pull request #34611 from estesp/no-hostmode-userns
Host-mode IPC sharing not possible in a userns
Upstream-commit: ff167a285a79339eaeb1772c9ce7a22d33ad0136
Component: engine
2017-08-23 19:52:03 -07:00
7313d24a20 Merge pull request #445 from dnephin/add-end-to-end-suite
Add end to end suite
Upstream-commit: 6c3d93bbb6
Component: cli
2017-08-23 16:16:09 -07:00
1d2c919b02 Added docker documentation for Expose
Signed-off-by: Rubens Figueiredo <r.figueiredo.52@gmail.com>
Upstream-commit: dd95731a21
Component: cli
2017-08-23 16:12:46 -07:00
5d498bba11 Build the docker cli for unreleased platforms
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 5ba5e6fff438029195c0df1303481c1e260bc6ec
Component: engine
2017-08-23 17:50:02 -04:00
aacb33bdaf Remove pkg/testutil tempfile and golden
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 468154a841b599dd3a7acaf6162e2a73cf44d1f6
Component: engine
2017-08-23 17:26:27 -04:00
b03ce80e95 Update tests to use gotestyourself/fs
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 60672382c7eb1f65e063c4bf07b0880559cea91b
Component: engine
2017-08-23 17:25:00 -04:00
332ff8ee6f Add gotestyourself to vendor.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 47962ee32ff785eb179de4a706e557b66e8b1841
Component: engine
2017-08-23 17:13:27 -04:00
e48013ec36 Stop using deprecated SockRequest
Signed-off-by: Stanislav Bondarenko <stanislav.bondarenko@gmail.com>
Upstream-commit: 0fd5a654280ef509a6512f84981f28d559869b90
Component: engine
2017-08-23 17:10:04 -04:00
6fd05602dd improve CONTRIBUTING.md
Signed-off-by: Victor Vieux <victorvieux@gmail.com>
2017-08-23 11:59:10 -07:00
35a83e1585 archive: add ChownOpts support to TarWithOptions
Signed-off-by: Sébastien HOUZÉ <cto@verylastroom.com>
Upstream-commit: 8a34c67a7eca7b8193f1c02fb6641abd719dce01
Component: engine
2017-08-23 20:52:29 +02:00
b9dc5995dc Merge pull request #34597 from cpuguy83/34587_address_nits
Add more detailed logging to aufs init
Upstream-commit: cdf870bd0b5fa678b10ef2708cca7ad776b4913c
Component: engine
2017-08-23 10:48:40 -07:00
95903f50f1 Host-mode IPC sharing not possible in a userns
This test is the API version of a docker_cli_run_test that was already
disabled from userns, but when ported to API didn't retain the same test
requirements. Specifically, a user namespaced process will not have
access to the host namespace's IPC devices and is already documented as
such in the user namespace restrictions docs.

Docker-DCO-1.1-Signed-off-by: Phil Estes <estesp@linux.vnet.ibm.com>
Upstream-commit: d9f3548a936991594095c12b7271ce3387f4025c
Component: engine
2017-08-23 10:37:47 -07:00
eec82cc7b5 Merge pull request #34600 from dnephin/remove-pkg-testutil
Remove pkg/testutil/utils.go
Upstream-commit: 59e1565565071da160a0ad3781335e4f974f93f8
Component: engine
2017-08-23 09:38:20 -07:00
d63b05f093 Merge pull request #466 from albers/completion-remove-stack-ps--all
Remove bash completion for `stack ps --all|-a`
Upstream-commit: f5a192bcc4
Component: cli
2017-08-23 09:57:29 -04:00
881ab6b17f Remove bash completion for stack ps --all|-a
This option was removed in https://github.com/moby/moby/pull/28885.
Bash completion was only updated for `service ps`, though.

See https://github.com/moby/moby/pull/29716 for the corresponding docs
change.

Signed-off-by: Harald Albers <github@albersweb.de>
Upstream-commit: 328f4fbf06
Component: cli
2017-08-23 13:34:23 +02:00
c8bdd05225 Merge pull request #34602 from stevvooe/normalize-normalise
*: normalize the use of normalize
Upstream-commit: 88c0317e23449d6ff730a1073f240586cbdfd4ba
Component: engine
2017-08-23 09:13:08 +02:00
e0c85257a0 Merge pull request #34568 from Microsoft/jjh/singletagstore
Move to a single tag-store
Upstream-commit: 3d22daeb835a74ef886ce28c35f6c391cd6d24ad
Component: engine
2017-08-22 17:50:36 -07:00
e11d0e6967 Merge pull request #440 from ripcurld0/search_format
Add --format to docker-search
Upstream-commit: 05308fcec7
Component: cli
2017-08-22 19:10:53 -04:00
19e250d57c Merge pull request #456 from dnephin/add-tests-for-client
Add unit tests for initializing the client
Upstream-commit: 5e1d0289f4
Component: cli
2017-08-22 16:08:36 -07:00
93c266f248 Add --format to docker-search
Signed-off-by: Jeremy Chambers <jeremy@thehipbot.com>
Signed-off-by: Boaz Shuster <ripcurld.github@gmail.com>
Upstream-commit: 88cc47ad5c
Component: cli
2017-08-23 01:37:54 +03:00
b680839840 *: normalize the use of normalize
Signed-off-by: Stephen J Day <stephen.day@docker.com>
Upstream-commit: ae8dbeaeedce3a9f247f2d58df7459f9d79bde5d
Component: engine
2017-08-22 15:25:31 -07:00
f5c5b5cc38 Remove RunCommandPipelineWithOutput
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: e885af2a6b6b9f88a8b419d225b1425ec3d9416e
Component: engine
2017-08-22 17:15:26 -04:00
e13afe9c59 Remove RandomTmpDirPath
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 9db68f4dea6379b7e85ee5c6f2be080a6fcbe4ca
Component: engine
2017-08-22 17:15:26 -04:00
3177188cce Remove testutil.ParseCgroupPaths
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: e8bd67181533222c192cca19a4279c85db48875e
Component: engine
2017-08-22 17:15:26 -04:00
931aa8f0e2 Remove ConsumeWithSpeed
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 1455086c4b922f09777aa49ec26a98c463be6a49
Component: engine
2017-08-22 17:15:26 -04:00
56e5cffbc1 Remove testutil.ReadBody
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 4f304e72a2e4451b043ab1a73a6c44894333c5c7
Component: engine
2017-08-22 17:15:26 -04:00
5e635809d5 Remove ChannelBuffer
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 6a0105b452e604866320aad7e2ad291beb7925b9
Component: engine
2017-08-22 17:15:26 -04:00
594cd7054e Remove ListTar
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 6ffbe3f6a893a97f534d535538a646d4b79fed03
Component: engine
2017-08-22 17:15:26 -04:00
524d0fa645 Remove testutil.CompareDirectoryEntries and IsKilled
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 6151d55ee7301d2b3800d701a9ce4969848e4d6b
Component: engine
2017-08-22 17:15:26 -04:00
b087533ab3 Remove testutil.ConvertSliceOfStringsToMap
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: d30e51495a7b748d0d5e73e1b8c7edf5c584c4ef
Component: engine
2017-08-22 17:15:26 -04:00
7daf459b1c Remove unused helpers.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: a0c9089971b6c3cdc9ac1233f3c5e27a0a723214
Component: engine
2017-08-22 17:15:26 -04:00
561acebc80 Merge pull request #34570 from simonvik/doublealarm
Remove double defined alarm in seccomp list.
Upstream-commit: f291c959ef6294757db92be5e2add774ceda60cc
Component: engine
2017-08-22 12:50:21 -07:00
5380c10ac4 Pin docker-cli version to the 17.06-ce release version
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: cef786f787dcfd87a50c7d0b7183724ab1242ed8
Component: engine
2017-08-22 14:29:16 -04:00
80226e2163 Add more detailed logging to aufs init
Addresses some comments on 276b44608b04f08bdf46ce7c816b1f744bf24b7d

Signed-off-by: Brian Goff <cpuguy83@gmail.com>
Upstream-commit: 0a98025d4b2910c2089325b87d28c32d05803e13
Component: engine
2017-08-22 14:19:03 -04:00
e12074fbb5 Merge pull request #34587 from cpuguy83/aufs_rm_errors
Fix error removing diff path
Upstream-commit: bbcdc7df34eeb01c2f5741235f26f90749e67a05
Component: engine
2017-08-22 11:02:30 -07:00
b8932dcdf4 Merge pull request #463 from dnephin/remove-pkg-testutil
Remove docker/docker/pkg/testutil
Upstream-commit: 79ecfa876b
Component: cli
2017-08-22 13:53:03 -04:00
f14f410ab3 Rebase --chown function for ADD/COPY
Rebases and completes initial PR for (prior: --user) --chown flag for
ADD/COPY commands in Dockerfile.

Docker-DCO-1.1-Signed-off-by: Phil Estes <estesp@linux.vnet.ibm.com>
Upstream-commit: 19a29f6fcf8354732cface3c656c3a3070230dcb
Component: engine
2017-08-22 13:39:25 -04:00
7a59959943 Merge pull request #347 from Wolphin-project/stdin
support --compose-file - as stdin
Upstream-commit: 0d17ea2577
Component: cli
2017-08-22 13:37:22 -04:00
7b15e791ed Fix error removing diff path
In d42dbdd3d48d0134f8bba7ead92a7067791dffab the code was re-arranged to
better report errors, and ignore non-errors.
In doing so we removed a deferred remove of the AUFS diff path, but did
not replace it with a non-deferred one.

This fixes the issue and makes the code a bit more readable.

Signed-off-by: Brian Goff <cpuguy83@gmail.com>
Upstream-commit: 276b44608b04f08bdf46ce7c816b1f744bf24b7d
Component: engine
2017-08-22 12:51:58 -04:00
cd24988c20 support --compose-file - as stdin
Signed-off-by: Marco Mariani <marco.mariani@alterway.fr>
Upstream-commit: 3a0b967c05
Component: cli
2017-08-22 17:55:59 +02:00
f71ceb67bc Allow extension fields in the v3.4 version of the compose format.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 2a1857e899
Component: cli
2017-08-22 10:42:49 -04:00
ba672661c5 Merge pull request #439 from ripcurld0/fix_image_ls_digest
Show images digests when "{{.Digest}}" is in format
Upstream-commit: 317b735573
Component: cli
2017-08-22 16:17:43 +02:00
01f2e768d7 Use new internal testutil.ErrorContains()
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 846a31aa50
Component: cli
2017-08-22 10:14:25 -04:00
b141cbce57 Move internal/test package out of cli.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: b3f843afe2
Component: cli
2017-08-22 10:14:25 -04:00
0b20e1c511 Show images digests when "{{.Digest}}" is in format
This patch fixes the following bug:

Running "docker image ls --digests" will add images digests
to the image table. However, when using "format" to display
images digests all of them are "<none>".

Signed-off-by: Boaz Shuster <ripcurld.github@gmail.com>
Upstream-commit: 83112f6343
Component: cli
2017-08-22 16:55:10 +03:00
c49d8409df Merge pull request #34594 from tizhou86/master
Fix typo in docs/api/version-history.md
Upstream-commit: 76a7f05795df38cc5a720fa52d37f4a2bc23b015
Component: engine
2017-08-22 06:19:46 -07:00
243671339d Merge pull request #386 from thaJeztah/fix-image-resolve-detection
Fix image resolve detection
Upstream-commit: 8da1daeefa
Component: cli
2017-08-22 15:05:39 +02:00
fb9a7edb75 Merge pull request #31727 from sascha-andres/31726-le-lion-only
Log payload only [logentries]
Upstream-commit: b3b630655dfe8bcaa35af9ece296189660ed22ae
Component: engine
2017-08-22 14:59:28 +02:00
8fc04bd8d4 Merge pull request #34588 from dnephin/more-linters
Add deadcode and goimports linters
Upstream-commit: 6540d5581473c292ade46ee1b620172441943f4b
Component: engine
2017-08-22 05:12:50 -07:00
7cc406aa10 Merge pull request #34572 from krizalys/hyphenless-bind-mount
Dropped hyphen in bind mount where appropriate
Upstream-commit: 28362f11d73b5b72ff9d7eba27cf9f817ec86ef8
Component: engine
2017-08-22 05:11:46 -07:00
d06d19b543 Fixed typo in docs/api/version-history.md
Signed-off-by: Ti Zhou <tizhou1986@gmail.com>
Upstream-commit: a35bfd0b43b132754c9a06d69802d69bddfd829f
Component: engine
2017-08-22 16:47:08 +08:00
08c57e48ed Update Windows and LCOW to use v1.0.0 runtime-spec
Signed-off-by: Darren Stahl <darst@microsoft.com>
Signed-off-by: Kenfe-Mickael Laventure <mickael.laventure@gmail.com>
Upstream-commit: 7c29103ad9b4e02ecc6cdde01da9c3675a377fc4
Component: engine
2017-08-21 15:19:31 -07:00
94c685a721 Add deadcode linter
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 62c1f0ef41e6cd88a8846da1c11976a320ca8b41
Component: engine
2017-08-21 18:18:50 -04:00
6b3b192846 Add goimports to linters.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 372670b5074b077927314cdf46af30f8752e7db0
Component: engine
2017-08-21 18:15:08 -04:00
5305a1cd9e Update containerd to 06b9cb35161009dcb7123345749fef02f7cea8e0
This also update:
 - runc to 3f2f8b84a77f73d38244dd690525642a72156c64
 - runtime-specs to v1.0.0

Signed-off-by: Kenfe-Mickael Laventure <mickael.laventure@gmail.com>
Upstream-commit: 45d85c99139bbd16004bbedb7d5bac6a60264538
Component: engine
2017-08-21 12:04:07 -07:00
34feb17aa0 Merge pull request #460 from krizalys/hyphenless-bind-mount
Dropped hyphen in bind mount where appropriate
Upstream-commit: fa986e8039
Component: cli
2017-08-21 20:29:27 +02:00
4d8217810d Merge pull request #461 from jphuynh/zsh-service-rollback
Add zsh completion for `service rollback`
Upstream-commit: 387cbcebb7
Component: cli
2017-08-21 13:29:01 -04:00
622dcc2576 Merge pull request #462 from albers/completion-service-rollback
Add bash completion for `service rollback`
Upstream-commit: 77faf03727
Component: cli
2017-08-21 10:25:03 -04:00
9724d4044a Add bash completion for service rollback
Signed-off-by: Harald Albers <github@albersweb.de>
Upstream-commit: d1ed800860
Component: cli
2017-08-21 14:50:46 +02:00
4f846a2e15 Use event functions from golang.org/x/sys/windows
Use CreateEvent, OpenEvent (which both map to the respective *EventW
function) and PulseEvent from golang.org/x/sys instead of local copies.

Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
Upstream-commit: e942513ac46656c3f54cd103e990e2b7bd5c2b14
Component: engine
2017-08-21 12:58:09 +02:00
3bf60d04de vendor: re-vendor golang.org/x/sys
Update golang.org/x/sys to 07c182904dbd53199946ba614a412c61d3c548f5 in
order to get the newly added Windows event functions which will be used
in successive commits.

Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
Upstream-commit: df58f40a47ea4ee462eb88d3e695bec93c99a6bb
Component: engine
2017-08-21 12:48:05 +02:00
53a6b2ff69 Add zsh completion for service rollback
Signed-off-by: Jean-Pierre Huynh <jean-pierre.huynh@ounet.fr>
Upstream-commit: 8929c49c3a
Component: cli
2017-08-20 20:37:27 +01:00
1c65c425a3 Merge pull request #34560 from dnephin/remove-some-cli-tests
Remove a couple cli tests, which are now unit tests in docker/cli
Upstream-commit: 361a473121f2cd4e688a3bb71fbeff00aaf674d7
Component: engine
2017-08-19 14:31:05 -07:00
0f9c6d96f0 Merge pull request #34551 from dnephin/use-gometalinter
Use gometalinter for linting
Upstream-commit: 4c8cde597daf3d96f74d3b6c4ff3a23e51f8abd3
Component: engine
2017-08-19 09:40:47 -07:00
3c66acc139 Dropped hyphen in bind mount where appropriate
Signed-off-by: Christophe Vidal <kriss@krizalys.com>
Upstream-commit: dffa5d6df2e51556edfbcebc4695fdbc0bcc1a90
Component: engine
2017-08-19 21:25:07 +07:00
31162a9a25 Dropped hyphen in bind mount where appropriate
Signed-off-by: Christophe Vidal <kriss@krizalys.com>
Upstream-commit: 037029414d
Component: cli
2017-08-19 21:14:48 +07:00
43172bf261 Merge pull request #205 from redpanda/rollback
Add 'docker service rollback' subcommand
Upstream-commit: 3c7ede6a68
Component: cli
2017-08-19 15:56:14 +02:00
bffaf97a87 Remove double defined alarm
Signed-off-by: Simon Vikstrom <pullreq@devsn.se>
Upstream-commit: d7bf5e3b4db05b64d969127f6465f47cf4fe97d0
Component: engine
2017-08-19 09:55:03 +02:00
3153600b5a Move to a single tag-store
Signed-off-by: John Howard <jhoward@microsoft.com>
Upstream-commit: 7b9a8f460bfa55dacca74f2ed0164323811e1196
Component: engine
2017-08-18 17:09:27 -07:00
b47e1bb237 Merge pull request #34539 from fcrisciani/ln-vendoring
Libnetwork vendoring
Upstream-commit: 0e0b8530210729bd7cd7fa87bf583e0c83652651
Component: engine
2017-08-18 14:11:58 -07:00
a82f513c02 Merge pull request #34552 from dnephin/add-integration-validation
Add validation for integration-cli deprecation
Upstream-commit: 2ad59cd901eb651665665bff9c2916ab50d5d4b0
Component: engine
2017-08-18 14:09:21 -07:00
3fa5ba0a1e plugable secret backend - update vendor.conf
Updating swarmkit dependencies.

Add more parameters for the secret driver API.

Signed-off-by: Liron Levin <liron@twistlock.com>
Upstream-commit: 3b8d36d0646137c4315cfa12df0dcd49b584d22a
Component: engine
2017-08-18 21:52:26 +03:00
39c495c1d1 Remove config tests, which are now unit tests in docker/cli
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: c467a112050d595ca0b48122cd4ce81fcf6cefde
Component: engine
2017-08-18 14:24:52 -04:00
3995851d84 Add a validation for integration-cli deprecation.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 89c0c5feb28c01dfc4e026b98107ca07c8d6c956
Component: engine
2017-08-18 14:24:32 -04:00
de626e10fb Fix golint errors.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 9b47b7b1519c5f2138e2933fb1fc459eb00895c0
Component: engine
2017-08-18 14:23:44 -04:00
63a6b47bce Use gometalinter for linting
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: d7e2c4ce773b3a54f47e84a5a1ef22eb72c978b5
Component: engine
2017-08-18 14:23:43 -04:00
2e782847eb Add unit tests for initializing the client.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 930f97dd09
Component: cli
2017-08-18 12:49:23 -04:00
3f532263bf Merge pull request #455 from shin-/prevent_invalid_resources
Update schemas to prevent invalid properties in deploy.resources
Upstream-commit: a8a3ffa8ef
Component: cli
2017-08-18 11:42:39 -04:00
ce23144495 Fixed raw mode splunk logger
Splunk HEC does not accept log events with an empty string or a
whitespace-only string.

Signed-off-by: Florian Noeding <florian@noeding.com>
Upstream-commit: 5f6d6a5093a4db799f9c1a6bb82eed1eea13ec0c
Component: engine
2017-08-18 12:03:43 +02:00
8cb69b8ef5 Merge pull request #34405 from Microsoft/jjh/lcowworkdir
LCOW: WORKDIR correct handling
Upstream-commit: 30eb4d8cdc422b023d5f11f29a82ecb73554183b
Component: engine
2017-08-17 21:16:36 -05:00
8de8152c0b Merge pull request #34548 from dnephin/remove-some-cli-tests
Remove a couple cli-only tests from integration-cli
Upstream-commit: 098a7b3d53ae8267ec95e2935316b0e62b483b02
Component: engine
2017-08-18 10:03:45 +09:00
6092fc343f Update schemas to prevent invalid properties in deploy.resources
Signed-off-by: Joffrey F <joffrey@docker.com>
Upstream-commit: 1667073908
Component: cli
2017-08-17 15:58:51 -07:00
0acc3ead17 LCOW: WORKDIR correct handling
Signed-off-by: John Howard <jhoward@microsoft.com>
Upstream-commit: 9fa449064cc499871d49f02b96a7e69c071ce50c
Component: engine
2017-08-17 15:29:17 -07:00
04e18204b0 Merge pull request #449 from dnephin/use-gotestyourself
Remove dependency on (most of) docker/docker/pkg/testutil
Upstream-commit: e57842edb8
Component: cli
2017-08-17 12:37:18 -07:00
dd8d1a11c6 Merge pull request #34407 from dnephin/add-TESTING-doc
[Proposal] Document testing guidelines
Upstream-commit: 867a5999cefccefb3e0fb79ffa22f01dd7c1a5e1
Component: engine
2017-08-17 12:33:43 -07:00
a6a08902d2 Merge pull request #448 from thaJeztah/fix-typo
Fix typo and minor Markdown edits
Upstream-commit: 070d0811e3
Component: cli
2017-08-17 19:59:55 +02:00
379cbb4ffb Merge pull request #34547 from dnephin/add-myself-to-CODEOWNERS
Add myself to CODEOWNERS for integration suite
Upstream-commit: 81cd5e441ad87ae85d5f721f2dfa8c6d8c9141d7
Component: engine
2017-08-17 13:26:33 -04:00
c1824669c3 Add myself to CODEOWNERS for integration suite.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 9b094fc4a3845c1f1c8aed9730421aab096dadc1
Component: engine
2017-08-17 13:03:47 -04:00
dc46befdc9 Remove cli-only tests from integration-cli
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 98d8c96885593f8f085bf9607b7d817e23d7164c
Component: engine
2017-08-17 12:32:49 -04:00
7048b7f056 Fix typo and minor Markdown edits
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Upstream-commit: 9544b70cb3
Component: cli
2017-08-17 02:29:24 +02:00
ef0d9067ae Merge pull request #447 from thaJeztah/fix-liquid-warning
Fix "liquid" warning on logging plugins page
Upstream-commit: 799de1dae2
Component: cli
2017-08-17 02:27:34 +02:00
0d15a1c160 Fix "liquid" warning on logging plugins page
Noticed this warning in the documentation CI:

    Liquid Warning: Liquid syntax error (line 210): Expected end_of_string but found id in "{{ log stream }}" in engine/extend/plugins_logging.md

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Upstream-commit: d30987f85f
Component: cli
2017-08-17 00:56:54 +02:00
e7d8c55034 Merge pull request #446 from krizalys/fix-grammar
Fixed grammar
Upstream-commit: 3e831e4472
Component: cli
2017-08-16 23:20:31 +02:00
cded911aad Add 'docker service rollback' subcommand
Signed-off-by: Jimmy Leger <jimmy.leger@gmail.com>

Implement runRollback to not use runUpdate

Signed-off-by: Jimmy Leger <jimmy.leger@gmail.com>

Add version tag and add flag quiet to suppress progress output

Signed-off-by: Jimmy Leger <jimmy.leger@gmail.com>

Removed flags from warnDetachDefault

Signed-off-by: Jimmy Leger <jimmy.leger@gmail.com>

Used command.Cli interface

Signed-off-by: Jimmy Leger <jimmy.leger@gmail.com>

Add detach flag on rollback command

Signed-off-by: Jimmy Leger <jimmy.leger@gmail.com>

Create a fakeClient for service commands

Signed-off-by: Jimmy Leger <jimmy.leger@gmail.com>

Added unit test for rollback command

Signed-off-by: Jimmy Leger <jimmy.leger@gmail.com>

Used command.Cli interface instead of *command.DockerCli in service commands

Signed-off-by: Jimmy Leger <jimmy.leger@gmail.com>

Revert "Removed flags from warnDetachDefault"

This reverts commit 3e4f601c8a82cc2599a755dc693409bbc47917fc.

Signed-off-by: Jimmy Leger <jimmy.leger@gmail.com>

Fixed test.NewFakeCli instanciation

Signed-off-by: Jimmy Leger <jimmy.leger@gmail.com>

Removed unused receiver

Signed-off-by: Jimmy Leger <jimmy.leger@gmail.com>

Replaced cli by dockerCli

Signed-off-by: Jimmy Leger <jimmy.leger@gmail.com>

Revert "Removed unused receiver"

This reverts commit 604ef7c13df3d019949ca81d992db501114dafce.

Signed-off-by: Jimmy Leger <jimmy.leger@gmail.com>

Fixed last typo

Signed-off-by: Jimmy Leger <jimmy.leger@gmail.com>
Upstream-commit: 11d471d660
Component: cli
2017-08-16 22:18:36 +02:00
5478a26336 Merge pull request #34528 from adshmh/client-should-return-image-not-found-for-404-status
client to return imageNotFound error if API returns 404 status code
Upstream-commit: db73f3daee21a28edbf6991d24a4653adc85f1a2
Component: engine
2017-08-16 13:18:00 -07:00
55bd0229fa Replace pkg/testutil/tempfile with gotestyourself/fs
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 15837afa77
Component: cli
2017-08-16 14:23:28 -04:00
34fe016d0d Update volume command tests to use the new golden
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 505a0fe45f
Component: cli
2017-08-16 14:23:28 -04:00
a5b8c46809 Update swarm command tests to use the new golden
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 3d68aa8416
Component: cli
2017-08-16 14:23:28 -04:00
38bd6cfe47 Update stack and task command tests to new golden
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 1dd742eac8
Component: cli
2017-08-16 14:23:28 -04:00
2c6a1a2476 Update service and secret command tests to new golden
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 4c62d7288f
Component: cli
2017-08-16 14:23:28 -04:00
79c79c9b8f Update node command tests to the new golden
Also remove some superfluous tests that are now covered by a strict golden.Assert

Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 0e2bf7420a
Component: cli
2017-08-16 14:23:15 -04:00
c06d7f05e3 Update image command tests to use the new golden
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 75f7bfedf8
Component: cli
2017-08-16 14:20:36 -04:00
5a6dec9ec1 Update config and checkpoint commands to use gotestyourself/golden
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: f9007ad7db
Component: cli
2017-08-16 14:19:00 -04:00
1c8e4b07c7 Merge pull request #34536 from thaJeztah/fix-makefile-warning
Fix make test-unit printing deprecation warning
Upstream-commit: 8bee1e9a3ba0884cf1bb0d7fa069fb3c5722af51
Component: engine
2017-08-16 11:16:04 -07:00
3b7026d84c Add gotestyourself dependency.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 882992c6fc
Component: cli
2017-08-16 14:08:08 -04:00
457a3de5d9 Updated & reformulated kinds of mounts section
Signed-off-by: Christophe Vidal <kriss@krizalys.com>
Upstream-commit: 9c4b9c6f63
Component: cli
2017-08-17 00:51:35 +07:00
2170bca7b5 Libnetwork vendoring
- lock OS thread in overlay driver operation

Signed-off-by: Flavio Crisciani <flavio.crisciani@docker.com>
Upstream-commit: 85706876471400716f2b37ca0a0bbd75128fc412
Component: engine
2017-08-16 09:48:12 -07:00
9156c95e0a Merge pull request #34188 from cpuguy83/32144_api_error_handling
Remove string checking in API error handling
Upstream-commit: 2afb3efaa63537cc152437af3cd7a6743fcb3d8d
Component: engine
2017-08-16 08:53:15 -07:00
847cb8e0df Add a Jenkinsfile
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 63d76065bb
Component: cli
2017-08-16 10:46:43 -04:00
66fb82e7e8 Add first e2e test
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: b5cb5ee446
Component: cli
2017-08-16 10:46:40 -04:00
581aa22bc8 Add scripts for setting up e2e test environment.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 26418a12fb
Component: cli
2017-08-16 10:35:56 -04:00
53ea16fce8 Add gotestyourself dependency.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 85f7ed8cfa
Component: cli
2017-08-16 10:35:56 -04:00
3d5737e04c Fix make test-unit printing deprecation warning
Commit 1fb615599a83f41b449529df24f7e833c727e0ed moved the unit tests out
of `hack/make.sh`, however the Makefile still used the old path, resulting
in a warning being printed when the unit tests were run:

    ---> Making bundle: test-unit (in bundles/17.06.0-dev/test-unit)
    DEPRECATED: use hack/test/unit instead of hack/make.sh test-unit

This patch updates the Makefile to use the new command.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Upstream-commit: c500bb562f6dfd1ae4a77f3a66175089ff8f74e8
Component: engine
2017-08-16 16:02:04 +02:00
8a95291c98 Merge pull request #34485 from thaJeztah/swagger-updates
Various fixes and improvements to the API docs / Swagger specs
Upstream-commit: 3d843e81d0cabe8d341f24f63d71548bc0ffd376
Component: engine
2017-08-16 14:29:06 +02:00
095929f4ed Merge pull request #444 from dnephin/faster-validate-ci
Don't sleep in CI
Upstream-commit: 17adcbdada
Component: cli
2017-08-16 13:45:44 +02:00
ee29bacf1d Create definition for SystemInfo response
The `/info` endpoint was badly documented, missing various
fields and incorrectly describing others.

This patch defines a type for the endpoint, based on the
API types in the source.

Also removing the response example in favor of
per-field examples, as this prevents an incorrectly
formatted response from masking omissions in the
actual type.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Upstream-commit: 18b23067be82054a6384fc5934ecbb0276d1862b
Component: engine
2017-08-16 11:11:29 +02:00
81aceb39fb Remove redundant example for Node
All example values are now documented per field,
so are automatically used to generate responses.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Upstream-commit: 2720cefbb2eaac9f440cd7c1807b4222b18ee0c4
Component: engine
2017-08-16 11:11:19 +02:00
031f55b2f7 Add definition for Swarm inspect response
Also remove inline response examples

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Upstream-commit: 5b017ef45d68748b8f4065db137aa55e1ff0e8ab
Component: engine
2017-08-16 11:11:14 +02:00
3a37403bb9 Extract NodeDescription to a separate definition
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Upstream-commit: 33e2c994015cbc8f7e86bc1b764e17a7470a17ac
Component: engine
2017-08-16 11:11:09 +02:00
54e785932e Extract EngineDescription to a separate definition
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Upstream-commit: 7cb4a97ae195bce55b0a2e54e08b3cd1b4b190af
Component: engine
2017-08-16 11:11:04 +02:00
4645cfda21 Extract Platform to a separate definition
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Upstream-commit: a2de2681a65d034ffb231b15b630b5a053608331
Component: engine
2017-08-16 11:10:58 +02:00
d0c8aa84bd Add missing definition for Node.ManagerStatus
The `Node.ManagerStatus`  property was only present in
the example, but not in the definition.

This patch adds definitions for `ManagerStatus`
and `Reachability`, similar to what is used in the
code;
f02a5b50c4/api/types/swarm/node.go (L84-L101)

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Upstream-commit: 3f1ad79faf3bfecc19722eb6541bb415024dafe4
Component: engine
2017-08-16 11:10:53 +02:00
9fee66bce7 Add missing definition for Node.Status
The `Node.Status`  property was only present in
the example, but not in the definition.

This patch adds definitions for `NodeStatus`
and `NodeState`, similar to what is used in the
code;

- f02a5b50c4/api/types/swarm/node.go (L77-L82)
- f02a5b50c4/api/types/swarm/node.go (L103-L115)

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Upstream-commit: 26b247e706e613af5214e4a89de375128f3368dd
Component: engine
2017-08-16 11:10:47 +02:00
6526a15536 Fix TLSInfo in Node specification
- `TLSInfo` is part of `Node.Description`, but was documented as a
  direct child of `Node`
- `Node.TLSInfo` incorrectly was using the `SwarmSpec` type,
  instead of `TLSInfo`

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Upstream-commit: b2de157a41bbd18ca4317792614e8630d73a7102
Component: engine
2017-08-16 11:10:42 +02:00
d3b3ce345c Update incorrect types in Swagger
- `ObjectVersion.Index` is an `uint64` 0fd90c4d5d/api/types/swarm/common.go (L5-L15)
- `ClusterInfo` is nullable in the `/info` output (see ff4f700f74/api/types/swarm/swarm.go (L203))
- `CAConfig.ForceRotate` was missing a type, therefore treated as an `object` in Swagger: ff4f700f74/api/types/swarm/swarm.go (L121)
- `Raft.SnapshotInterval`, `Raft.KeepOldSnapshots`, and `Raft.LogEntriesForSlowFollowers` are an `uint64` not an `int64`
- Various fields in `swarm.Info` are nullable; added `x-nullable`

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Upstream-commit: 93e324e2a7b8131414382b6fb38b69f0d09bc30c
Component: engine
2017-08-16 11:10:32 +02:00
da62e48708 Update / add extra description fields to Swagger
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Upstream-commit: 934378bee3846b1f0b790d3ee185d161900cb953
Component: engine
2017-08-16 11:10:27 +02:00
d01174e4e5 Add extra example values to definitions
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Upstream-commit: fa05a53426da6183199a97071e3d60a6d41a39be
Component: engine
2017-08-16 11:10:22 +02:00
8a9c9ec9a9 Reformat definitions - add some whitespace
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Upstream-commit: f720f9cc33e1be12b767f5066511266d87a7673b
Component: engine
2017-08-16 11:10:14 +02:00
12bfda3c10 Merge pull request #34478 from thaJeztah/fix-swagger-todos
Update NetworkConfig definition in Swagger
Upstream-commit: 1454015ce96510fb677ab85bf26610f559a0c613
Component: engine
2017-08-16 11:07:25 +02:00
934616e542 Replacing os.Lstat with os.Stat to determine directory status in CopyInfoDestinationPath
Signed-off-by: Douglas Curtis <dougcurtis1@gmail.com>

Commenting out tests for now

Signed-off-by: Doug Curtis <dougcurtis1@gmail.com>

Added unit test for CopyInfoDestionationPath.

Signed-off-by: Doug Curtis <dougcurtis1@gmail.com>

Removing integration-cli test case additions

Signed-off-by: Doug Curtis <dougcurtis1@gmail.com>

Removing extra spaces between archive_unix_test.go test cases

Signed-off-by: Doug Curtis <dougcurtis1@gmail.com>

Fixed gofmt issues in archive_unix_test.go

Signed-off-by: Doug Curtis <dougcurtis1@gmail.com>
Upstream-commit: cd7489f2b745578e0d8855aa44213b07b495f86f
Component: engine
2017-08-15 23:19:42 +00:00
e89e83b8bc client should return imageNotFound error when API returns 404 status code
Signed-off-by: Arash Deshmeh <adeshmeh@ca.ibm.com>
Upstream-commit: 33d82b78d03f7db4ef743951c6a004ba4fe64637
Component: engine
2017-08-15 17:16:02 -04:00
8ae99115c1 Merge pull request #443 from dnephin/ignore-codecov-upload-fail
Ignore codecov upload failures in CI
Upstream-commit: 35c60bbd9b
Component: cli
2017-08-15 13:05:43 -07:00
30f1b651e2 Remove string checking in API error handling
Use strongly typed errors to set HTTP status codes.
Error interfaces are defined in the api/errors package and errors
returned from controllers are checked against these interfaces.

Errors can be wraeped in a pkg/errors.Causer, as long as somewhere in the
line of causes one of the interfaces is implemented. The special error
interfaces take precedence over Causer, meaning if both Causer and one
of the new error interfaces are implemented, the Causer is not
traversed.

Signed-off-by: Brian Goff <cpuguy83@gmail.com>
Upstream-commit: ebcb7d6b406fe50ea9a237c73004d75884184c33
Component: engine
2017-08-15 16:01:11 -04:00
b4e14f104b Set DISABLE_WARN_OUTSIDE_CONTAINER in the Dockerfile so that we don't spend 10s sleeping in CI
also add time to validate check

Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 058733969c
Component: cli
2017-08-15 14:34:43 -04:00
750260f43f Ignore codecov upload failures in CI.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 4e09dba068
Component: cli
2017-08-15 14:34:43 -04:00
850fb084cc Merge pull request #430 from dnephin/add-build-target-to-compose
Add network and target to build in v3.4
Upstream-commit: 04659b8802
Component: cli
2017-08-15 19:20:49 +02:00
615f3700ae Docs for Windows daemon graphdriver options
Signed-off-by: John Howard <jhoward@microsoft.com>
Upstream-commit: c848f9acb6
Component: cli
2017-08-15 10:20:15 -07:00
e3f190dc00 Ignore codecov upload failures in CI.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 6a7dc459dd
Component: cli
2017-08-15 13:17:20 -04:00
13f12ea9ac Merge pull request #34508 from Microsoft/jjh/mergestorageopt
Merge global storage options on create
Upstream-commit: cd902848e913aead3e8242eca8a6ed6c67e589e1
Component: engine
2017-08-15 18:13:13 +02:00
e80c7b1a0c Merge pull request #34504 from fcrisciani/ln-vendoring
Libnetwork vendoring
Upstream-commit: 036314622de7cfc62b5f9a88c849faf17c9bc1d3
Component: engine
2017-08-15 08:06:26 -07:00
7eea9c9616 Merge pull request #34109 from yummypeng/rm-link-when-rm-container
Bugfix: Remove links when remove container
Upstream-commit: b6498340b2baa6596553b2b56b43990a365a7b6a
Component: engine
2017-08-15 09:43:00 -04:00
9522e0432e Merge pull request #33450 from naveed-jamil-tenpearls/pkg/signal/trap
Add test coverage to signal/trap.go
Upstream-commit: 479cc38bb94178d48609def34dfb0eae87a9a815
Component: engine
2017-08-15 00:53:37 -07:00
f6b9be5da8 Update NetworkConfig definition in Swagger
This patch updates the definition of `NetworkConfig` to match the code, and
renames to the definition to `NetworkSettings` (also to match the type in
the code).

Add definitions for:

- `Address`
- `PortMap`
- `PortBinding`
- `EndpointIPAMConfig`

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Upstream-commit: b98ceb7121c5513c73d69081737ad824384c5391
Component: engine
2017-08-15 09:39:41 +02:00
fe13f30f0f Merge global storage options on create
Signed-off-by: John Howard <jhoward@microsoft.com>
Upstream-commit: 932ae425e8a8aac86f70c249f3a0304101e83614
Component: engine
2017-08-14 15:47:54 -07:00
a71e5a5cde Merge pull request #34487 from tonistiigi/host-suffix-fix
Fix requests for docker host ending with slash
Upstream-commit: f148337da9afef5ecc06d1719d19a770079929ef
Component: engine
2017-08-14 13:29:02 -07:00
a3ff59d2d3 Merge pull request #354 from dnephin/warn-outside-container
Add a warning when make is run outside of a container
Upstream-commit: 703a7cca2b
Component: cli
2017-08-14 14:10:12 -04:00
1ebf5edb0d Merge component 'engine' from git@github.com:moby/moby master 2017-08-14 16:37:05 +00:00
4233bbe278 Libnetwork vendoring
Signed-off-by: Flavio Crisciani <flavio.crisciani@docker.com>
Upstream-commit: 167564a798365d9924260e721954b7ca43322726
Component: engine
2017-08-14 09:31:23 -07:00
9685380dbb Merge pull request #34492 from AkihiroSuda/fix-integration-cli-on-swarm
Fix `make build-integration-cli-on-swarm`
Upstream-commit: 07227a1227e1cdecdd89060d98bf67d0f49503e6
Component: engine
2017-08-14 12:20:18 -04:00
1cf9480827 Merge component 'cli' from git@github.com:docker/cli master 2017-08-14 16:17:02 +00:00
750199d765 Merge component 'packaging' from git@github.com:docker/docker-ce-packaging master 2017-08-14 16:15:08 +00:00
13c5fe42cf Merge pull request #34419 from keloyang/config.v2.json
security: Chmod config.v2.json to 0600
Upstream-commit: e4c19aa529342e0c8947288cbf9a8cbbf025100a
Component: engine
2017-08-14 08:39:58 -07:00
fbf74e8b6c Merge pull request #34486 from kolyshkin/dm-misc
Misc fixes for devmapper
Upstream-commit: af3a9e33145add7994b3e8ea246fa5e5118a45bd
Component: engine
2017-08-14 17:20:40 +02:00
133a5fd166 Merge pull request #436 from thaJeztah/improve-singular-plural-message
Singularize / pluralize "argument(s)" in error message
Upstream-commit: 3b8cf20a0c
Component: cli
2017-08-14 11:06:25 -04:00
2d6cf733e9 Merge pull request #438 from ripcurld0/history_fix
Print timestamp when --human=true
Upstream-commit: 898f1e2997
Component: cli
2017-08-14 16:02:04 +02:00
2b769b8b71 Merge pull request #34362 from kolyshkin/update-libdevmapper
Dockerfile*: bump devmapper library version
Upstream-commit: 31d8d2253ebb77ef7b341606cbdf0e76835e64db
Component: engine
2017-08-14 09:56:43 -04:00
99367ff683 Merge pull request #34087 from kolyshkin/ipcmode
Implement private and shareable ipc modes
Upstream-commit: bb6fc72cd2bd0f194940c7710d8ed8cf3fb99d21
Component: engine
2017-08-14 15:52:21 +02:00
ded67f686e devmapper autosetup: add check for thin_check
I was able to successfully use device mapper autoconfig feature
(commit 5ef07d79c) but it stopped working after a reboot.

Investigation shown that the dm device was not activated because of
a missing binary, that is not used during initial setup, but every
following time. Here's an error shown when trying to manually activate
the device:

> kir@kd:~/go/src/github.com/docker/docker$ sudo lvchange -a y /dev/docker/thinpool
> /usr/sbin/thin_check: execvp failed: No such file or directory
> Check of pool docker/thinpool failed (status:2). Manual repair required!

Surely, there is no solution to this other than to have a package that
provides the thin_check binary installed beforehand. Due to the fact
the issue revealed itself way later than DM setup was performed, it was
somewhat harder to investigate.

With this in mind, let's check for binary presense before setting up DM,
refusing to proceed if the binary is not there, saving a user from later
frustration.

While at it, eliminate repeated binary checking code. The downside is
that the binary lookup is happening more than once now -- I think the
clarity of code overweights this minor de-optimization.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
Upstream-commit: 58a453f3f06c1daf34544da8aa16bb95e8e18010
Component: engine
2017-08-14 13:25:28 +03:00
e79a815f73 Merge pull request #432 from lukahartwig/docs-add-docker-events-examples
Added docker events example with until option to documentation
Upstream-commit: b8d325efd5
Component: cli
2017-08-14 10:57:46 +02:00
5f265aadb9 Merge pull request #349 from jphuynh/shellcheck-scripts
Add scripts folder to shellcheck
Upstream-commit: 53d8886f9c
Component: cli
2017-08-14 10:26:45 +02:00
26d7f26c3b Merge pull request #434 from bryfry/patch-1
Documentation: Make the example match the documentation table
Upstream-commit: 7ceb25f895
Component: cli
2017-08-14 10:25:20 +02:00
c5b1acac69 Merge pull request #390 from thaJeztah/add-test-for-github-special-case
Add test for github.com special handling
Upstream-commit: aaf6939679
Component: cli
2017-08-14 10:24:13 +02:00
1a431d82d1 Test cases for new ipc modes
These test cases cover various arguments for docker create/run --ipc
option, as well as daemon's --default-ipc-mode cli option and
configuration file parameter.

For the description of container IPC modes, see previous commit.

To run these:

	TESTFLAGS='-check.f IpcMode' make test-integration-cli

[v2: simplify TestDaemonEvents(), add default-ipc-mode presense check]
[v3: add TestDaemonIpcModeVSRestart]
[v4: ipcmode test now uses client lib instead of CLI (except for exec)]
[v5: nitpicks in comments]
[v6: add test case for "none"; fix a typo; simplify TestDaemonEvents() more]

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
Upstream-commit: 9a60e1cc874402d10eb7e45f62cce25bf5c41d30
Component: engine
2017-08-14 11:00:26 +03:00
eca24fb7b0 Implement none, private, and shareable ipc modes
Since the commit d88fe447df0e8 ("Add support for sharing /dev/shm/ and
/dev/mqueue between containers") container's /dev/shm is mounted on the
host first, then bind-mounted inside the container. This is done that
way in order to be able to share this container's IPC namespace
(and the /dev/shm mount point) with another container.

Unfortunately, this functionality breaks container checkpoint/restore
(even if IPC is not shared). Since /dev/shm is an external mount, its
contents is not saved by `criu checkpoint`, and so upon restore any
application that tries to access data under /dev/shm is severily
disappointed (which usually results in a fatal crash).

This commit solves the issue by introducing new IPC modes for containers
(in addition to 'host' and 'container:ID'). The new modes are:

 - 'shareable':	enables sharing this container's IPC with others
		(this used to be the implicit default);

 - 'private':	disables sharing this container's IPC.

In 'private' mode, container's /dev/shm is truly mounted inside the
container, without any bind-mounting from the host, which solves the
issue.

While at it, let's also implement 'none' mode. The motivation, as
eloquently put by Justin Cormack, is:

> I wondered a while back about having a none shm mode, as currently it is
> not possible to have a totally unwriteable container as there is always
> a /dev/shm writeable mount. It is a bit of a niche case (and clearly
> should never be allowed to be daemon default) but it would be trivial to
> add now so maybe we should...

...so here's yet yet another mode:

 - 'none':	no /dev/shm mount inside the container (though it still
		has its own private IPC namespace).

Now, to ultimately solve the abovementioned checkpoint/restore issue, we'd
need to make 'private' the default mode, but unfortunately it breaks the
backward compatibility. So, let's make the default container IPC mode
per-daemon configurable (with the built-in default set to 'shareable'
for now). The default can be changed either via a daemon CLI option
(--default-shm-mode) or a daemon.json configuration file parameter
of the same name.

Note one can only set either 'shareable' or 'private' IPC modes as a
daemon default (i.e. in this context 'host', 'container', or 'none'
do not make much sense).

Some other changes this patch introduces are:

1. A mount for /dev/shm is added to default OCI Linux spec.

2. IpcMode.Valid() is simplified to remove duplicated code that parsed
   'container:ID' form. Note the old version used to check that ID does
   not contain a semicolon -- this is no longer the case (tests are
   modified accordingly). The motivation is we should either do a
   proper check for container ID validity, or don't check it at all
   (since it is checked in other places anyway). I chose the latter.

3. IpcMode.Container() is modified to not return container ID if the
   mode value does not start with "container:", unifying the check to
   be the same as in IpcMode.IsContainer().

3. IPC mode unit tests (runconfig/hostconfig_test.go) are modified
   to add checks for newly added values.

[v2: addressed review at https://github.com/moby/moby/pull/34087#pullrequestreview-51345997]
[v3: addressed review at https://github.com/moby/moby/pull/34087#pullrequestreview-53902833]
[v4: addressed the case of upgrading from older daemon, in this case
     container.HostConfig.IpcMode is unset and this is valid]
[v5: document old and new IpcMode values in api/swagger.yaml]
[v6: add the 'none' mode, changelog entry to docs/api/version-history.md]

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
Upstream-commit: 7120976d74195a60334c688a061270a4d95f9aeb
Component: engine
2017-08-14 10:50:39 +03:00
94157b8e90 devmapper: refer to dockerd man page
...not the docker one.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
Upstream-commit: 8b7bd58869725dce2f0fcfd582d23dc5e0cfcf8e
Component: engine
2017-08-14 10:09:58 +03:00
d92c40217f devmapper autoconfig: add mkdir
I tried using dm.directlvm_device but it ended up with the following
error:

> Error starting daemon: error initializing graphdriver: error
> writing docker thinp autoextend profile: open
> /etc/lvm/profile/docker-thinpool.profile: no such file or directory

The reason is /etc/lvm/profile directory does not exist. I think it is
better to try creating it beforehand.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
Upstream-commit: 6ca20ec771ab7c0ebf64c20021ca795746cf3ccb
Component: engine
2017-08-14 10:09:34 +03:00
44e937f3a9 Print timestamp when --human=true
* Setting "--human=true" changes "CreatedSince" format

* "CreatedAt" now displays the creation timestamp as
  specified in the documents

Signed-off-by: Boaz Shuster <ripcurld.github@gmail.com>
Upstream-commit: 5e7f0f67a8
Component: cli
2017-08-12 23:12:47 +03:00
7e214d1c8f Singularize / pluralize "argument(s)" in error message
The validation functions to test for the number of passed arguments did not
pluralize `argument(s)`, and used `argument(s)` in all cases.

This patch adds a simple `pluralize()` helper to improve this.

Before this change, `argument(s)` was used in all cases:

    $ docker container ls foobar
    "docker container ls" accepts no argument(s).

    $ docker network create one two
    "docker network create" requires exactly 1 argument(s).

    $ docker network connect
    "docker network connect" requires exactly 2 argument(s).

    $ docker volume create one two
    "docker volume create" requires at most 1 argument(s).

After this change, `argument(s)` is properly singularized or plurarized:

    $ docker container ls foobar
    "docker container ls" accepts no arguments.

    $ docker network create one two
    "docker network create" requires exactly 1 argument.

    $ docker network connect
    "docker network connect" requires exactly 2 arguments.

    $ docker volume create one two
    "docker volume create" requires at most 1 argument.

Test cases were updated accordingly.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Upstream-commit: b9a7f35e02
Component: cli
2017-08-12 18:25:38 +02:00
bb626a427e Fix make build-integration-cli-on-swarm
Signed-off-by: Akihiro Suda <suda.akihiro@lab.ntt.co.jp>
Upstream-commit: 2fddf9f6efc155c880dfa689bd7df3a5a31ba459
Component: engine
2017-08-12 06:53:25 +00:00
c66aa086ca Make the example match the documentation
the missing `driver` made my bridge not have the correct MTU when i copied from the example and not the doc table.  Brings them into alignment.

Signed-off-by: bryfry <bryon@fryer.io>
Upstream-commit: 6118658f73
Component: cli
2017-08-11 21:47:34 -04:00
417e5624cd Fix requests for docker host ending with slash
Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
Upstream-commit: 823e88d4c4298c38130b9a387a45c47cf957a931
Component: engine
2017-08-11 10:47:02 -07:00
0f9d35cd6f Merge pull request #34000 from dnephin/test-integration-api
Introduce `test-integration` target
Upstream-commit: f34e4d295d5c17a78c33beb14b65e5d001c16968
Component: engine
2017-08-11 10:39:27 -07:00
2e5f24be1e Use container.HostConfig.ShmSize directly
It was noted[1] that container's HostConfig.ShmSize, if not set, should be
initialized to daemon default value during container creation.

In fact, it is already done in daemon.adaptContainerSettings, so we can use
value from container.HostConfig directly.

[1] https://github.com/moby/moby/pull/34087#discussion_r128656429

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
Upstream-commit: 0fb1fb1ce0177cf31dd96e9fdb4a5f55155a5966
Component: engine
2017-08-11 03:29:27 -07:00
5963ab8f5e Merge pull request #34378 from fcrisciani/ln-vendoring
Vendoring libnetwork
Upstream-commit: aaee3ca6c1129f62eaa64a76a3f770ae09d04d09
Component: engine
2017-08-10 17:07:14 -07:00
c020b02684 Merge pull request #34452 from Microsoft/jjh/gowiniov0.4.5
Revendor Microsoft/go-winio @ v0.4.5
Upstream-commit: 45248ae668cd8ab02cf597ab9e9f72564a262f6c
Component: engine
2017-08-10 17:05:36 -07:00
a87bcbcfcf Added docker events example with until option to documentation
Signed-off-by: Luka Hartwig <mail@lukahartwig.de>
Upstream-commit: f959ac7fba
Component: cli
2017-08-11 01:29:48 +02:00
14f2519dda Merge pull request #34470 from thaJeztah/fix-solaris-config
Fix solaris reference to config
Upstream-commit: 2638729c7a57332737e2096d68bed5e1940053d4
Component: engine
2017-08-10 09:41:50 -07:00
848a1fd437 Vendoring libnetwork
Signed-off-by: Flavio Crisciani <flavio.crisciani@docker.com>
Upstream-commit: 709a433ec827b034b798e748d4393f7c9f3b3bc0
Component: engine
2017-08-10 08:51:30 -07:00
c75716b8e7 Merge pull request #33722 from TomSweeneyRedHat/tsweeney/privmessage
Add clarification to --privileged error message
Upstream-commit: 7ccd8bda77fb075b2c5d849f55445d0b4144acc9
Component: engine
2017-08-09 16:08:10 -07:00
479e9126c5 Merge pull request #34430 from AkihiroSuda/promote-overlay2
graphdriver: promote overlay2 over aufs
Upstream-commit: 2e38c07814fbb99364838df2cd1092744f6bd1e1
Component: engine
2017-08-09 21:41:36 +02:00
592e32b2a4 Fix solaris reference to config
Commit db63f9370e26d725357c703cbaf9ab63cc7b6d0a
extracted  daemon configuration to its own
package, but did not update the Solaris stubs.

This updates the Solaris daemon.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Upstream-commit: 335033e25fae0173217e70d4b8dfc5df682ea913
Component: engine
2017-08-09 20:58:31 +02:00
028f9b05af Merge pull request #34445 from pmoust/f-seccomp-quotacl
seccomp: whitelist quotactl with CAP_SYS_ADMIN
Upstream-commit: bbb401de87b21659399909b15707cf2816be0f78
Component: engine
2017-08-09 11:53:13 -07:00
7ab662f5a9 LCOW: Force to be Hyper-V Isolation
Signed-off-by: John Howard <jhoward@microsoft.com>
Upstream-commit: 0ba50819ba83c37c39b5c8ae924a888a7722ac6a
Component: engine
2017-08-09 09:26:51 -07:00
840bc1dc6a seccomp: whitelist quotactl with CAP_SYS_ADMIN
The quotactl syscall is being whitelisted in default seccomp profile,
gated by CAP_SYS_ADMIN.

Signed-off-by: Panagiotis Moustafellos <pmoust@elastic.co>
Upstream-commit: cf6e1c5dfd07f5048606bb7b21464c658e252322
Component: engine
2017-08-09 18:52:15 +03:00
7b76095dc9 Merge pull request #34455 from vieux/hide_swarm_plugins_exp
hide swarm plugins behind experimental flag
Upstream-commit: ab29a85103f2b251094cd0423d84de13cdb930ab
Component: engine
2017-08-09 17:52:14 +02:00
94b4666b88 Revendor Microsoft/go-winio @ v0.4.5
Signed-off-by: John Howard <jhoward@microsoft.com>
Upstream-commit: 779469d9c98b83d54bc45f808de76c2088ffe8c7
Component: engine
2017-08-09 08:31:43 -07:00
48f5d911ea Fix exclude list in make.ps1
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: e593b72cc9d8a2fd9c7cd98b82ed468dfe3577e2
Component: engine
2017-08-09 11:03:20 -04:00
b63db0a43c move api test client setup to a package.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: c66c0447efe9c7e7afdcf75b950897c67894256b
Component: engine
2017-08-09 11:02:57 -04:00
e443662141 Protect images in the integration/ suite
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 5fa134b9061d0b794e9e5b887a8ea4ee15fecb61
Component: engine
2017-08-09 11:02:57 -04:00
b4b904d49b Cleanup test output, and binaries.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 4308e881cc00141a1dd187120d1c4e2106148282
Component: engine
2017-08-09 11:02:57 -04:00
b327efdd99 Add integration suite
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: de46fb736d0e3e41b0f5646b43e0963bcf839baa
Component: engine
2017-08-09 11:02:57 -04:00
9a9d90f97d Remove test-integration-cli and references to it.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: bc82b139955c4a0edb20b070926469cceea0fbbb
Component: engine
2017-08-09 11:02:57 -04:00
43db8c0c15 Introduce test-integration target (and deprecate/freeze test-integration-cli)
This adds a new package `integration` where `engine` integration tests
should live. Those integration tests should not depends on any `cli`
components (except from the `dockerd` daemon for now — to actually
start a daemon).

Signed-off-by: Vincent Demeester <vincent@sbr.pm>
Upstream-commit: 6b025a8b665f7b976bb2560488ba07f55dbf0fb6
Component: engine
2017-08-09 11:02:57 -04:00
148a571829 Add network and target to build in v3.4
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: eef256943b
Component: cli
2017-08-09 10:50:32 -04:00
6079e4e9e5 Merge pull request #34276 from keloyang/testcase-docker-cp-hardlink
Add unit  test  for RebaseArchiveEntries
Upstream-commit: 187cd25517e348230a0b5064392dc9f00efb13ae
Component: engine
2017-08-09 07:29:09 -07:00
5a28415680 Merge pull request #34449 from Microsoft/jjh/hcsshim0.6.3
Revendor Microsoft/hcsshim @V0.6.3
Upstream-commit: 5c49240c94783a3ecb3881890725136d8d743dea
Component: engine
2017-08-09 07:21:49 -07:00
a0733e5702 Merge pull request #34448 from Microsoft/jjh/donotblockexport
LCOW: Don't block export
Upstream-commit: ac87bb3f85d41b21f425c3a4266ab3b567dc9718
Component: engine
2017-08-09 14:17:25 +01:00
58438575bb Merge pull request #34450 from Microsoft/jjh/opengcsclient
Vendor change jhowardmsft/opengcs to Microsoft/opengcs
Upstream-commit: 31582d00ab7adc3532df92f34a84ad28aa278b0f
Component: engine
2017-08-09 14:16:31 +01:00
a58a34bfed Add test coverage to signal/trap.go
Signed-off-by: Naveed Jamil <naveed.jamil@tenpearls.com>
Upstream-commit: bc756061a3be0faf443c4cf82eacdbc1cfffb2f9
Component: engine
2017-08-09 15:13:38 +05:00
9fb953b99c use testify to check error for test unit test of archive package
Signed-off-by: yangshukui <yangshukui@huawei.com>
Upstream-commit: 1f1e8e9c0e1fa4c3d9b016e6746f7ba2755e888f
Component: engine
2017-08-09 10:27:01 +08:00
de9b157e25 hide swarm plugins behind experimental flag
Signed-off-by: Victor Vieux <victorvieux@gmail.com>
Upstream-commit: 493002021094d72d405e1cd5bfa10b8080f67920
Component: engine
2017-08-08 18:33:25 -07:00
7de15bd230 Merge pull request #34441 from vdemeester/move-pkg-templates-away
Move pkg/templates away
Upstream-commit: c7911389e646104180063f069280a8b6cbc47211
Component: engine
2017-08-08 17:54:17 -07:00
df85fb5a80 Vendor Microsoft/opengcs @ v0.3.2
Signed-off-by: John Howard <jhoward@microsoft.com>
Upstream-commit: 5463c582172e04132ecf48fad00cc90c8e233386
Component: engine
2017-08-08 15:43:43 -07:00
b9168879f3 jhoward/opengcs --> Microsoft/opengcs
Signed-off-by: John Howard <jhoward@microsoft.com>
Upstream-commit: ee0587a45d94443271c695a0d407514fd36f7fa4
Component: engine
2017-08-08 14:43:43 -07:00
06000850f0 LCOW: Additional flags for VHD boot
Signed-off-by: John Howard <jhoward@microsoft.com>
Upstream-commit: 71328a7af580050448ba269663e04ff3f67aea72
Component: engine
2017-08-08 14:40:33 -07:00
d433044d76 Revendor Microsoft/hcsshim @V0.6.3
Signed-off-by: John Howard <jhoward@microsoft.com>
Upstream-commit: 3e71acf0fc485cccc9feda57ea53a69377179321
Component: engine
2017-08-08 14:08:03 -07:00
0c001aeeff LCOW: Don't block export
Signed-off-by: John Howard <jhoward@microsoft.com>
Upstream-commit: 5459ef0ecf429ed0293e975abee11bdbbc2a2f14
Component: engine
2017-08-08 12:54:06 -07:00
7d3a435b2f Merge pull request #34442 from vdemeester/move-pkg-listeners-away
Move pkg/listeners away
Upstream-commit: cbbc28341ccc3a4597f1d1ce1259d3fbe1b29a6d
Component: engine
2017-08-08 12:04:18 -07:00
b8d6be0b5a Merge pull request #428 from albers/completion-stack-deploy
Improve bash completion for `stack deploy`
Upstream-commit: 4b61f560b5
Component: cli
2017-08-08 18:19:06 +02:00
6ed8995fb3 Move pkg/templates away
- Remove unused function and variables from the package
- Remove usage of it from `profiles/apparmor` where it wasn't required
- Move the package to `daemon/logger/templates` where it's only used

Signed-off-by: Vincent Demeester <vincent@sbr.pm>
Upstream-commit: 9ef3b535974612b137abae062b7a8a0f7e969871
Component: engine
2017-08-08 18:16:41 +02:00
1b1bfe0449 Move pkg/listeners away
It is only used in `daemon` and should really live there.

Signed-off-by: Vincent Demeester <vincent@sbr.pm>
Upstream-commit: c204fce2ee926417d1dc7d10c043a81b93d2a72b
Component: engine
2017-08-08 18:14:04 +02:00
8ce8f74288 Improve bash completion for stack deploy
This adds completion of stack names, which is very useful when updating
existing stacks.

Signed-off-by: Harald Albers <github@albersweb.de>
Upstream-commit: d2d4dbf5af
Component: cli
2017-08-08 17:56:14 +02:00
763e45c80b Merge pull request #427 from vdemeester/import-templates-from-docker-pkg
Import templates from docker pkg
Upstream-commit: f3c325f390
Component: cli
2017-08-08 11:55:58 -04:00
e6ade3ec40 Re-run vndr on docker/docker to remove pkg/templates
Signed-off-by: Vincent Demeester <vincent@sbr.pm>
Upstream-commit: 680c827075
Component: cli
2017-08-08 17:26:30 +02:00
d19b8b0269 Import docker/docker/pkg/templates to cli
This package will be deprecated/removed from `docker/docker/pkg` and
is mainly used for the cli format options. Let's import it and
maintain here.

Signed-off-by: Vincent Demeester <vincent@sbr.pm>
Upstream-commit: a6800f95fa
Component: cli
2017-08-08 17:26:24 +02:00
67eefe8cfd Merge pull request #34408 from rcjsuen/ignore-case
Update tmLanguage file to not be case sensitive
Upstream-commit: 526fc401458bc516d803201802fe336f368f4b86
Component: engine
2017-08-08 16:13:50 +02:00
308b435aad graphdriver: promote overlay2 over aufs
Signed-off-by: Akihiro Suda <suda.akihiro@lab.ntt.co.jp>
Upstream-commit: fd6ffc2337aedf1019582851fe0cf4f6f33f113a
Component: engine
2017-08-08 10:17:37 +00:00
8dfd81edb2 Merge pull request #33852 from jstarks/win_named_pipes
Windows: named pipe mounts
Upstream-commit: 202cf001dd7e6ca6c171aa52f454cc7b10f865bf
Component: engine
2017-08-07 16:54:05 -07:00
bee0cb9a32 Merge pull request #413 from albers/completion-build--target
Add bash completion for `docker build --target`
Upstream-commit: 227e042ff0
Component: cli
2017-08-07 12:41:03 -07:00
fae0c281b6 Windows: Add named pipe mount support
Current insider builds of Windows have support for mounting individual
named pipe servers from the host to the guest. This allows, for example,
exposing the docker engine's named pipe to a container.

This change allows the user to request such a mount via the normal bind
mount syntax in the CLI:

  docker run -v \\.\pipe\docker_engine:\\.\pipe\docker_engine <args>

Signed-off-by: John Starks <jostarks@microsoft.com>
Upstream-commit: 54354db850664783918a1fc9d208bcfcf47c28e2
Component: engine
2017-08-07 11:34:36 -07:00
38b8a5078a Merge pull request #34386 from tklauser/pkg-term-makeraw-fix
pkg/term: set termios VMIN and VTIME in MakeRaw on Linux
Upstream-commit: 6f1907898f59300921b358b21da1e49a5184d088
Component: engine
2017-08-07 16:34:40 +02:00
f593e24117 Merge pull request #34398 from Microsoft/jjh/libcontainerd
LCOW: Remove hard-coding
Upstream-commit: 537f8c1e8df8e4f4f7754e92866ba308e232f918
Component: engine
2017-08-07 16:31:44 +02:00
fd8ca099c7 Merge pull request #419 from thaJeztah/easier-testing-in-container
Add "build" dir to PATH in dev-container
Upstream-commit: e0f1e4d5d7
Component: cli
2017-08-07 16:25:19 +02:00
d65ac7e37d Merge pull request #378 from riyazdf/contributing-doc
Add Contribution guidelines doc
Upstream-commit: 056739abfe
Component: cli
2017-08-07 13:27:31 +02:00
aac72d07e3 Merge pull request #423 from albers/docs-fix-invalid-plugins
Fix invalid plugin references in docs
Upstream-commit: eb4672c149
Component: cli
2017-08-07 12:53:44 +02:00
a485f769f0 chmod config.v2.json to 0600
Signed-off-by: yangshukui <yangshukui@huawei.com>
Upstream-commit: ae52cea3ab46e1e728606349fb6baa9a8203f3ed
Component: engine
2017-08-07 18:10:08 +08:00
48c6aae018 Fix invalid plugin references in docs
The plugins `tiborvass/sample-volume-plugins` and `tiborvass/no-remove`
do not exist.

Signed-off-by: Harald Albers <github@albersweb.de>
Upstream-commit: 2dca576a4c
Component: cli
2017-08-07 11:15:39 +02:00
f2e64d9bb8 Add unit test for RebaseArchiveEntries
Signed-off-by: yangshukui <yangshukui@huawei.com>
Upstream-commit: 82eb9002e928f06ff694c618887bbc7d61f4b8e0
Component: engine
2017-08-07 16:40:54 +08:00
2d71d40a39 Introduce/document new IPC modes
This builds (and depends) on https://github.com/moby/moby/pull/34087

Version 2:
 - remove --ipc argument validation (it is now done by daemon)
 - add/document 'none' value
 - docs/reference/run.md: add a table with better modes description
 - dockerd(8) typesetting fixes

Version 3:
 - remove ipc mode tests from cli/command/container/opts_test.go

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
Upstream-commit: 9285db6752
Component: cli
2017-08-05 17:49:53 -07:00
9c9a27667d Update tmLanguage file to not be case sensitive
While convention states that Dockerfile instructions should be
written in uppercase, the engine allows them to be mixed case or in
lowercase. The tmLanguage file should tolerate this and provide
highlighting support even if instructions are not written in
uppercase.

Signed-off-by: Remy Suen <remy.suen@gmail.com>
Upstream-commit: abd39744c6f3ed854500e423f5fabf952165161f
Component: engine
2017-08-05 19:45:54 +09:00
18cbafdfc4 Merge pull request #34396 from Microsoft/jjh/movescratch
LCOW: Move toolsScratchPath to /tmp
Upstream-commit: d4f6db83c21cfc6af54fffb1f13e8acb7199f96a
Component: engine
2017-08-05 11:37:15 +01:00
eb3232efc3 Merge pull request #34399 from Microsoft/jjh/hcsshim0.6.2
Revendor Microsoft/hcsshim @ v0.6.2
Upstream-commit: 80f2c054ca192ed47d9d6e8573e5fff2d75df330
Component: engine
2017-08-05 11:35:11 +01:00
9282435e75 Log payload only [logentries]
If you want to use the advanced query in logentries
logging in json is very useful. If you do not need
the advanced information with
--log-opt line-only=true just logs the payload

Signed-off-by: Sascha Andres <sascha.andres@outlook.com>
Upstream-commit: 6362843e67f21274c3ee5a719d3a6393c5612699
Component: engine
2017-08-05 09:54:21 +02:00
0d587285b1 Add "build" dir to PATH in dev-container
This makes running the client easier inside
the container; allowing to use just `docker`
instead of `build/docker`.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Upstream-commit: 7a0b49df23
Component: cli
2017-08-05 03:24:21 +02:00
0e92654148 Add testing.md
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 4db2ea02cf451d2343cf15daad5ad06a74865ef0
Component: engine
2017-08-04 17:36:18 -04:00
65cd1af516 Merge pull request #34371 from Microsoft/jjh/logrustimestamp
logrus use full timestamp
Upstream-commit: cb9128677f29a1e4d7ff2a74efc9cc7bcdf0169b
Component: engine
2017-08-04 07:25:59 -07:00
0858223c3e Merge pull request #34395 from aboch/npe
Fix api server null pointer def on inspect/ls null ipam-driver networks
Upstream-commit: 7e59fbe50eaa5fd952f7a05aa827e2dc738c3794
Component: engine
2017-08-04 02:07:46 +02:00
265dd86bef Merge pull request #34383 from wrfly/patch-1
fix client.Transport verify
Upstream-commit: 7843e40ad5df83671615a61c904930a701896f52
Component: engine
2017-08-03 16:47:41 -07:00
c9e85143b7 Revendor Microsoft/hcsshim @ v0.6.2
Signed-off-by: John Howard <jhoward@microsoft.com>
Upstream-commit: 809fed5fa6c54befe45b90b25c961e2f84674419
Component: engine
2017-08-03 16:29:25 -07:00
cb0fd7f7e8 LCOW: Remove hard-coding
Signed-off-by: John Howard <jhoward@microsoft.com>
Upstream-commit: ffdef6255e9c81d5778864cac4726794d7c1be0d
Component: engine
2017-08-03 16:10:25 -07:00
6183428a5c Merge pull request #34170 from Microsoft/jjh/sandbox
LCOW: Dynamic sandbox management
Upstream-commit: a3ffc42b13063e59dbf7d52a56f8806ac71160eb
Component: engine
2017-08-03 16:07:40 -07:00
3b5cce5785 LCOW: Move toolsScratchPath to /tmp
Signed-off-by: John Howard <jhoward@microsoft.com>
Upstream-commit: 993f4072874ee5cdce93ec9b6525e1fa3ebda4c8
Component: engine
2017-08-03 15:48:53 -07:00
39189fe164 Fix api server null pointer def on inspect/ls null ipam-driver networks
- When a network is created with the null ipam driver, docker api server
  thread will deference a nil pointer on `docker network ls` and on
  `docker network inspect <nw>`. This because buildIpamResource()
  assumes a gateway address is always present, which is not correct.

Signed-off-by: Alessandro Boch <aboch@tetrationanalytics.com>
Upstream-commit: beebfc0cf6240c8af511eb4d7e29314c8de6ddf2
Component: engine
2017-08-03 13:35:58 -07:00
6611cd0751 Merge pull request #415 from jlhawn/client_dial_enable_tcp_keepalive
Enable TCP Keep-Alive in Docker client
Upstream-commit: f7b78dc137
Component: cli
2017-08-03 19:42:57 +02:00
814542744c Preserve resolved image-digest if QueryRegistry == false
When re-deploying a stack without re-resolving the image digest,
the service's ContainerSpec was updated with the image-reference
as specified in the stack/compose file.

As a result, the image-digest that was resolved in a previous
deploy was overwritten, causing the service to be re-deployed.

This patch preserves the previously resolve image-digest
by copying it from the current service spec.

A unit test is also added to verify that the image information
in the service spec is not updated if QueryRegistry is disabled.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Upstream-commit: d0bea64185
Component: cli
2017-08-03 18:49:07 +02:00
1b5797d860 LCOW: Graphdriver dynamic sandbox management
Signed-off-by: John Howard <jhoward@microsoft.com>

This changes the graphdriver to perform dynamic sandbox management.
Previously, as a temporary 'hack', the service VM had a prebuilt
sandbox in it. With this change, management is under the control
of the client (docker) and executes a mkfs.ext4 on it. This enables
sandboxes of non-default sizes too (a TODO previously in the code).

It also addresses https://github.com/moby/moby/pull/33969#discussion_r127287887

Requires:
- go-winio: v0.4.3
- opengcs:  v0.0.12
- hcsshim:  v0.6.x
Upstream-commit: 8c279ef3ad8cd1f019789b8378d0394c80a1807f
Component: engine
2017-08-03 09:06:45 -07:00
42c8c64090 Revendor jhowardmsft/opengcs @ v0.0.12
Signed-off-by: John Howard <jhoward@microsoft.com>
Upstream-commit: 0bd1cf25175c19e7fffc70b31cd7565bc432df19
Component: engine
2017-08-03 09:06:45 -07:00
296e1bef94 Revendor microsoft/go-winio @ v0.4.4
Signed-off-by: John Howard <jhoward@microsoft.com>
Upstream-commit: 45e2dd123bd9ace93d3fa85b12fcea3a8ac642ce
Component: engine
2017-08-03 09:06:26 -07:00
bf8164c7d6 Add test for github.com special handling
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Upstream-commit: f007d623a8
Component: cli
2017-08-03 17:53:42 +02:00
9d3d3a9756 Merge pull request #411 from mstanleyjones/add-infinit
Add Infinit plugin
Upstream-commit: 7e2b0708a4
Component: cli
2017-08-03 17:34:07 +02:00
fd944ce735 pkg/term: set termios VMIN and VTIME in MakeRaw on Linux
The BSD and Solaris versions of term.MakeRaw already set VMIN and VTIME
explicitly such that a read returns when one character is available.
cfmakeraw (which was previously used) in glibc also sets these values
explicitly, so it should be done in the Linux version of MakeRaw as well
to be consistent.

Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
Upstream-commit: 8a3730d251f844a55244d42c2dae0af8904e07c1
Component: engine
2017-08-03 13:21:42 +02:00
a66a5d1d6a fix client.Transport
`client.Transport` is `http.Client.Transport` just has `RoundTripper()`. Not `http.Transport`. So we cannot convert it here.

For a mock test, I can play with this https://play.golang.org/p/gs7_QrL9-Y

Signed-off-by: wrfly <mr.wrfly@gmail.com>
Upstream-commit: e345cd12f96b3985257652b606c8463a5772944b
Component: engine
2017-08-03 17:14:26 +08:00
69cc3cbb90 Merge pull request #34346 from yuexiao-wang/remove-logrus
Remove the logrus from pkg/signal
Upstream-commit: 316b4ba9c2891b9ab4437f1c6a52df2d3d0ca47b
Component: engine
2017-08-03 13:14:05 +09:00
95188b7b7d Merge pull request #34374 from cpuguy83/make_plugindir_private
Make plugins dir private.
Upstream-commit: ee9d6006e4da84723b352d55e2b3ce268c7c75c7
Component: engine
2017-08-02 17:53:17 -07:00
37d6377fa6 Enable TCP Keep-Alive in Docker client
Some network environments may have NATs, proxies, or gateways which
kill idle connections. There are many Docker API operations which may
be idle for long periods of time (such as ContainerWait and ContainerAttach)
and may result in unexpected connection closures or hangs if TCP keepalives
are not used.

This patch updates the default HTTP transport used by the Docker client
package to enable TCP Keep-Alive with a keep-alive interval of 30 seconds.
It also sets a connect timeout of 30 seconds.

Docker-DCO-1.1-Signed-off-by: Josh Hawn <josh.hawn@docker.com> (github: jlhawn)
Upstream-commit: 2831a04cba
Component: cli
2017-08-02 14:35:03 -07:00
60257585de Make plugins dir private.
This prevents mounts in the plugins dir from leaking into other
namespaces which can prevent removal (`device or resource busy`),
particularly on older kernels.

Signed-off-by: Brian Goff <cpuguy83@gmail.com>
Upstream-commit: 0c2821d6f2de692d105e50a399daa65169697cca
Component: engine
2017-08-02 16:58:07 -04:00
8f436ab301 logrus use full timestamp
Signed-off-by: John Howard <jhoward@microsoft.com>
Upstream-commit: af64e396cadb90e5177d0601b4869ba98e17c0d7
Component: engine
2017-08-02 10:30:30 -07:00
13565d88c2 Merge pull request #334 from albers/completion--storage-opt-dm.libdm_log_level
Add bash completion for `--storage-opt dm.libdm_log_level`
Upstream-commit: 68c27d7347
Component: cli
2017-08-02 18:18:02 +02:00
9f8f247e20 Merge pull request #395 from albers/completion-service-ps-multiple
bash completion for `service ps` supports multiple services
Upstream-commit: c4d705fa7f
Component: cli
2017-08-02 18:16:02 +02:00
fe03ca4a16 Merge pull request #384 from albers/completion-redirections
Add support for redirections in bash completion for `docker save|load`
Upstream-commit: 41a9507250
Component: cli
2017-08-02 18:15:24 +02:00
89bd931ee6 Merge pull request #34360 from FengtuWang/arm64_testcase
fix TestLogsFollowGoroutinesWithStdout in arm64
Upstream-commit: f577caff19d486d8d01443507d891cb1b0891cdc
Component: engine
2017-08-02 16:56:20 +02:00
93670daa92 Add bash completion for docker build --target
`--file` and `PATH` are honored if the are specified before `--target`.
Note that according to the command's syntax, PATH should be specified
after the options.

Signed-off-by: Harald Albers <github@albersweb.de>
Upstream-commit: 647166b3bf
Component: cli
2017-08-02 16:49:01 +02:00
688ebf06fb Remove the logrus from pkg/signal
Signed-off-by: yuexiao-wang <wang.yuexiao@zte.com.cn>
Upstream-commit: cc4da8112814cdbb00dbf23370f9ed764383de1f
Component: engine
2017-08-02 18:15:25 +08:00
a8778a8f6e Merge pull request #405 from beenanner/patch-1
Fix missing missing backtick in documentation for node ls
Upstream-commit: b0cc841631
Component: cli
2017-08-02 08:58:53 +02:00
3366bf6a8a Dockerfile*: bump devmapper library version
Let's use latest lvm2 sources to compile the libdevmapper library.

Initial reason for compiling devmapper lib from sources was a need to
have the static version of the library at hand, in order to build
the static dockerd, but note that the same headers/solib are used
for dynamic build (dynbinary) as well.

The reason for this patch is to enable the deferral removal feature.
The supplied devmapper library (and headers) are too old, lacking the
needed functions, so the daemon is built with 'libdm_no_deferred_remove'
build tag (see the check in hack/make.sh). Because of this, even if the
kernel dm driver is perfectly able to support the feature, it can not
be used. For more details and background story, see [1].

Surely, one can't just change the version number. While at it:
 - improve the comments;
 - remove obsoleted URLs;
 - remove s390 and ppc configure updates that are no longer needed;
 - use pkg-config instead of hardcoding the flags (newer lib added
   some more dependencies);

 [1] https://github.com/moby/moby/issues/34298

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
Upstream-commit: c4fde49a5c0198890078e4c5f7566b387884fe0f
Component: engine
2017-08-01 22:08:24 -07:00
37dd8712ef fix TestLogsFollowGoroutinesWithStdout in arm64
Test case TestLogsFollowGoroutinesWithStdout failed in
arm64 because gopkg.in/fsnotify.v1 does not support
arm64 until version v1.3.0. Update fsnotify to latest
version v1.4.2 to support arm64.

see issue https://github.com/fsnotify/fsnotify/issues/112

Signed-off-by: Fengtu Wang <wangfengtu@huawei.com>
Upstream-commit: 6e590d3b99f9f225feecaabbd035089de67ecd2a
Component: engine
2017-08-02 10:08:00 +08:00
9762198ec1 Merge pull request #34272 from dmcgowan/update-logrus
Update logrus to v1.0.1 (Sirupsen -> sirupsen)
Upstream-commit: 8af4db6f002ac907b6ef8610b237879dfcaa5b7a
Component: engine
2017-08-01 18:53:33 -07:00
2a797862f7 Fix missing missing backtick
Signed-off-by: Jonathan Lee <jonjohn1232009@gmail.com>
Upstream-commit: 9e4ad4889e
Component: cli
2017-08-01 20:45:43 -04:00
593d56a228 Add Infinit plugin
Signed-off-by: Misty Stanley-Jones <misty@docker.com>
Upstream-commit: 83e8551876
Component: cli
2017-08-01 15:50:42 -07:00
7c57a40cf0 Merge pull request #382 from albers/completion-service-scale--detach
Add bash completion for `service scale --detach`
Upstream-commit: a74e2135e4
Component: cli
2017-08-02 00:49:18 +02:00
d7c8e49652 Merge pull request #389 from jphuynh/zsh-scale-detach
Add zsh completion for `docker service scale --detach=false`
Upstream-commit: dabfec6dde
Component: cli
2017-08-02 00:48:37 +02:00
197321de78 Merge pull request #383 from albers/improve-completion-secret-create
Add file completion to bash completion for `secret create`
Upstream-commit: 2ae9276995
Component: cli
2017-08-02 00:45:24 +02:00
ef1dcf60fa Merge pull request #360 from akalipetis/compose-update-order
Add support for update order in compose deployments
Upstream-commit: 1cd402b192
Component: cli
2017-08-01 22:24:48 +02:00
1ee9153d20 Merge pull request #404 from thaJeztah/fix-port-presentation
Fix presentation of published "random" host ports
Upstream-commit: 772956b263
Component: cli
2017-08-01 21:31:46 +02:00
8bb0430472 Merge pull request #381 from albers/completion-login-fix-sort-order
Fix sort order of options in bash completion
Upstream-commit: fd6523e21f
Component: cli
2017-08-01 21:26:46 +02:00
070da803ab Fix presentation of published "random" host ports
Ports that were picked from the ephemeral port range
were presented as `*:0->80/tcp`.

This patch changes the presentation to use the
actually assigned port, instead of the port specified
in `Endpoint.Spec` (which is always empty/zero (`0`))

Before this change;

    ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
    5d44i665qj66        with-random-port    replicated          1/1                 nginx:alpine        *:0->80/tcp

After this change;

    ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
    5d44i665qj66        with-random-port    replicated          1/1                 nginx:alpine        *:30000->80/tcp

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Upstream-commit: ceb18a841a
Component: cli
2017-08-01 19:21:17 +02:00
f8eacc69ac Merge pull request #33704 from ecnerwala/33701-shallow-clone
Fix shallow git clone in docker-build
Upstream-commit: f7d09a0a9bd626782e63e7295ca87690f26a1fb4
Component: engine
2017-08-01 10:17:08 -07:00
34b5250ea2 Merge pull request #34345 from kolyshkin/dm-nitpicks
graphdriver/devmapper nitpicks
Upstream-commit: a9aa95ce133fe270db93cee4e59a23ca5a4d3558
Component: engine
2017-08-01 08:13:23 -07:00
4310c5e46a Merge pull request #403 from Zebrilee/fix-issue-159
update service create and update options in commandline documentation
Upstream-commit: c6e497d15c
Component: cli
2017-08-01 14:08:29 +02:00
76e753b00b Merge pull request #34287 from thaJeztah/bump-api-version
Bump API version to 1.32
Upstream-commit: 1a0fbc4a6facd35ca93e4eded902e73d0d4b8378
Component: engine
2017-08-01 12:18:26 +02:00
0ad54be8c9 Merge pull request #34340 from Microsoft/jjh/enableapiimagessaveandload
Windows: Enable TestAPIImagesSaveAndLoad
Upstream-commit: 17859c5e9884c349ad62de0177490d3a4305fd5e
Component: engine
2017-08-01 12:00:49 +02:00
1183f66b5b Merge pull request #34202 from thaJeztah/swagger-external-secrets-store
Add API documentation for plugable secret backends
Upstream-commit: 0fd90c4d5d8ab739d6f999a36d9c4096e89c8059
Component: engine
2017-08-01 10:59:08 +02:00
b6625098a8 Merge pull request #388 from christopherobin/feature/stopsignal
Add support for stop-signal in stack command
Upstream-commit: f386d476ba
Component: cli
2017-08-01 09:53:13 +02:00
13250b8fde pkg/devicemapper: comment nitpicks
1. devmapper_wrapper_{,no_}deferred_remove.go:
Comments about LibraryDeferredRemovalSupport were very totally
misleading to me. This thing has nothing to do with either static
or dynamic linking (but with build tags). Fix the comment accordingly.

2. devmapper.go:
Reveal the source of those magic device* constants.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
Upstream-commit: adce3ca48e306a6117ce5677b8d9437551e98a26
Component: engine
2017-07-31 20:05:26 -07:00
970fea45e3 graphdriver/devmapper: clarify a message
Make sure user understands this is about the in-kernel driver
(not the dockerd driver or smth).

While at it, amend the comment as well.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
Upstream-commit: aab2450e25b397d38cdcb5e173ef1121283196c2
Component: engine
2017-07-31 20:01:02 -07:00
da919a5e5c Windows: Enable TestAPIImagesSaveAndLoad
Signed-off-by: John Howard <jhoward@microsoft.com>
Upstream-commit: 4dd9c9448c436f13b4c77453c50133014e4433b2
Component: engine
2017-07-31 18:18:49 -07:00
a179e7a813 Merge pull request #34302 from abhinandanpb/predefinednet
Changing the get network request to return swarm scope predefined net…
Upstream-commit: 3364e7da3fd9e2bc3e5d983e98413ddd7c48a89e
Component: engine
2017-07-31 17:08:04 -07:00
97a283fbdb update service create and update options in commandline documentation
Signed-off-by: zebrilee <zebrilee@gmail.com>
Upstream-commit: 5fe09164f5
Component: cli
2017-07-31 23:26:02 +02:00
ed4f0879cf Update imports for logrus version
Add forks for changes which only make logrus change without functional
change.

Signed-off-by: Derek McGowan <derek@mcgstyle.net>
Upstream-commit: 4f3616fb1c112e206b88cb7a9922bf49067a7756
Component: engine
2017-07-31 13:19:38 -07:00
d659edcaf5 Update logrus to v1.0.1
Fixes case sensitivity issue

Signed-off-by: Derek McGowan <derek@mcgstyle.net>
Upstream-commit: 1009e6a40b295187e038b67e184e9c0384d95538
Component: engine
2017-07-31 13:16:46 -07:00
27851173aa Changing the get network request to return swarm scope predefined networks
Starting 17.06 swarm service create supports service creates with predefined
networks like host and bridge. Due to the nature of the feature, swarm manager
has a swarm scope predefined networks in addition to local scoped
predefined networks on all nodes. However network inspects for swarm scoped
predefined networks was not possible. The fix adds support for network inspect
for swarm scoped predefined networks.

Signed-off-by: Abhinandan Prativadi <abhi@docker.com>
Upstream-commit: 5bfefb2d3662fa066ddf0d0e10cac93ee70f7ae8
Component: engine
2017-07-31 13:05:30 -07:00
d027c213aa Merge pull request #34304 from tiborvass/use-buildkit-session
Use buildkit session package
Upstream-commit: 1375d893e9fb2213df8dbb4d375a220e9b009025
Component: engine
2017-07-31 11:16:27 -07:00
db556c6449 Merge pull request #399 from Zebrilee/fix-issue-253
modify foo by container in order to clarify the documentation
Upstream-commit: f47d9803fd
Component: cli
2017-07-31 10:40:08 -07:00
e5e20b8245 Merge pull request #34296 from mixja/34292-awslogs-driver-repeating-last-event
Fix awslogs driver repeating last event - #34292
Upstream-commit: 63e4aa3f1b7e13a8b9f0e4922f32411ea102c348
Component: engine
2017-07-31 08:54:52 -07:00
0cd419f615 Merge pull request #34173 from tonistiigi/builder-report-2017-07-17
Add builder dev report for 2017-07-17
Upstream-commit: 337b40c155fdb17f675175c26c6c5b4304f14b56
Component: engine
2017-07-31 15:51:59 +02:00
1d81f6e49d Merge pull request #34250 from thaJeztah/update-plugin-api-docs
Update API plugin response examples
Upstream-commit: 6a7489476abc3913ebe33043e9056798a4c1fcd8
Component: engine
2017-07-31 10:51:18 +01:00
540600c393 Merge pull request #393 from thaJeztah/add-missing-is-task-filter
Docs: update filter options for docker container ps
Upstream-commit: 7ac1db2f8f
Component: cli
2017-07-31 09:51:13 +01:00
6a5e550002 Merge pull request #34308 from dlsniper/remove-unused-import
Remove unused import
Upstream-commit: 1df67a5c360c667f5987a1cbf6246657312b6422
Component: engine
2017-07-31 17:28:03 +09:00
101d1a1f66 Remove unused import
This commit removes an unused import.

Signed-off-by: Florin Patan <florinpatan@gmail.com>
Upstream-commit: 52d471684350c31578f67c6b120106aefd619381
Component: engine
2017-07-29 22:21:53 +01:00
05235298ea modify foo by container in order to clarify the documentation
Signed-off-by: zebrilee <zebrilee@gmail.com>
Upstream-commit: 2d5f9d83e7
Component: cli
2017-07-29 20:44:50 +02:00
9b125d1f9f Merge pull request #34103 from fcrisciani/control-plane-mtu
Control plane mtu
Upstream-commit: 115f5781c6aceb4e0ed1c6cbf05301c1aee0ee4a
Component: engine
2017-07-28 16:42:18 -07:00
e49d00a362 vendor github.com/moby/buildkit/session
Signed-off-by: Tibor Vass <tibor@docker.com>
Upstream-commit: 5898a364639eab476441dfd2b135beb1e5e331cd
Component: engine
2017-07-28 16:34:24 -07:00
7deeee36b6 Remove client/session package, depend on buildkit's session package
gofmt -w -r '"github.com/docker/docker/client/session" -> "github.com/moby/buildkit/session"'
gofmt -w -r '"github.com/docker/docker/client/session/filesync" -> "github.com/moby/buildkit/session/filesync"'

Signed-off-by: Tibor Vass <tibor@docker.com>
Upstream-commit: 41445a4745451b99d1c361c6c87447da790cb01b
Component: engine
2017-07-28 16:34:23 -07:00
899426a762 Merge pull request #138 from vieux/update_version1
update version
2017-07-28 14:30:22 -07:00
e492adb145 Merge pull request #34294 from AkihiroSuda/improve-it-on-swarm
integration-cli-on-swarm: print detailed error
Upstream-commit: b6d164e6c46d8115b146e4c3ac93784e9ef8b49e
Component: engine
2017-07-28 16:52:40 -04:00
c202b3f97f Allow to set the control plane MTU
Add daemon config to allow the user to specify the MTU of the control plane network.
The first user of this new parameter is actually libnetwork that can seed the
gossip with the proper MTU value allowing to pack multiple messages per UDP packet sent.
If the value is not specified or is lower than 1500 the logic will set it to the default.

Signed-off-by: Flavio Crisciani <flavio.crisciani@docker.com>
Upstream-commit: f9f25ca5e44c89d7c1ebdfa9865076eb2cde9bb2
Component: engine
2017-07-28 13:52:03 -07:00
2dcbbd9e01 Libnetwork vendoring
Signed-off-by: Flavio Crisciani <flavio.crisciani@docker.com>
Upstream-commit: 68d8198ed07acde9146a3e8e2021bd9d57250d81
Component: engine
2017-07-28 13:51:54 -07:00
7fbda78591 Support the "order" key in "update_config" for compose
Signed-off-by: Antonis Kalipetis <akalipetis@gmail.com>
Upstream-commit: 2950667f07
Component: cli
2017-07-28 22:50:55 +03:00
74a1718a1b Merge pull request #396 from kolyshkin/fix-repo-ref
Fix repo references in docs
Upstream-commit: 286216dbc3
Component: cli
2017-07-28 19:37:10 +01:00
3a677ada11 Add Contribution guidelines
Signed-off-by: Riyaz Faizullabhoy <riyaz.faizullabhoy@docker.com>
Upstream-commit: fedbc5861b
Component: cli
2017-07-28 11:33:19 -07:00
c16c5f3db8 Fix repo references in docs
Since CLI was moved to a separate repo, these references are incorrect.
Fixed with the help of sed script, verified manually.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
Upstream-commit: 6d85a4f5f8
Component: cli
2017-07-28 10:32:42 -07:00
236f3097a5 Merge pull request #387 from darrenstahlmsft/saveFastFail
Fast fail when save directory does not exist
Upstream-commit: eed14e840c
Component: cli
2017-07-28 17:46:13 +01:00
3b429c8524 Merge pull request #34176 from bmwiedemann/date
Allow to override build date
Upstream-commit: 7e4f4d15fdb004f9bc6f311704e481f43245bed3
Component: engine
2017-07-28 17:32:29 +01:00
2a26081729 bash completion for service ps supports multiple services
Signed-off-by: Harald Albers <github@albersweb.de>
Upstream-commit: 548758fe31
Component: cli
2017-07-28 15:43:34 +02:00
cf98674bff Fix awslogs driver repeating last event - #34292
Signed-off-by: Justin Menga <justin.menga@gmail.com>
Upstream-commit: 0fd5a0bab79f20f910cb7551ec34158a32e05f5a
Component: engine
2017-07-28 20:33:14 +12:00
93dcd2db6d integration-cli-on-swarm: print detailed error
Signed-off-by: Akihiro Suda <suda.akihiro@lab.ntt.co.jp>
Upstream-commit: 3fd386fed1f2678c413a07d5023146dfe1fd17ab
Component: engine
2017-07-28 05:43:52 +00:00
b022420c94 Merge pull request #34192 from swernli/fixBuilderCopy
Fixing releaseableLayer handling of layer streams and mounts.
Upstream-commit: e9cd2fef805c8182b719d489967fb4d1aa34eecd
Component: engine
2017-07-27 16:15:11 -07:00
06bc641d46 Merge pull request #306 from lipingxue/new_compose_fix.liping
Make compose file allow to specify names for non-external volume
Upstream-commit: 75249123b1
Component: cli
2017-07-28 00:35:44 +02:00
337a036e64 Change to enable volume name can be customized.
Signed-off-by: Liping Xue <lipingxue@gmail.com>
Change to enable volume name can be customized.
Signed-off-by: Liping Xue <lipingxue@gmail.com>

Change to enable volume name can be customized.

Remove unused debug info.

Address comments from Daniel and solve the lint error.
Signed-off-by: Liping Xue <lipingxue@gmail.com>

Address Daniel's comments to print warning message when name of external volume is set in loader code.
Signed-off-by: Liping Xue <lipingxue@gmail.com>

Address Daniel's comments to return error when external volume is set in loader code.
Signed-off-by: Liping Xue <lipingxue@gmail.com>

Address Daniel's comments to return error when external volume is set in loader code.
Signed-off-by: Liping Xue <lipingxue@gmail.com>

Remove the case that specifying external volume name in full-example.yml.

More fix.

Add unit test.
Signed-off-by: Liping Xue <lipingxue@gmail.com>

Address comments from Daniel, move the schema change to v3.4.
Signed-off-by: Liping Xue <lipingxue@gmail.com>

Address comments from Sebastiaan. Signed-off-by: Liping Xue <lipingxue@gmail.com>

Address comments from Misty.
Signed-off-by: Liping Xue <lipingxue@gmail.com>
Upstream-commit: 27a3080825
Component: cli
2017-07-27 15:09:05 -07:00
4bac077379 Add API documentation for plugable secret backends
Documents the API changes introduced in

0304c98d85404fe75a1b4a35d3c111931e062f41 and
08f7cf05268782a0dd8e4c41a4cc65fdf78d09f2

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Upstream-commit: c8dad44c326d9d2131f94babbc535e7f442db290
Component: engine
2017-07-28 00:00:53 +02:00
3c0b1df0ba Fast fail when save directory does not exist
Signed-off-by: Darren Stahl <darst@microsoft.com>
Upstream-commit: 18c877d35c
Component: cli
2017-07-27 15:00:38 -07:00
ba32b46d68 Docs: update filter options for docker container ps
The `is-task` filter was only documented in the usage
section, but this section is not used in the documentation.

This patch adds the missing filter, synchronises the
man page source, and does some slight rephrasing
and reformatting of the filters.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Upstream-commit: 46064f33f4
Component: cli
2017-07-27 22:10:26 +02:00
1ab5b42eed Merge pull request #34274 from aaronlehmann/container-name-delete-fix
container: Fix Delete on nonexistent container
Upstream-commit: 2f8a3afcf369deefb730de9871c6f2b36b05737c
Component: engine
2017-07-27 21:59:14 +02:00
5e9b54edf2 Merge pull request #34279 from tklauser/stat-syscall-unix
Switch Stat syscalls to x/sys/unix
Upstream-commit: cc5914c908690c94f8c9a42081d1b50f74f20424
Component: engine
2017-07-27 21:28:38 +02:00
beb3caf7ab Bump API version to 1.32
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Upstream-commit: 05121d555475b3d7cfa5b29f22dc85262cd1a1a8
Component: engine
2017-07-27 18:50:31 +02:00
3a8935f2e8 Update API plugin response examples
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Upstream-commit: 4735c7663201ce1bf618e2aa505d7813a331be3f
Component: engine
2017-07-27 18:43:13 +02:00
833ede48bb Merge pull request #34229 from dodiadodia/patch-1
Update mkimage-yum.sh
Upstream-commit: 885cd5fbe53211190390c434acf92548b5e6f5ee
Component: engine
2017-07-27 17:37:33 +02:00
d0849f7c31 Merge pull request #34281 from thaJeztah/add-ripcurld0-curator
Add Boaz Shuster ("ripcurld0") as curator
Upstream-commit: 5e39971788a0d4dfe63fc97931694e1fd098e858
Component: engine
2017-07-27 17:32:50 +02:00
05b4b48f44 Add support for redirections in bash completion for docker save|load
Signed-off-by: Harald Albers <github@albersweb.de>
Upstream-commit: 1862ac1e63
Component: cli
2017-07-27 14:45:15 +02:00
bb26636fb0 Add file completion to bash completion for secret create
Signed-off-by: Harald Albers <github@albersweb.de>
Upstream-commit: abc793e333
Component: cli
2017-07-27 14:44:12 +02:00
eb0bdbb81b Add bash completion for service scale --detach
Signed-off-by: Harald Albers <github@albersweb.de>
Upstream-commit: 29d0f868e8
Component: cli
2017-07-27 14:43:24 +02:00
4fc5710ae5 Fix sort order of options in bash completion
See guidelines at the top of the script:

    # Note for developers:
    # Please arrange options sorted alphabetically by long name with the
    # short options immediately following their corresponding long form.
    # This order should be applied to lists, alternatives and code blocks.

Signed-off-by: Harald Albers <github@albersweb.de>
Upstream-commit: 393dc4a8c4
Component: cli
2017-07-27 14:38:27 +02:00
e06995a2f0 Add Boaz Shuster ("ripcurld0") as curator
\o/

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Upstream-commit: b804976dd7f0fb4302c04cd3770c70c6adf33536
Component: engine
2017-07-27 13:10:21 +02:00
5c5712c42e Switch Stat syscalls to x/sys/unix
Switch some more usage of the Stat function and the Stat_t type from the
syscall package to golang.org/x/sys. Those were missing in PR #33399.

Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
Upstream-commit: 01f70b028e9597ef207509e8124e120688dae185
Component: engine
2017-07-27 10:09:02 +02:00
d6c5d5bca2 Merge pull request #34275 from tiborvass/fix-hijack
Fix panic in hijack
Upstream-commit: 67e79319a03c8b04cb51513901856a3273bdc7a4
Component: engine
2017-07-27 08:59:55 +02:00
36e04981d5 Add zsh completion for docker service scale --detach=false
Signed-off-by: Jean-Pierre Huynh <jean-pierre.huynh@ounet.fr>
Upstream-commit: 04d905f6fa
Component: cli
2017-07-27 07:48:39 +01:00
5e49f90082 Add support for stop-signal in stack command
Signed-off-by: Christophe Robin <crobin@nekoo.com>
Upstream-commit: b129a70b5c
Component: cli
2017-07-27 13:18:05 +09:00
f8d59b968b Update mkimage-yum.sh
If you want to makeimage using the group "Compute Node" and so on, you must add “ ” to include the $install_groups, or it will format the text as below:
yum -c /etc/yum.conf --installroot=/tmp/makeimage.sh.zOLs8y --releasever=/ --setopt=tsflags=nodocs --setopt=group_package_types=mandatory -y groupinstall Compute Node
That's absolutely incorrect.

Change-Id: I8b6b09f215aabd6b1f76c9365ba96c68722c47fd
Signed-off-by: dodia <tangwj2@lenovo.com>
Upstream-commit: fa900bd30a0881772b8964ee4d91d791af5b13c8
Component: engine
2017-07-27 10:40:00 +08:00
252eb068fe container: Fix Delete on nonexistent container
Delete needs to release names related to a container even if that
container isn't present in the db. However, slightly overzealous error
checking causes the transaction to get rolled back. Ignore the error
from Delete on the container itself, since it may not be present.

Signed-off-by: Aaron Lehmann <aaron.lehmann@docker.com>
Upstream-commit: 1d9546fc62c559dbcbb3dbdce40318fb7c4d67a2
Component: engine
2017-07-26 16:45:54 -07:00
7b50af1510 Merge pull request #34205 from dnephin/add-codeowners
Add an initial CODEOWNERS
Upstream-commit: 8c72417b51a4998caae9f44eaf2f5a654ffcd839
Component: engine
2017-07-27 00:31:10 +02:00
1861ca6314 Merge pull request #33987 from dnephin/cleanup-more-hack
Move test-unit out of hack/make
Upstream-commit: f8c434366e9134a1e2d4c4038e0257952f74cc99
Component: engine
2017-07-27 00:29:13 +02:00
6118c4c4b5 Merge pull request #34247 from thaJeztah/fix-restartpolicy-default
Fix RestartPolicy default value
Upstream-commit: 36e4e952f8f28ff661345328bd8da0ce9f5f2f86
Component: engine
2017-07-27 00:21:48 +02:00
15b5db94ff Fixing releaseableLayer handling of layer streams and mounts.
releaseableLayer includes automatic handling for creating a read/write layer and mounting it on a call to Mount(), but then does not correspondingly unmount the layer before trying to delete it, which will fail for some graphdrivers. Commit on a releaseable layer also leaks the tarstream for the layer. To fix this, the stream close is deferred in Commit and releaseRWLayer now correctly handles unmounting the layer before trying to delete it.  In addition, the changes include better error handling in Release() to make sure that errors are returned to the caller for failures on read/write layers instead of being ignored.# Please enter the commit message for your changes. Lines starting

Signed-off-by: Stefan Wernli <swernli@ntdev.microsoft.com>
Upstream-commit: 1d457999c4540aacda68f834bdb3c6f220ce3fd5
Component: engine
2017-07-26 14:26:56 -07:00
993196bb20 Merge pull request #34249 from thaJeztah/remove-unused-constants
Remove unused constants in plugin_responses
Upstream-commit: 1ea52c481268d523e715a6d742718679d87d9f61
Component: engine
2017-07-26 16:44:51 -04:00
09f07f31c5 Add an initial CODEOWNERS
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: a1c19b764c95e058cbb6bcfe0b55973cca957bfc
Component: engine
2017-07-26 16:04:23 -04:00
8adcc1277a Add a warning when make is run outside of a container.
The warning can be disabled by setting the environment variable

Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 12a7387c8e
Component: cli
2017-07-26 15:58:15 -04:00
88060164f5 Merge pull request #319 from keloyang/bugfix-docker-cp
Bugfix docker cp
Upstream-commit: 2dac00bdca
Component: cli
2017-07-26 11:56:12 -04:00
5ff9e5001c Fix panic in hijack
Signed-off-by: Tibor Vass <tibor@docker.com>
Upstream-commit: 7a53991bd6200b875e492d9c3f8e99a9a0c11056
Component: engine
2017-07-25 22:46:41 -07:00
31c5c88ddd Merge pull request #34166 from rhatdan/master
/dev should be constrained in size just like /dev/shm
Upstream-commit: 72cda6a6c2f25854bea2d69168082684f2c9feca
Component: engine
2017-07-25 22:36:35 +02:00
dadbb17aea Fix shallow git clone in docker-build
If the HEAD request fails, use a GET request to properly test if git
server is smart-http.

Signed-off-by: Andrew He <he.andrew.mail@gmail.com>
Upstream-commit: 85afbbc2ed36945adeaf6fa09f6066a549631a6f
Component: engine
2017-07-25 13:20:59 -07:00
8f5aa8e137 Merge pull request #33440 from RenaudWasTaken/genericresource
Added support for Generic Resources
Upstream-commit: 9319a8a2dd5760b3d0eda359b8c3872f5e37aa87
Component: engine
2017-07-25 15:32:25 -04:00
16df3a505c Merge pull request #42 from seemethere/remove_telemetry_plugin_fedora_26
Removes telemetry mentions from Fedora 26
Upstream-commit: 4c678098414f0baa6bd19ad765235f2db399650b
Component: packaging
2017-07-25 11:39:36 -07:00
4128b146dc Removes telemetry mentions from Fedora 26
Signed-off-by: Eli Uriegas <eli.uriegas@docker.com>
Upstream-commit: a8c7e75bfd263b2f7445b06f749aba13aaeac789
Component: packaging
2017-07-25 11:26:40 -07:00
a2ee6302a8 Merge pull request #379 from jphuynh/completion-zsh-plugin-ls-filter
Add metric plugins to zsh completion for `plugin ls --filter capability`
Upstream-commit: 915b18bdc9
Component: cli
2017-07-25 20:02:26 +02:00
772603618a Merge pull request #41 from seemethere/revert_metrics_plugin
Revert "Added the metrics plugin to the RPM/DEB packages"
Upstream-commit: 0f409bf47a7a0e6cbd97b3768a10724ecdd11ccc
Component: packaging
2017-07-25 10:08:52 -07:00
99f6b2e854 update version
Signed-off-by: Victor Vieux <victorvieux@gmail.com>
2017-07-25 09:57:18 -07:00
4e97b12edd Merge pull request #40 from seemethere/propagate_build_deb_errors
Tell build-deb to throw up errors
Upstream-commit: d37c8c84f7e4693bc922fe1063686064b2740f5b
Component: packaging
2017-07-25 09:46:29 -07:00
66ffeac642 Remove unused constants in plugin_responses
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Upstream-commit: 9bb57aa3fef6c1f31e9e8344e06670c3d41e4395
Component: engine
2017-07-25 17:07:04 +02:00
b0a6694bbf Fix RestartPolicy default value
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Upstream-commit: fc48b5529dca3907ade273921a14906be796e333
Component: engine
2017-07-25 16:14:59 +02:00
77f384f48b Add metric plugins to zsh completion for plugin ls --filter capability
Signed-off-by: Jean-Pierre Huynh <jean-pierre.huynh@ounet.fr>
Upstream-commit: ff61438328
Component: cli
2017-07-25 09:24:35 +01:00
5230175f79 Revert "Added the metrics plugin to the RPM/DEB packages"
This reverts commit ceac22bf2240df483b1d3bd3a19ac681e665f910.

Signed-off-by: Eli Uriegas <eli.uriegas@docker.com>
Upstream-commit: bda73f99e455bd3f041ccc843f094186ca8b8623
Component: packaging
2017-07-24 18:16:04 -07:00
bce59ac2a5 Merge pull request #11 from StefanScherer/build-deb-raspbian
Add Raspbian deb packages
Upstream-commit: d4ca48172bb9de41072ce63298d71ef3b0aca59a
Component: packaging
2017-07-24 18:11:51 -07:00
706203d338 Merge pull request #375 from hernandanielg/doc/fix_volume_ls
fixed word network on volume_ls.md
Upstream-commit: 7cf9e752d5
Component: cli
2017-07-25 03:05:37 +02:00
57e5f69d28 Merge pull request #371 from jphuynh/completion-zsh-service-create-update-publish
Remove duplicate publish option in docker service create/update
Upstream-commit: 4c30fbcf4c
Component: cli
2017-07-25 02:54:05 +02:00
2029cf1c2d Added support for Generic Resources
Signed-off-by: Renaud Gaubert <rgaubert@nvidia.com>
Upstream-commit: 87e1464c438f4163e2694a0bf29ae5a45903449b
Component: engine
2017-07-24 17:49:56 -07:00
b58d0f8839 Tell build-deb to throw up errors
Signed-off-by: Eli Uriegas <eli.uriegas@docker.com>
Upstream-commit: 3618e4aa262f154f79c804752d69110772e636a3
Component: packaging
2017-07-24 16:30:11 -07:00
909453ab58 Merge pull request #34235 from aaronlehmann/recursive-rlock
cluster: Avoid recursive RLock
Upstream-commit: 92b3dcb601381348c12ad7f99e865991bf908eea
Component: engine
2017-07-24 15:50:22 -07:00
156191d710 Add --chown flag to Dockerfile ADD and COPY
Rebased by @estesp

Signed-off-by: Kara Alexandra <kalexandra@us.ibm.com>
Signed-off-by: Phil Estes <estesp@linux.vnet.ibm.com>
Upstream-commit: 858fad37954b198bb90aed36017b80b38ea88c1d
Component: engine
2017-07-24 16:25:04 -04:00
e2cfb7ac98 cluster: Avoid recursive RLock
GetTasks can call GetService and GetNode with the read lock held. These
methods try to aquire the read side of the same lock. According to the
sync package documentation, this is not safe:

> If a goroutine holds a RWMutex for reading, it must not expect this or
> any other goroutine to be able to also take the read lock until the
> first read lock is released. In particular, this prohibits recursive
> read locking. This is to ensure that the lock eventually becomes
> available; a blocked Lock call excludes new readers from acquiring the
> lock.

Fix GetTasks to use the lower-level getService and getNode methods
instead. Also, use lockedManagerAction to simplify GetTasks.

Signed-off-by: Aaron Lehmann <aaron.lehmann@docker.com>
Upstream-commit: bd4f66c8f1f6ad4a2f228a957f293bc157e13d9c
Component: engine
2017-07-24 10:52:44 -07:00
c394e66cf8 fixed word network on volume_ls.md
Signed-off-by: Hernan Garcia <hernandanielg@gmail.com>
Upstream-commit: f5bca7af10
Component: cli
2017-07-24 05:18:10 -05:00
5087bd5387 Merge pull request #374 from thaJeztah/bump-version
Bump version to 17.08.0-dev
Upstream-commit: 1338f11ee7
Component: cli
2017-07-24 01:03:20 +02:00
0c686df105 Add raspbian deb packages
Upstream-commit: 1c61fdcafc4f6fa0e41c267cd857d0b60d3a2dbd
Component: packaging
2017-07-22 08:20:40 +02:00
04720d7b97 Bump version to 17.08.0-dev
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Upstream-commit: a8bcbfd9e0
Component: cli
2017-07-22 03:13:52 +02:00
51a3e0949b Merge pull request #363 from jphuynh/shellcheckReadme
Update README and add help target to make
Upstream-commit: deab50ba19
Component: cli
2017-07-22 03:06:53 +02:00
d3fa99c143 Merge pull request #311 from thaJeztah/fix-system-prune-until
Error if "until" filter is combined with "--volumes" on system prune
Upstream-commit: b175e3aacd
Component: cli
2017-07-22 03:04:58 +02:00
9f4c690d3e Merge pull request #34132 from wenjianhn/http-307
Handle https proxy's CONNECT response
Upstream-commit: 4ac4c8ef4b06ffa8ccd4fd3ae0f76e4ca820c1bc
Component: engine
2017-07-22 01:00:48 +02:00
0fbe24ad38 Merge pull request #31 from andrewhsu/f26
build fedora 26 packages
Upstream-commit: 7cf8afa936431a5779f3d9e5748a40b05bfa75e4
Component: packaging
2017-07-21 14:44:11 -07:00
255f899b23 Merge pull request #38 from seemethere/remove_ubuntu_yakkety
End Ubuntu 16.10 (Yakkety) support
Upstream-commit: 46ad13ab174800457e4081d472592ac0d1601dcf
Component: packaging
2017-07-21 14:38:15 -07:00
29f596dcad End Ubuntu 16.10 (Yakkety) support
Ubuntu 16.10 (Yakkety) reached it's "End of Life" on July 20, 2017:
http://fridge.ubuntu.com/2017/07/20/ubuntu-16-10-yakkety-yak-end-of-life-reached-on-july-20-2017/

As such we are removing support for the distribution for future versions
of Docker packages.

Signed-off-by: Eli Uriegas <eli.uriegas@docker.com>
Upstream-commit: 36cc14cd480879391eeb9f470417698618f4cdb3
Component: packaging
2017-07-21 14:33:18 -07:00
658d91b7b5 Update spec to align with new spec files
Signed-off-by: Eli Uriegas <eli.uriegas@docker.com>
Upstream-commit: feb2f647c5570753a607b71bb476028c8d1b4e55
Component: packaging
2017-07-21 14:20:39 -07:00
da96ff7f66 Update go version, add distro/suite tags
Signed-off-by: Eli Uriegas <eli.uriegas@docker.com>
Upstream-commit: 26b1bd9f3da46b907021ae66d310405057e29634
Component: packaging
2017-07-21 14:18:42 -07:00
f462cfc7cf build fedora 26 packages
Just released: https://docs.fedoraproject.org/en-US/Fedora/26/html/Release_Notes/

Signed-off-by: Andrew Hsu <andrewhsu@docker.com>
Upstream-commit: 412824b465d8334278bb9c02f0a5ee3d294826fd
Component: packaging
2017-07-21 14:16:38 -07:00
55833ad972 Merge pull request #34174 from aaronlehmann/logattributes
Avoid using a map for log attributes
Upstream-commit: 901fe35bd3ab1d4c25872c8a92577c4f088bba74
Component: engine
2017-07-21 22:31:51 +02:00
140ada5fa0 Merge pull request #37 from seemethere/change_deb_rules_to_cd
Change make -C to a cd command for manpage generation
Upstream-commit: f608c8c590676f30bc1fe05bf65e6716d3e97a3a
Component: packaging
2017-07-21 10:57:18 -07:00
6f2ec850b4 Merge pull request #3 from rogaha/add_metrics_plugin
Added the metrics plugin to the RPM/DEB packages
Upstream-commit: ce952b6f169aedf56a968f58117587cafd20aa09
Component: packaging
2017-07-21 10:56:30 -07:00
2e0a8a6dee Change make -C to a cd command
Tried out make -C in this scenario and it did not seem to function
correctly, changed to cd.

Signed-off-by: Eli Uriegas <eli.uriegas@docker.com>
Upstream-commit: 3a548f8815d5308b197abea1e39f0a0a4939c4f2
Component: packaging
2017-07-21 10:44:34 -07:00
6ad101e8da Merge pull request #36 from seemethere/fix_manpage_generation
Have docker cli be compiled in GOPATH
Upstream-commit: 5c02e7c3f4a8e9a9297d35cc74b33364311f25f0
Component: packaging
2017-07-21 10:33:23 -07:00
e7e7faca03 Have docker cli be compiled in GOPATH
manpage generation was failing for docker cli when being run under
aarch64: https://ci.qa.aws.dckr.io/job/docker/job/release-packaging/view/change-requests/job/PR-41/5/execution/node/360/log/

The way to remedy this is to compile the cli and the manpages while in
the GOPATH so that dependencies found in the vendor folder are
discovered by the go build tools.

Signed-off-by: Eli Uriegas <eli.uriegas@docker.com>
Upstream-commit: b325a0eb0216e151be5d3e1ab9e48db07f53c6c5
Component: packaging
2017-07-21 10:31:28 -07:00
c6ce3f3302 Update README and add help target to make
Signed-off-by: Jean-Pierre Huynh <jean-pierre.huynh@ounet.fr>
Upstream-commit: 649a5864f3
Component: cli
2017-07-21 16:57:06 +01:00
66ba1076ff Merge pull request #34206 from seemethere/fix_integration_tests
Add go-autogen to integration tests
Upstream-commit: 90fbe6a7373da81b36d1427e0c2764c0b583f421
Component: engine
2017-07-21 13:52:48 +02:00
5eb81e4819 Merge pull request #33960 from cpuguy83/ignore_not_exist_err
Fix error handling with not-exist errors on remove
Upstream-commit: 67eeb0490d9beacbd6e00eb4ea20cfe692ebf333
Component: engine
2017-07-21 13:52:27 +02:00
53b038fa76 Error if "until" filter is combined with "--volumes" on system prune
The "until" filter is supported by all object types, except for
volumes.

Before this patch, the "until" filter would attempted to be used for the volume
prune endpoint, resulting in an error being returned by the daemon, and
further prune endpoints (networks, images) to be skipped.

    $ docker system prune --filter until=24h --filter label=label.foo=bar

    WARNING! This will remove:
            - all stopped containers
            - all volumes not used by at least one container
            - all networks not used by at least one container
            - all dangling images
    Are you sure you want to continue? [y/N] y
    Error response from daemon: Invalid filter 'until'

    Calling POST /v1.30/containers/prune?filters=%7B%22label%22%3A%7B%22label.foo%3D%3Dbar%22%3Atrue%7D%2C%22until%22%3A%7B%2224h%22%3Atrue%7D%7D
    Calling POST /v1.30/volumes/prune?filters=%7B%22label%22%3A%7B%22label.foo%3D%3Dbar%22%3Atrue%7D%2C%22until%22%3A%7B%2224h%22%3Atrue%7D%7D
    Handler for POST /v1.30/volumes/prune returned error: Invalid filter 'until'
    Error response from daemon: Invalid filter 'until'

With this patch, an error is produced instead, preventing "partial" prune.

    $ docker system prune --filter until=24h --filter label=foo==bar --volumes
    ERROR: The "until" filter is not supported with "--volumes"

Note that `docker volume prune` does not have this problem, and produces an
error if the `until` filter is used;

    $ docker volume prune --filter until=24h

    WARNING! This will remove all volumes not used by at least one container.
    Are you sure you want to continue? [y/N] y
    Error response from daemon: Invalid filter 'until'

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Upstream-commit: 3c095dc546
Component: cli
2017-07-21 12:11:53 +02:00
98b6afc061 Merge pull request #369 from jphuynh/completion-zsh-get-log-options
Update __docker_get_log_options completion (zsh)
Upstream-commit: 33a25708d4
Component: cli
2017-07-21 11:25:17 +02:00
9c4647a2a3 Merge pull request #368 from jphuynh/completion-zsh-system-prune-volumes
Add zsh completion for `system prune --volumes`
Upstream-commit: 814827ef0d
Component: cli
2017-07-21 11:20:59 +02:00
4ea813dca9 Merge pull request #364 from ksouf/issue-37-add-connect-disconnect
adding connect disconnect network tests
Upstream-commit: 36b9edff7e
Component: cli
2017-07-21 11:19:23 +02:00
96839aeeb6 Merge pull request #223 from ripcurld0/docs_cp_prm
Update the cp command docs to include archive
Upstream-commit: 25ca529388
Component: cli
2017-07-21 11:14:15 +02:00
a6804951ed Merge pull request #291 from thaJeztah/bump-swarmkit
Bump swarmkit and dependencies to 79381d0840be27f8b3f5c667b348a4467d866eeb
Upstream-commit: 472ce90624
Component: cli
2017-07-21 11:07:38 +02:00
49215da962 Remove duplicate publish option in docker service create/update completion
Signed-off-by: Jean-Pierre Huynh <jean-pierre.huynh@ounet.fr>
Upstream-commit: 6c65ba6c08
Component: cli
2017-07-21 09:53:43 +01:00
cfc631fd9c Handle https proxy's CONNECT response
When using a https proxy, an extra HTTP 200 header will be generated.
So we can't rely on detecting the first http header.

$curlHeaders with https proxy:
"HTTP/1.0 200 Connection established  <-- the https proxy's response

HTTP/1.1 307 Temporary Redirect
...
"

See https://stackoverflow.com/a/34537988/889429

Fixes #34131

Signed-off-by: Jacob Wen <jian.w.wen@oracle.com>
Upstream-commit: 238d17c456c3ff0b8937b33538f6a4b36f829410
Component: engine
2017-07-21 10:13:04 +08:00
6adc7715ee Update __docker_get_log_options completion
Signed-off-by: Jean-Pierre Huynh <jean-pierre.huynh@ounet.fr>
Upstream-commit: d7ade64d29
Component: cli
2017-07-20 23:41:47 +01:00
a3b41349c5 Add zsh completion for system prune --volumes
Signed-off-by: Jean-Pierre Huynh <jean-pierre.huynh@ounet.fr>
Upstream-commit: 6b256484ae
Component: cli
2017-07-20 23:13:04 +01:00
1dd2821aa2 Merge pull request #357 from ripcurld0/nat_sort_service
Sort services names in a natural order
Upstream-commit: dfbad2bc5a
Component: cli
2017-07-20 22:56:09 +02:00
80c16c1105 Merge pull request #25 from seemethere/add_aarch64_support
Add ubuntu-xenial aarch64 Dockerfile
Upstream-commit: 9d7eb679ea5954f32eb342ff1c26e8cdf4c298cb
Component: packaging
2017-07-20 13:47:21 -07:00
264d26c86a Add ubuntu-xenial aarch64 Dockerfile
Signed-off-by: Eli Uriegas <eli.uriegas@docker.com>
Upstream-commit: 94cbc76b701b8b108f6a337b1695bd664f441bdc
Component: packaging
2017-07-20 13:30:51 -07:00
708d89bf47 Merge pull request #34204 from jpetazzo/log-docker-driver-env
Add a log message when storage driver is overriden through environment
Upstream-commit: 2b964164c23857bb9b383381af297f3feb5770fd
Component: engine
2017-07-20 21:16:06 +02:00
363d00bb4d Add go-autogen to integration tests
Integration test were failing in trial runs for docker-ce 17.07 due to
the lack of go-autogen being sourced in `hack/make.sh`. This re-adds
go-autogen to be sourced for test-integration-cli so that we can
actually run tests without the error found in:
https://github.com/moby/moby/pull/33857

Signed-off-by: Eli Uriegas <eli.uriegas@docker.com>
Upstream-commit: 3cdd471cac8193c34d8483255065c6c28a7b1645
Component: engine
2017-07-20 11:37:12 -07:00
c5cf96eb73 Merge pull request #34194 from abhinandanpb/opt
Fixing issue with driver opt not passed to drivers
Upstream-commit: 8d703b98b5c403743bf17e22395e32a7271b8d3c
Component: engine
2017-07-20 20:02:05 +02:00
69533b66d7 adding connect disconnect network tests
Signed-off-by: khaled souf <khaled.souf@gmail.com>
Upstream-commit: 7296abf39f
Component: cli
2017-07-20 18:53:03 +02:00
5973cb0a44 Merge pull request #365 from dnephin/more-codeowners
Fix shellcheck on master and other cleanup
Upstream-commit: eabdace628
Component: cli
2017-07-20 18:35:09 +02:00
ca6a533d23 Fix error handling with not-exist errors on remove
Specifically, none of the graphdrivers are supposed to return a
not-exist type of error on remove (or at least that's how they are
currently handled).

Found that AUFS still had one case where a not-exist error could escape,
when checking if the directory is mounted we call a `Statfs` on the
path.

This fixes AUFS to not return an error in this case, but also
double-checks at the daemon level on layer remove that the error is not
a `not-exist` type of error.

Signed-off-by: Brian Goff <cpuguy83@gmail.com>
Upstream-commit: d42dbdd3d48d0134f8bba7ead92a7067791dffab
Component: engine
2017-07-20 12:26:27 -04:00
384f10f42e Fix shellcheck on master
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 14d2c95d4a
Component: cli
2017-07-20 12:11:27 -04:00
0d67981907 Add myself to command/stack codeowners
Cleanup a test

Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 60991e943b
Component: cli
2017-07-20 12:05:20 -04:00
43848053b0 Add a log message when the storage driver is overriden through the environment
Signed-off-by: Jérôme Petazzoni <jerome.petazzoni@gmail.com>
Upstream-commit: 84aefe869786f48151e76504746d576e6d377d79
Component: engine
2017-07-20 17:38:34 +02:00
f7c6b1d747 /dev should be constrained in size
There really is no reason why anyone should create content in /dev
other then device nodes.  Limiting it size to the 64 k size limit.

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
Upstream-commit: bfdb0f3cb86244b7b17d83c6c9aef858245815b4
Component: engine
2017-07-20 08:59:56 -04:00
e02dded93f Merge pull request #281 from albers/completion-plugin-ls--filter-capability
Add metric plugins to bash completion for `plugin ls --filter capability`
Upstream-commit: 45a7e1ca87
Component: cli
2017-07-20 13:39:51 +02:00
23caa8b756 Merge pull request #280 from albers/completion-awslog-multiline
Add bash completion for awslogs multiline log driver options
Upstream-commit: ab05e0aa63
Component: cli
2017-07-20 13:39:10 +02:00
c4357dce36 Merge pull request #332 from tych0/docs-fixups-for-password-stdin
Docs fixups for password stdin
Upstream-commit: 3d76febd17
Component: cli
2017-07-20 11:31:23 +02:00
4a278a582f Merge pull request #279 from albers/completion-build--iidfile
Add bash completion for `build --iidfile`
Upstream-commit: c394cd9bb7
Component: cli
2017-07-20 09:57:05 +02:00
39842a2345 Merge pull request #284 from albers/completion-service--detach
Fix bash completion for `service create|update --detach|-d`
Upstream-commit: cc6867f456
Component: cli
2017-07-20 09:47:59 +02:00
381747626c Merge pull request #283 from albers/completion-configs
Add bash completion for `docker config` command family
Upstream-commit: a4d76989bd
Component: cli
2017-07-20 09:45:01 +02:00
0e1ec67528 Merge pull request #34186 from thaJeztah/api-update-example-data
Improve API docs for UsageData
Upstream-commit: a14f06a86520d7dc865ccea08ae40dfa674d2445
Component: engine
2017-07-20 09:38:28 +02:00
4400145f36 Merge pull request #362 from alexmavr/stack-host-bridge-nets
Skip inspect of built-in networks on stack deploy
Upstream-commit: 79b6d376ce
Component: cli
2017-07-20 07:47:27 +02:00
82bb6886df Skip inspects of built-in networks on stack deploy
Signed-off-by: Alex Mavrogiannis <alex.mavrogiannis@docker.com>
Upstream-commit: 7f53c99dfe
Component: cli
2017-07-19 19:39:44 -07:00
11022193c7 Fixing issue with driver opt not passed to drivers
Signed-off-by: Abhinandan Prativadi <abhi@docker.com>
Upstream-commit: bcb55c62024419a2f8fa7679e1e068cc43425636
Component: engine
2017-07-19 17:44:53 -07:00
0de63ac93f Add Compose format 3.4
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 0adccacb38
Component: cli
2017-07-19 14:24:59 -07:00
c20d148cd4 Add scripts folder to shellcheck
Signed-off-by: Jean-Pierre Huynh <jean-pierre.huynh@ounet.fr>
Upstream-commit: 24c06c1723
Component: cli
2017-07-19 16:33:58 +01:00
c04822c682 Sort services names in a natural order
Signed-off-by: Boaz Shuster <ripcurld.github@gmail.com>
Upstream-commit: 7478e47b2d
Component: cli
2017-07-19 18:18:06 +03:00
fc4916e72f Improve API docs for UsageData
The docs did not mention when this information
was set, and what the `-1` value indicated.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Upstream-commit: 194f635ce7d097f550986bc3169ab59158f5aa68
Component: engine
2017-07-19 16:25:38 +02:00
336f19edea Allow to override build date
in order to make builds reproducible.
See https://reproducible-builds.org/ for why this is good
and https://reproducible-builds.org/specs/source-date-epoch/
for the definition of this variable.

Signed-off-by: Bernhard M. Wiedemann <bwiedemann@suse.de>
Upstream-commit: 760763e9957840f1983a5006f4e66d6920ec496e
Component: engine
2017-07-19 06:20:18 +02:00
b337882c5b Avoid using a map for log attributes
Having a map per log entry seemed heavier than necessary. These
attributes end up being sorted and serialized, so storing them in a map
doesn't add anything (there's no random access element). In SwarmKit,
they originate as a slice, so there's an unnecessary conversion to a map
and back.

This also fixes the sort comparator, which used to inefficiently split
the string on each comparison.

Signed-off-by: Aaron Lehmann <aaron.lehmann@docker.com>
Upstream-commit: b642b3f21f17cf50c79e464d3aedc93b2dbf0fb0
Component: engine
2017-07-18 19:01:20 -07:00
037025769f Add builder dev report for 2017-07-17
Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
Upstream-commit: b60c5819bb4f81e5d64cb8a79e07694b2112b05f
Component: engine
2017-07-18 18:31:42 -07:00
70f1e387d9 fish completion: add --password-stdin
Signed-off-by: Tycho Andersen <tycho@docker.com>
Upstream-commit: 3b7b6b5f7f
Component: cli
2017-07-18 15:25:46 -06:00
231e3a605b zsh completion: add --password-stdin
Signed-off-by: Tycho Andersen <tycho@docker.com>
Upstream-commit: 90619e5054
Component: cli
2017-07-18 15:25:46 -06:00
3ddb21c1b1 bash completion: add --password-stdin
Signed-off-by: Tycho Andersen <tycho@docker.com>
Upstream-commit: bbfe23f9e6
Component: cli
2017-07-18 15:25:46 -06:00
9fab9786f4 docs: add --password-stdin
also add an example of usage

Signed-off-by: Tycho Andersen <tycho@docker.com>
Upstream-commit: 3e392505a8
Component: cli
2017-07-18 15:25:46 -06:00
cc4d27dd59 Added the metrics plugin to the RPM/DEB packages
- centos
 - fedora
 - ubuntu
 - debian

Signed-off-by: Roberto Gandolfo Hashioka <roberto_hashioka@hotmail.com>
Upstream-commit: ceac22bf2240df483b1d3bd3a19ac681e665f910
Component: packaging
2017-07-18 09:14:56 -07:00
534226435e Remove links when remove container
Steps to reproduce:
```
    # docker run -tid --name aaa ubuntu
    57bfd00ac5559f72eec8c1b32a01fe38427d66687940f74611e65137414f0ada
    # docker run -tid --name bbb --link aaa ubuntu
    23ad18362950f39b638206ab4d1885fd4f50cbd1d16aac9cab8e97e0c8363471
    # docker ps --no-trunc
    CONTAINER ID                                                       IMAGE
    COMMAND             CREATED             STATUS              PORTS
    NAMES
    23ad18362950f39b638206ab4d1885fd4f50cbd1d16aac9cab8e97e0c8363471
    ubuntu              "/bin/bash"         4 seconds ago       Up 3 seconds
    bbb
    57bfd00ac5559f72eec8c1b32a01fe38427d66687940f74611e65137414f0ada
    ubuntu              "/bin/bash"         14 seconds ago      Up 14
    seconds                           aaa,bbb/aaa
    # docker rm -f bbb
    bbb
    # docker ps --no-trunc
    CONTAINER ID                                                       IMAGE
    COMMAND             CREATED             STATUS              PORTS
    NAMES
    57bfd00ac5559f72eec8c1b32a01fe38427d66687940f74611e65137414f0ada
    ubuntu              "/bin/bash"         29 seconds ago      Up 28
    seconds                           aaa,bbb/aaa
    # docker rm --link bbb/aaa
    Error response from daemon: Cannot get parent /bbb for name /bbb/aaa
```

When we rm container `bbb`, we can still see `bbb/aaa` in `docker ps
--no-trunc`. And this link cannot be deleted since container `bbb` has
already been removed.

We should remove links of a container when it is deleted.

Signed-off-by: Yuanhong Peng <pengyuanhong@huawei.com>
Upstream-commit: 600ad5c1b7b736fba6b103eb99ec87efb050b9ec
Component: engine
2017-07-18 12:09:26 +08:00
189240deb3 Remove test-unit from hack/make
Also remove the test flag from pkg/term and jsut checkuid directly.
Fixed a problem with a pkg/term test that was leaving the terminal in a bad
state.

Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: 1fb615599a83f41b449529df24f7e833c727e0ed
Component: engine
2017-07-17 11:39:33 -04:00
766e04b095 More helper hack helper functions to a more appropriate place.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
Upstream-commit: ece4520bf8b3938ef4a078e6826a1682e7fe5495
Component: engine
2017-07-17 11:38:59 -04:00
b1d7c8f014 Add bash completion for --storage-opt dm.libdm_log_level
This adds bash completion for https://github.com/moby/moby/pull/33845.

Signed-off-by: Harald Albers <github@albersweb.de>
Upstream-commit: b8710ccef3
Component: cli
2017-07-14 10:23:15 +02:00
9cc50cd1cb Vendor, update moby to d58ffa0364c04d03a8f25704d7f0489ee6cd9634
Fix docker cp dir with hard link, refer to https://github.com/moby/moby/pull/3.

Signed-off-by: Shukui Yang <yangshukui@huawei.com>
Upstream-commit: a996206ced
Component: cli
2017-07-12 01:28:55 +00:00
9806677f30 Refactor alias delegation in bash completion for secret rm|remove
The completion logic should be implemented in the documented subcommands
(ls, rm) and delegated to from the aliases (list, remove).
For the rm|remove pair, this was implemented vice versa.

Signed-off-by: Harald Albers <github@albersweb.de>
Upstream-commit: d585e554d5
Component: cli
2017-07-07 12:03:51 +02:00
9bf76d9f74 Add bash completion for secret inspect --pretty
Signed-off-by: Harald Albers <github@albersweb.de>
Upstream-commit: 211bd55ae7
Component: cli
2017-07-07 12:03:51 +02:00
41ac0e363c Add bash completion for docker config command family
This adds bash completion for
- https://github.com/docker/cli/pull/45
- https://github.com/moby/moby/pull/32336

Signed-off-by: Harald Albers <github@albersweb.de>
Upstream-commit: c40952b305
Component: cli
2017-07-07 12:03:51 +02:00
66062dd9b7 bump golang.org/x/net to 7dcfb8076726a3fdd9353b6b8a1f1b6be6811bd6
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Upstream-commit: 679ae70241
Component: cli
2017-07-03 17:40:41 -07:00
d48d41f4e2 bump gRPC to v1.3.0, add genproto, update protobuf
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Upstream-commit: 74ec7a5b2c
Component: cli
2017-07-03 17:40:36 -07:00
9ee14880db Bump SwarmKit to 79381d0840be27f8b3f5c667b348a4467d866eeb
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Upstream-commit: 585e099a9a
Component: cli
2017-07-03 17:40:28 -07:00
31ba47d5fe Improve bash completion for service create|update --detach
bash completion usually completes boolean options that default to `true`
with the `=false` suffix because that is the only syntax that really
changes behavior.
For this option, I implemented completion falsely.

Signed-off-by: Harald Albers <github@albersweb.de>
Upstream-commit: fc0dafbbd1
Component: cli
2017-07-03 17:40:23 +02:00
a1db9ae743 Add metric plugins to bash completion for plugin ls --filter capability
This adds bash completion for https://github.com/moby/moby/pull/32874.

Signed-off-by: Harald Albers <github@albersweb.de>
Upstream-commit: 2caf425f02
Component: cli
2017-07-03 11:40:25 +02:00
53d008d01f Add bash completion for awslogs multiline log driver options
This adds bash completion for https://github.com/moby/moby/pull/30891.

Signed-off-by: Harald Albers <github@albersweb.de>
Upstream-commit: 1d21a3dd7c
Component: cli
2017-07-03 11:04:44 +02:00
68bbc40c7a Add bash completion for build --iidfile
This adds bash completion for https://github.com/moby/moby/pull/32406.

Signed-off-by: Harald Albers <github@albersweb.de>
Upstream-commit: 1f8720717d
Component: cli
2017-07-03 10:41:13 +02:00
6b848bca45 Add clarification to --privileged error message
Signed-off-by: TomSweeneyRedHat <tsweeney@redhat.com>
Upstream-commit: 38e26f0d8d0941a34164c64b04c9646c8c89ac29
Component: engine
2017-06-25 14:02:20 -04:00
b1bd677bbe remove desktop-integration contrib from .deb
these examples are not nescessary for day-to-day
use of docker, so don't have to be included in
the packages.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Upstream-commit: 957c44b12e036f3c0a57e34262eca0e0263a0d39
Component: packaging
2017-06-22 02:02:36 -07:00
65ef46ebdd Update the cp command docs to include archive
Signed-off-by: Boaz Shuster <ripcurld.github@gmail.com>
Upstream-commit: e4c70d390d
Component: cli
2017-06-21 13:20:47 +03:00
2483 changed files with 136888 additions and 74282 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
.helpers/

File diff suppressed because it is too large Load Diff

View File

@ -2,6 +2,125 @@
Want to contribute on Docker CE? Awesome!
This page contains information about reporting issues as well as some tips and
guidelines useful to experienced open source contributors. Finally, make sure
you read our [community guidelines](#docker-community-guidelines) before you
start participating.
## Topics
* [Reporting Security Issues](#reporting-security-issues)
* [Reporting Issues](#reporting-other-issues)
* [Submitting Pull Requests](#submitting-pull-requests)
* [Community Guidelines](#docker-community-guidelines)
## Reporting security issues
The Docker maintainers take security seriously. If you discover a security
issue, please bring it to their attention right away!
Please **DO NOT** file a public issue, instead send your report privately to
[security@docker.com](mailto:security@docker.com).
Security reports are greatly appreciated and we will publicly thank you for it.
We also like to send gifts&mdash;if you're into Docker schwag, make sure to let
us know. We currently do not offer a paid security bounty program, but are not
ruling it out in the future.
## Reporting other issues
There are separate issue-tracking repos for the end user Docker CE
products specialized for a platform. Find your issue or file a new issue
for the platform you are using:
* https://github.com/docker/for-linux
* https://github.com/docker/for-mac
* https://github.com/docker/for-win
* https://github.com/docker/for-aws
* https://github.com/docker/for-azure
When reporting issues, always include:
* The output of `docker version`.
* The output of `docker info`.
If presented with a template when creating an issue, please follow its directions.
Also include the steps required to reproduce the problem if possible and
applicable. This information will help us review and fix your issue faster.
When sending lengthy log-files, consider posting them as a gist (https://gist.github.com).
Don't forget to remove sensitive data from your logfiles before posting (you can
replace those parts with "REDACTED").
## Submitting pull requests
Please see the corresponding `CONTRIBUTING.md` file of each component for more information:
* Changes to the `engine` should be directed upstream to https://github.com/moby/moby
* Changes to the `cli` should be directed upstream to https://github.com/docker/cli
* Changes to the `packaging` should be directed upstream to https://github.com/docker/docker-ce-packaging
## Docker community guidelines
We want to keep the Docker community awesome, growing and collaborative. We need
your help to keep it that way. To help with this we've come up with some general
guidelines for the community as a whole:
* Be nice: Be courteous, respectful and polite to fellow community members.
Regional, racial, gender, or other abuse will not be tolerated. We like
nice people way better than mean ones!
* Encourage diversity and participation: Make everyone in our community feel
welcome, regardless of their background and the extent of their
contributions, and do everything possible to encourage participation in
our community.
* Keep it legal: Basically, don't get us in trouble. Share only content that
you own, do not share private or sensitive information, and don't break
the law.
* Stay on topic: Make sure that you are posting to the correct channel and
avoid off-topic discussions. Remember when you update an issue or respond
to an email you are potentially sending to a large number of people. Please
consider this before you update. Also remember that nobody likes spam.
* Don't send email to the maintainers: There's no need to send email to the
maintainers to ask them to investigate an issue or to take a look at a
pull request. Instead of sending an email, GitHub mentions should be
used to ping maintainers to review a pull request, a proposal or an
issue.
### Guideline violations — 3 strikes method
The point of this section is not to find opportunities to punish people, but we
do need a fair way to deal with people who are making our community suck.
1. First occurrence: We'll give you a friendly, but public reminder that the
behavior is inappropriate according to our guidelines.
2. Second occurrence: We will send you a private message with a warning that
any additional violations will result in removal from the community.
3. Third occurrence: Depending on the violation, we may need to delete or ban
your account.
**Notes:**
* Obvious spammers are banned on first occurrence. If we don't do this, we'll
have spam all over the place.
* Violations are forgiven after 6 months of good behavior, and we won't hold a
grudge.
* People who commit minor infractions will get some education, rather than
hammering them in the 3 strikes process.
* The rules apply equally to everyone in the community, no matter how much
you've contributed.
* Extreme violations of a threatening, abusive, destructive or illegal nature
will be addressed immediately and are not subject to 3 strikes or forgiveness.
* Contact abuse@docker.com to report abuse or appeal violations. In the case of
appeals, we know that mistakes happen, and we'll work with you to come up with a
fair solution if there has been a misunderstanding.

View File

@ -1,30 +1,56 @@
CLI_DIR:=$(CURDIR)/components/cli
ENGINE_DIR:=$(CURDIR)/components/engine
PACKAGING_DIR:=$(CURDIR)/components/packaging
MOBY_COMPONENTS_SHA=f79265f1412af0a68aadd11e1d2f374446f3681b
MOBY_COMPONENTS_URL=https://raw.githubusercontent.com/shykes/moby-extras/$(MOBY_COMPONENTS_SHA)/cmd/moby-components
MOBY_COMPONENTS=.helpers/moby-components-$(MOBY_COMPONENTS_SHA)
VERSION=$(shell cat VERSION)
.PHONY: help
help: ## show make targets
@awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {sub("\\\\n",sprintf("\n%22c"," "), $$2);printf " \033[36m%-20s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST)
.PHONY: test-integration-cli
test-integration-cli: $(CLI_DIR)/build/docker ## test integration of cli and engine
$(MAKE) -C $(ENGINE_DIR) DOCKER_CLI_PATH=$< test-integration-cli
$(CLI_DIR)/build/docker:
$(MAKE) -C $(CLI_DIR) -f docker.Makefile build
.PHONY: deb
deb: ## build deb packages
$(MAKE) VERSION=$(VERSION) CLI_DIR=$(CLI_DIR) ENGINE_DIR=$(ENGINE_DIR) -C $(PACKAGING_DIR) deb
.PHONY: rpm
rpm: ## build rpm packages
$(MAKE) VERSION=$(VERSION) CLI_DIR=$(CLI_DIR) ENGINE_DIR=$(ENGINE_DIR) -C $(PACKAGING_DIR) rpm
.PHONY: static
static: ## build static packages
$(MAKE) VERSION=$(VERSION) CLI_DIR=$(CLI_DIR) ENGINE_DIR=$(ENGINE_DIR) -C $(PACKAGING_DIR) static
.PHONY: clean
clean: ## clean the build artifacts
-$(MAKE) -C $(CLI_DIR) clean
-$(MAKE) -C $(ENGINE_DIR) clean
-$(MAKE) -C $(PACKAGING_DIR) clean
vendor: $(CLI_DIR)/build/docker
docker run --rm -it -v $(CLI_DIR):/go/src/github.com/docker/cli -v $(ENGINE_DIR):/go/src/github.com/docker/docker docker-cli-dev sh -c 'cd /go/src/github.com/docker/docker && git init && git add . && git -c user.name=user -c user.email=email@example.com commit -m first && cd /go/src/github.com/docker/cli && vndr; rm -rf /go/src/github.com/docker/docker/.git'
$(MOBY_COMPONENTS):
mkdir -p .helpers
curl -fsSL $(MOBY_COMPONENTS_URL) > $(MOBY_COMPONENTS)
chmod +x $(MOBY_COMPONENTS)
.PHONY: update-components
update-components: update-components-cli update-components-engine update-components-packaging ## udpate components using moby extra tool
.PHONY: update-components-cli
update-components-cli: $(MOBY_COMPONENTS)
$(MOBY_COMPONENTS) update cli
.PHONY: update-components-engine
update-components-engine: $(MOBY_COMPONENTS)
$(MOBY_COMPONENTS) update engine
.PHONY: update-components-packaging
update-components-packaging: $(MOBY_COMPONENTS)
$(MOBY_COMPONENTS) update packaging

View File

@ -1 +1 @@
17.07.0-ce-rc4
17.10.0-ce-rc1

View File

@ -1,6 +1,7 @@
# Github code owners
# See https://github.com/blog/2392-introducing-code-owners
cli/command/stack/** @dnephin @vdemeester
cli/compose/** @dnephin @vdemeester
contrib/completion/bash/** @albers
contrib/completion/zsh/** @sdurrheimer

View File

@ -0,0 +1,365 @@
# Contributing to Docker
Want to hack on Docker? Awesome! We have a contributor's guide that explains
[setting up a Docker development environment and the contribution
process](https://docs.docker.com/opensource/project/who-written-for/).
This page contains information about reporting issues as well as some tips and
guidelines useful to experienced open source contributors. Finally, make sure
you read our [community guidelines](#docker-community-guidelines) before you
start participating.
## Topics
* [Reporting Security Issues](#reporting-security-issues)
* [Design and Cleanup Proposals](#design-and-cleanup-proposals)
* [Reporting Issues](#reporting-other-issues)
* [Quick Contribution Tips and Guidelines](#quick-contribution-tips-and-guidelines)
* [Community Guidelines](#docker-community-guidelines)
## Reporting security issues
The Docker maintainers take security seriously. If you discover a security
issue, please bring it to their attention right away!
Please **DO NOT** file a public issue, instead send your report privately to
[security@docker.com](mailto:security@docker.com).
Security reports are greatly appreciated and we will publicly thank you for it.
We also like to send gifts&mdash;if you're into Docker schwag, make sure to let
us know. We currently do not offer a paid security bounty program, but are not
ruling it out in the future.
## Reporting other issues
A great way to contribute to the project is to send a detailed report when you
encounter an issue. We always appreciate a well-written, thorough bug report,
and will thank you for it!
Check that [our issue database](https://github.com/docker/cli/issues)
doesn't already include that problem or suggestion before submitting an issue.
If you find a match, you can use the "subscribe" button to get notified on
updates. Do *not* leave random "+1" or "I have this too" comments, as they
only clutter the discussion, and don't help resolving it. However, if you
have ways to reproduce the issue or have additional information that may help
resolving the issue, please leave a comment.
When reporting issues, always include:
* The output of `docker version`.
* The output of `docker info`.
Also include the steps required to reproduce the problem if possible and
applicable. This information will help us review and fix your issue faster.
When sending lengthy log-files, consider posting them as a gist (https://gist.github.com).
Don't forget to remove sensitive data from your logfiles before posting (you can
replace those parts with "REDACTED").
## Quick contribution tips and guidelines
This section gives the experienced contributor some tips and guidelines.
### Pull requests are always welcome
Not sure if that typo is worth a pull request? Found a bug and know how to fix
it? Do it! We will appreciate it. Any significant improvement should be
documented as [a GitHub issue](https://github.com/docker/cli/issues) before
anybody starts working on it.
We are always thrilled to receive pull requests. We do our best to process them
quickly. If your pull request is not accepted on the first try,
don't get discouraged! Our contributor's guide explains [the review process we
use for simple changes](https://docs.docker.com/opensource/workflow/make-a-contribution/).
### Talking to other Docker users and contributors
<table class="tg">
<col width="45%">
<col width="65%">
<tr>
<td>Forums</td>
<td>
A public forum for users to discuss questions and explore current design patterns and
best practices about Docker and related projects in the Docker Ecosystem. To participate,
just log in with your Docker Hub account on <a href="https://forums.docker.com" target="_blank">https://forums.docker.com</a>.
</td>
</tr>
<tr>
<td>Community Slack</td>
<td>
The Docker Community has a dedicated Slack chat to discuss features and issues. You can sign-up <a href="https://community.docker.com/registrations/groups/4316" target="_blank">with this link</a>.
</td>
</tr>
<tr>
<td>Twitter</td>
<td>
You can follow <a href="https://twitter.com/docker/" target="_blank">Docker's Twitter feed</a>
to get updates on our products. You can also tweet us questions or just
share blogs or stories.
</td>
</tr>
<tr>
<td>Stack Overflow</td>
<td>
Stack Overflow has over 17000 Docker questions listed. We regularly
monitor <a href="https://stackoverflow.com/search?tab=newest&q=docker" target="_blank">Docker questions</a>
and so do many other knowledgeable Docker users.
</td>
</tr>
</table>
### Conventions
Fork the repository and make changes on your fork in a feature branch:
- If it's a bug fix branch, name it XXXX-something where XXXX is the number of
the issue.
- If it's a feature branch, create an enhancement issue to announce
your intentions, and name it XXXX-something where XXXX is the number of the
issue.
Submit unit tests for your changes. Go has a great test framework built in; use
it! Take a look at existing tests for inspiration. [Run the full test
suite](README.md) on your branch before
submitting a pull request.
Update the documentation when creating or modifying features. Test your
documentation changes for clarity, concision, and correctness, as well as a
clean documentation build. See our contributors guide for [our style
guide](https://docs.docker.com/opensource/doc-style) and instructions on [building
the documentation](https://docs.docker.com/opensource/project/test-and-docs/#build-and-test-the-documentation).
Write clean code. Universally formatted code promotes ease of writing, reading,
and maintenance. Always run `gofmt -s -w file.go` on each changed file before
committing your changes. Most editors have plug-ins that do this automatically.
Pull request descriptions should be as clear as possible and include a reference
to all the issues that they address.
Commit messages must start with a capitalized and short summary (max. 50 chars)
written in the imperative, followed by an optional, more detailed explanatory
text which is separated from the summary by an empty line.
Code review comments may be added to your pull request. Discuss, then make the
suggested modifications and push additional commits to your feature branch. Post
a comment after pushing. New commits show up in the pull request automatically,
but the reviewers are notified only when you comment.
Pull requests must be cleanly rebased on top of master without multiple branches
mixed into the PR.
**Git tip**: If your PR no longer merges cleanly, use `rebase master` in your
feature branch to update your pull request rather than `merge master`.
Before you make a pull request, squash your commits into logical units of work
using `git rebase -i` and `git push -f`. A logical unit of work is a consistent
set of patches that should be reviewed together: for example, upgrading the
version of a vendored dependency and taking advantage of its now available new
feature constitute two separate units of work. Implementing a new function and
calling it in another file constitute a single logical unit of work. The very
high majority of submissions should have a single commit, so if in doubt: squash
down to one.
After every commit, make sure the test suite passes. Include documentation
changes in the same pull request so that a revert would remove all traces of
the feature or fix.
Include an issue reference like `Closes #XXXX` or `Fixes #XXXX` in the pull request
description that close an issue. Including references automatically closes the issue
on a merge.
Please do not add yourself to the `AUTHORS` file, as it is regenerated regularly
from the Git history.
Please see the [Coding Style](#coding-style) for further guidelines.
### Merge approval
Docker maintainers use LGTM (Looks Good To Me) in comments on the code review to
indicate acceptance.
A change requires LGTMs from an absolute majority of the maintainers of each
component affected. For example, if a change affects `docs/` and `registry/`, it
needs an absolute majority from the maintainers of `docs/` AND, separately, an
absolute majority of the maintainers of `registry/`.
For more details, see the [MAINTAINERS](MAINTAINERS) page.
### Sign your work
The sign-off is a simple line at the end of the explanation for the patch. Your
signature certifies that you wrote the patch or otherwise have the right to pass
it on as an open-source patch. The rules are pretty simple: if you can certify
the below (from [developercertificate.org](http://developercertificate.org/)):
```
Developer Certificate of Origin
Version 1.1
Copyright (C) 2004, 2006 The Linux Foundation and its contributors.
660 York Street, Suite 102,
San Francisco, CA 94110 USA
Everyone is permitted to copy and distribute verbatim copies of this
license document, but changing it is not allowed.
Developer's Certificate of Origin 1.1
By making a contribution to this project, I certify that:
(a) The contribution was created in whole or in part by me and I
have the right to submit it under the open source license
indicated in the file; or
(b) The contribution is based upon previous work that, to the best
of my knowledge, is covered under an appropriate open source
license and I have the right under that license to submit that
work with modifications, whether created in whole or in part
by me, under the same open source license (unless I am
permitted to submit under a different license), as indicated
in the file; or
(c) The contribution was provided directly to me by some other
person who certified (a), (b) or (c) and I have not modified
it.
(d) I understand and agree that this project and the contribution
are public and that a record of the contribution (including all
personal information I submit with it, including my sign-off) is
maintained indefinitely and may be redistributed consistent with
this project or the open source license(s) involved.
```
Then you just add a line to every git commit message:
Signed-off-by: Joe Smith <joe.smith@email.com>
Use your real name (sorry, no pseudonyms or anonymous contributions.)
If you set your `user.name` and `user.email` git configs, you can sign your
commit automatically with `git commit -s`.
### How can I become a maintainer?
The procedures for adding new maintainers are explained in the
global [MAINTAINERS](https://github.com/docker/opensource/blob/master/MAINTAINERS)
file in the [https://github.com/docker/opensource/](https://github.com/docker/opensource/)
repository.
Don't forget: being a maintainer is a time investment. Make sure you
will have time to make yourself available. You don't have to be a
maintainer to make a difference on the project!
## Docker community guidelines
We want to keep the Docker community awesome, growing and collaborative. We need
your help to keep it that way. To help with this we've come up with some general
guidelines for the community as a whole:
* Be nice: Be courteous, respectful and polite to fellow community members:
no regional, racial, gender, or other abuse will be tolerated. We like
nice people way better than mean ones!
* Encourage diversity and participation: Make everyone in our community feel
welcome, regardless of their background and the extent of their
contributions, and do everything possible to encourage participation in
our community.
* Keep it legal: Basically, don't get us in trouble. Share only content that
you own, do not share private or sensitive information, and don't break
the law.
* Stay on topic: Make sure that you are posting to the correct channel and
avoid off-topic discussions. Remember when you update an issue or respond
to an email you are potentially sending to a large number of people. Please
consider this before you update. Also remember that nobody likes spam.
* Don't send email to the maintainers: There's no need to send email to the
maintainers to ask them to investigate an issue or to take a look at a
pull request. Instead of sending an email, GitHub mentions should be
used to ping maintainers to review a pull request, a proposal or an
issue.
### Guideline violations — 3 strikes method
The point of this section is not to find opportunities to punish people, but we
do need a fair way to deal with people who are making our community suck.
1. First occurrence: We'll give you a friendly, but public reminder that the
behavior is inappropriate according to our guidelines.
2. Second occurrence: We will send you a private message with a warning that
any additional violations will result in removal from the community.
3. Third occurrence: Depending on the violation, we may need to delete or ban
your account.
**Notes:**
* Obvious spammers are banned on first occurrence. If we don't do this, we'll
have spam all over the place.
* Violations are forgiven after 6 months of good behavior, and we won't hold a
grudge.
* People who commit minor infractions will get some education, rather than
hammering them in the 3 strikes process.
* The rules apply equally to everyone in the community, no matter how much
you've contributed.
* Extreme violations of a threatening, abusive, destructive or illegal nature
will be addressed immediately and are not subject to 3 strikes or forgiveness.
* Contact abuse@docker.com to report abuse or appeal violations. In the case of
appeals, we know that mistakes happen, and we'll work with you to come up with a
fair solution if there has been a misunderstanding.
## Coding Style
Unless explicitly stated, we follow all coding guidelines from the Go
community. While some of these standards may seem arbitrary, they somehow seem
to result in a solid, consistent codebase.
It is possible that the code base does not currently comply with these
guidelines. We are not looking for a massive PR that fixes this, since that
goes against the spirit of the guidelines. All new contributions should make a
best effort to clean up and make the code base better than they left it.
Obviously, apply your best judgement. Remember, the goal here is to make the
code base easier for humans to navigate and understand. Always keep that in
mind when nudging others to comply.
The rules:
1. All code should be formatted with `gofmt -s`.
2. All code should pass the default levels of
[`golint`](https://github.com/golang/lint).
3. All code should follow the guidelines covered in [Effective
Go](http://golang.org/doc/effective_go.html) and [Go Code Review
Comments](https://github.com/golang/go/wiki/CodeReviewComments).
4. Comment the code. Tell us the why, the history and the context.
5. Document _all_ declarations and methods, even private ones. Declare
expectations, caveats and anything else that may be important. If a type
gets exported, having the comments already there will ensure it's ready.
6. Variable name length should be proportional to its context and no longer.
`noCommaALongVariableNameLikeThisIsNotMoreClearWhenASimpleCommentWouldDo`.
In practice, short methods will have short variable names and globals will
have longer names.
7. No underscores in package names. If you need a compound name, step back,
and re-examine why you need a compound name. If you still think you need a
compound name, lose the underscore.
8. No utils or helpers packages. If a function is not general enough to
warrant its own package, it has not been written generally enough to be a
part of a util package. Just leave it unexported and well-documented.
9. All tests should run with `go test` and outside tooling should not be
required. No, we don't need another unit testing framework. Assertion
packages are acceptable if they provide _real_ incremental value.
10. Even though we call these "rules" above, they are actually just
guidelines. Since you've read all the rules, you now know that.
If you are having trouble getting into the mood of idiomatic Go, we recommend
reading through [Effective Go](https://golang.org/doc/effective_go.html). The
[Go Blog](https://blog.golang.org) is also a great resource. Drinking the
kool-aid is a lot easier than going thirsty.

12
components/cli/Jenkinsfile vendored Normal file
View File

@ -0,0 +1,12 @@
wrappedNode(label: 'linux && x86_64', cleanWorkspace: true) {
timeout(time: 60, unit: 'MINUTES') {
stage "Git Checkout"
checkout scm
stage "Run end-to-end test suite"
sh "docker version"
sh "E2E_UNIQUE_ID=clie2e${BUILD_NUMBER} \
IMAGE_TAG=clie2e${BUILD_NUMBER} \
make -f docker.Makefile test-e2e"
}
}

View File

@ -27,6 +27,7 @@
people = [
"aaronlehmann",
"albers",
"aluzzardi",
"anusha",
"cpuguy83",
@ -84,6 +85,11 @@
Email = "aaron.lehmann@docker.com"
GitHub = "aaronlehmann"
[people.albers]
Name = "Harald Albers"
Email = "github@albersweb.de"
GitHub = "albers"
[people.aluzzardi]
Name = "Andrea Luzzardi"
Email = "al@docker.com"

View File

@ -3,64 +3,83 @@
#
all: binary
# remove build artifacts
_:=$(shell ./scripts/warn-outside-container $(MAKECMDGOALS))
.PHONY: clean
clean:
clean: ## remove build artifacts
rm -rf ./build/* cli/winresources/rsrc_* ./man/man[1-9] docs/yaml/gen
# run go test
# the "-tags daemon" part is temporary
.PHONY: test-unit
test-unit: ## run unit test
./scripts/test/unit $(shell go list ./... | grep -vE '/vendor/|/e2e/')
.PHONY: test
test:
./scripts/test/unit $(shell go list ./... | grep -v '/vendor/')
test: test-unit ## run tests
.PHONY: test-coverage
test-coverage:
./scripts/test/unit-with-coverage $(shell go list ./... | grep -v '/vendor/')
test-coverage: ## run test coverage
./scripts/test/unit-with-coverage $(shell go list ./... | grep -vE '/vendor/|/e2e/')
.PHONY: lint
lint:
lint: ## run all the lint tools
gometalinter --config gometalinter.json ./...
.PHONY: binary
binary:
binary: ## build executable for Linux
@echo "WARNING: binary creates a Linux executable. Use cross for macOS or Windows."
./scripts/build/binary
.PHONY: cross
cross:
cross: ## build executable for macOS and Windows
./scripts/build/cross
.PHONY: binary-windows
binary-windows: ## build executable for Windows
./scripts/build/windows
.PHONY: binary-osx
binary-osx: ## build executable for macOS
./scripts/build/osx
.PHONY: dynbinary
dynbinary:
dynbinary: ## build dynamically linked binary
./scripts/build/dynbinary
.PHONY: watch
watch:
watch: ## monitor file changes and run go test
./scripts/test/watch
# Check vendor matches vendor.conf
vendor: vendor.conf
vendor: vendor.conf ## check that vendor matches vendor.conf
vndr 2> /dev/null
scripts/validate/check-git-diff vendor
## generate man pages from go source and markdown
.PHONY: manpages
manpages:
manpages: ## generate man pages from go source and markdown
scripts/docs/generate-man.sh
## generate documentation YAML files consumed by docs repo
.PHONY: yamldocs
yamldocs:
yamldocs: ## generate documentation YAML files consumed by docs repo
scripts/docs/generate-yaml.sh
## Shellcheck validation
.PHONY: shellcheck
shellcheck:
shellcheck: ## run shellcheck validation
scripts/validate/shellcheck
.PHONY: help
help: ## print this help
@awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {sub("\\\\n",sprintf("\n%22c"," "), $$2);printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST)
cli/compose/schema/bindata.go: cli/compose/schema/data/*.json
go generate github.com/docker/cli/cli/compose/schema
compose-jsonschema: cli/compose/schema/bindata.go
scripts/validate/check-git-diff cli/compose/schema/bindata.go
.PHONY: ci-validate
ci-validate:
time make -B vendor
time make -B compose-jsonschema
time make manpages
time make yamldocs

View File

@ -1,4 +1,4 @@
[![build status](https://circleci.com/gh/docker/cli.svg?style=shield)](https://circleci.com/gh/docker/cli/tree/master)
[![build status](https://circleci.com/gh/docker/cli.svg?style=shield)](https://circleci.com/gh/docker/cli/tree/master) [![Build Status](https://jenkins.dockerproject.org/job/docker/job/cli/job/master/badge/icon)](https://jenkins.dockerproject.org/job/docker/job/cli/job/master/)
docker/cli
==========
@ -29,6 +29,12 @@ Run all linting:
$ make -f docker.Makefile lint
```
List all the available targets:
```
$ make help
```
### In-container development environment
Start an interactive development environment:

87
components/cli/TESTING.md Normal file
View File

@ -0,0 +1,87 @@
# Testing
The following guidelines summarize the testing policy for docker/cli.
## Unit Test Suite
All code changes should have unit test coverage.
Error cases should be tested with unit tests.
Bug fixes should be covered by new unit tests or additional assertions in
existing unit tests.
### Details
The unit test suite follows the standard Go testing convention. Tests are
located in the package directory in `_test.go` files.
Unit tests should be named using the convention:
```
Test<Function Name><Test Case Name>
```
[Table tests](https://github.com/golang/go/wiki/TableDrivenTests) should be used
where appropriate, but may not be appropriate in all cases.
Assertions should be made using
[testify/assert](https://godoc.org/github.com/stretchr/testify/assert) and test
requirements should be verified using
[testify/require](https://godoc.org/github.com/stretchr/testify/require).
Fakes, and testing utilities can be found in
[internal/test](https://godoc.org/github.com/docker/cli/internal/test) and
[gotestyourself](https://godoc.org/github.com/gotestyourself/gotestyourself).
## End-to-End Test Suite
The end-to-end test suite tests a cli binary against a real API backend.
### Guidelines
Each feature (subcommand) should have a single end-to-end test for
the success case. The test should include all (or most) flags/options supported
by that feature.
In some rare cases a couple additional end-to-end tests may be written for a
sufficiently complex and critical feature (ex: `container run`, `service
create`, `service update`, and `docker build` may have ~3-5 cases each).
In some rare cases a sufficiently critical error paths may have a single
end-to-end test case.
In all other cases the behaviour should be covered by unit tests.
If a code change adds a new flag, that flag should be added to the existing
"success case" end-to-end test.
If a code change fixes a bug, that bug fix should be covered either by adding
assertions to the existing end-to-end test, or with one or more unit test.
### Details
The end-to-end test suite is located in
[./e2e](https://github.com/docker/cli/tree/master/e2e). Each directory in `e2e`
corresponds to a directory in `cli/command` and contains the tests for that
subcommand. Files in each directory should be named `<command>_test.go` where
command is the basename of the command (ex: the test for `docker stack deploy`
is found in `e2e/stack/deploy_test.go`).
Tests should be named using the convention:
```
Test<Command Basename>[<Test Case Name>]
```
where the test case name is only required when there are multiple test cases for
a single command.
End-to-end test should run the `docker` binary using
[gotestyourself/icmd](https://godoc.org/github.com/gotestyourself/gotestyourself/icmd)
and make assertions about the exit code, stdout, stderr, and local file system.
Any Docker image or registry operations should use `registry:5000/<image name>`
to communicate with the local instance of the Docker registry. To load
additional fixture images to the registry see
[scripts/test/e2e/run](https://github.com/docker/cli/blob/master/scripts/test/e2e/run).

View File

@ -1 +1 @@
17.07.0-ce-rc4
17.10.0-ce-rc1

View File

@ -71,7 +71,8 @@ jobs:
test-$CIRCLE_BUILD_NUM:/go/src/github.com/docker/cli/coverage.txt \
coverage.txt
apk add -U bash curl
curl -s https://codecov.io/bash | bash
curl -s https://codecov.io/bash | bash || \
echo 'Codecov failed to upload'
validate:
working_directory: /work
@ -89,7 +90,7 @@ jobs:
rm -f .dockerignore # include .git
docker build -f $dockerfile --tag cli-builder-with-git:$CIRCLE_BUILD_NUM .
docker run --rm cli-builder-with-git:$CIRCLE_BUILD_NUM \
make -B vendor compose-jsonschema manpages yamldocs
make ci-validate
shellcheck:
working_directory: /work
docker: [{image: 'docker:17.06-git'}]
@ -103,7 +104,7 @@ jobs:
echo "COPY . ." >> $dockerfile
docker build -f $dockerfile --tag cli-validator:$CIRCLE_BUILD_NUM .
docker run --rm cli-validator:$CIRCLE_BUILD_NUM \
make -B shellcheck
make shellcheck
workflows:
version: 2
ci:

View File

@ -5,9 +5,9 @@ import (
"strings"
"testing"
"github.com/docker/cli/cli/internal/test"
"github.com/docker/cli/internal/test"
"github.com/docker/cli/internal/test/testutil"
"github.com/docker/docker/api/types"
"github.com/docker/docker/pkg/testutil"
"github.com/pkg/errors"
"github.com/stretchr/testify/assert"
)
@ -20,11 +20,11 @@ func TestCheckpointCreateErrors(t *testing.T) {
}{
{
args: []string{"too-few-arguments"},
expectedError: "requires exactly 2 argument(s)",
expectedError: "requires exactly 2 arguments",
},
{
args: []string{"too", "many", "arguments"},
expectedError: "requires exactly 2 argument(s)",
expectedError: "requires exactly 2 arguments",
},
{
args: []string{"foo", "bar"},

View File

@ -1,14 +1,13 @@
package checkpoint
import (
"bytes"
"io/ioutil"
"testing"
"github.com/docker/cli/cli/internal/test"
"github.com/docker/cli/internal/test"
"github.com/docker/cli/internal/test/testutil"
"github.com/docker/docker/api/types"
"github.com/docker/docker/pkg/testutil"
"github.com/docker/docker/pkg/testutil/golden"
"github.com/gotestyourself/gotestyourself/golden"
"github.com/pkg/errors"
"github.com/stretchr/testify/assert"
)
@ -37,9 +36,9 @@ func TestCheckpointListErrors(t *testing.T) {
}
for _, tc := range testCases {
cli := test.NewFakeCliWithOutput(&fakeClient{
cli := test.NewFakeCli(&fakeClient{
checkpointListFunc: tc.checkpointListFunc,
}, &bytes.Buffer{})
})
cmd := newListCommand(cli)
cmd.SetArgs(tc.args)
cmd.SetOutput(ioutil.Discard)
@ -49,8 +48,7 @@ func TestCheckpointListErrors(t *testing.T) {
func TestCheckpointListWithOptions(t *testing.T) {
var containerID, checkpointDir string
buf := new(bytes.Buffer)
cli := test.NewFakeCliWithOutput(&fakeClient{
cli := test.NewFakeCli(&fakeClient{
checkpointListFunc: func(container string, options types.CheckpointListOptions) ([]types.Checkpoint, error) {
containerID = container
checkpointDir = options.CheckpointDir
@ -58,14 +56,12 @@ func TestCheckpointListWithOptions(t *testing.T) {
{Name: "checkpoint-foo"},
}, nil
},
}, buf)
})
cmd := newListCommand(cli)
cmd.SetArgs([]string{"container-foo"})
cmd.Flags().Set("checkpoint-dir", "/dir/foo")
assert.NoError(t, cmd.Execute())
assert.Equal(t, "container-foo", containerID)
assert.Equal(t, "/dir/foo", checkpointDir)
actual := buf.String()
expected := golden.Get(t, []byte(actual), "checkpoint-list-with-options.golden")
testutil.EqualNormalizedString(t, testutil.RemoveSpace, actual, string(expected))
golden.Assert(t, cli.OutBuffer().String(), "checkpoint-list-with-options.golden")
}

View File

@ -1,13 +1,12 @@
package checkpoint
import (
"bytes"
"io/ioutil"
"testing"
"github.com/docker/cli/cli/internal/test"
"github.com/docker/cli/internal/test"
"github.com/docker/cli/internal/test/testutil"
"github.com/docker/docker/api/types"
"github.com/docker/docker/pkg/testutil"
"github.com/pkg/errors"
"github.com/stretchr/testify/assert"
)
@ -20,11 +19,11 @@ func TestCheckpointRemoveErrors(t *testing.T) {
}{
{
args: []string{"too-few-arguments"},
expectedError: "requires exactly 2 argument(s)",
expectedError: "requires exactly 2 arguments",
},
{
args: []string{"too", "many", "arguments"},
expectedError: "requires exactly 2 argument(s)",
expectedError: "requires exactly 2 arguments",
},
{
args: []string{"foo", "bar"},
@ -36,9 +35,9 @@ func TestCheckpointRemoveErrors(t *testing.T) {
}
for _, tc := range testCases {
cli := test.NewFakeCliWithOutput(&fakeClient{
cli := test.NewFakeCli(&fakeClient{
checkpointDeleteFunc: tc.checkpointDeleteFunc,
}, &bytes.Buffer{})
})
cmd := newRemoveCommand(cli)
cmd.SetArgs(tc.args)
cmd.SetOutput(ioutil.Discard)
@ -48,14 +47,14 @@ func TestCheckpointRemoveErrors(t *testing.T) {
func TestCheckpointRemoveWithOptions(t *testing.T) {
var containerID, checkpointID, checkpointDir string
cli := test.NewFakeCliWithOutput(&fakeClient{
cli := test.NewFakeCli(&fakeClient{
checkpointDeleteFunc: func(container string, options types.CheckpointDeleteOptions) error {
containerID = container
checkpointID = options.CheckpointID
checkpointDir = options.CheckpointDir
return nil
},
}, &bytes.Buffer{})
})
cmd := newRemoveCommand(cli)
cmd.SetArgs([]string{"container-foo", "checkpoint-bar"})
cmd.Flags().Set("checkpoint-dir", "/dir/foo")

View File

@ -12,11 +12,14 @@ import (
cliconfig "github.com/docker/cli/cli/config"
"github.com/docker/cli/cli/config/configfile"
cliflags "github.com/docker/cli/cli/flags"
"github.com/docker/cli/cli/trust"
dopts "github.com/docker/cli/opts"
"github.com/docker/docker/api"
"github.com/docker/docker/client"
"github.com/docker/go-connections/sockets"
"github.com/docker/go-connections/tlsconfig"
"github.com/docker/notary"
notaryclient "github.com/docker/notary/client"
"github.com/docker/notary/passphrase"
"github.com/pkg/errors"
"github.com/spf13/cobra"
@ -39,6 +42,7 @@ type Cli interface {
SetIn(in *InStream)
ConfigFile() *configfile.ConfigFile
ServerInfo() ServerInfo
NotaryClient(imgRefAndAuth trust.ImageRefAndAuth, actions []string) (notaryclient.Repository, error)
}
// DockerCli is an instance the docker command line client.
@ -111,44 +115,58 @@ func (cli *DockerCli) Initialize(opts *cliflags.ClientOptions) error {
var err error
cli.client, err = NewAPIClientFromFlags(opts.Common, cli.configFile)
if tlsconfig.IsErrEncryptedKey(err) {
var (
passwd string
giveup bool
)
passRetriever := passphrase.PromptRetrieverWithInOut(cli.In(), cli.Out(), nil)
for attempts := 0; tlsconfig.IsErrEncryptedKey(err); attempts++ {
// some code and comments borrowed from notary/trustmanager/keystore.go
passwd, giveup, err = passRetriever("private", "encrypted TLS private", false, attempts)
// Check if the passphrase retriever got an error or if it is telling us to give up
if giveup || err != nil {
return errors.Wrap(err, "private key is encrypted, but could not get passphrase")
}
opts.Common.TLSOptions.Passphrase = passwd
cli.client, err = NewAPIClientFromFlags(opts.Common, cli.configFile)
newClient := func(password string) (client.APIClient, error) {
opts.Common.TLSOptions.Passphrase = password
return NewAPIClientFromFlags(opts.Common, cli.configFile)
}
cli.client, err = getClientWithPassword(passRetriever, newClient)
}
if err != nil {
return err
}
cli.initializeFromClient()
return nil
}
func (cli *DockerCli) initializeFromClient() {
cli.defaultVersion = cli.client.ClientVersion()
if ping, err := cli.client.Ping(context.Background()); err == nil {
cli.server = ServerInfo{
HasExperimental: ping.Experimental,
OSType: ping.OSType,
}
cli.client.NegotiateAPIVersionPing(ping)
} else {
ping, err := cli.client.Ping(context.Background())
if err != nil {
// Default to true if we fail to connect to daemon
cli.server = ServerInfo{HasExperimental: true}
if ping.APIVersion != "" {
cli.client.NegotiateAPIVersionPing(ping)
}
return
}
return nil
cli.server = ServerInfo{
HasExperimental: ping.Experimental,
OSType: ping.OSType,
}
cli.client.NegotiateAPIVersionPing(ping)
}
func getClientWithPassword(passRetriever notary.PassRetriever, newClient func(password string) (client.APIClient, error)) (client.APIClient, error) {
for attempts := 0; ; attempts++ {
passwd, giveup, err := passRetriever("private", "encrypted TLS private", false, attempts)
if giveup || err != nil {
return nil, errors.Wrap(err, "private key is encrypted, but could not get passphrase")
}
apiclient, err := newClient(passwd)
if !tlsconfig.IsErrEncryptedKey(err) {
return apiclient, err
}
}
}
// NotaryClient provides a Notary Repository to interact with signed metadata for an image
func (cli *DockerCli) NotaryClient(imgRefAndAuth trust.ImageRefAndAuth, actions []string) (notaryclient.Repository, error) {
return trust.GetNotaryRepository(cli.In(), cli.Out(), UserAgent(), imgRefAndAuth.RepoInfo(), imgRefAndAuth.AuthConfig(), actions...)
}
// ServerInfo stores details about the supported features and platform of the

View File

@ -0,0 +1,198 @@
package command
import (
"os"
"testing"
"crypto/x509"
"github.com/docker/cli/cli/config/configfile"
"github.com/docker/cli/cli/flags"
"github.com/docker/cli/internal/test/testutil"
"github.com/docker/docker/api"
"github.com/docker/docker/api/types"
"github.com/docker/docker/client"
"github.com/pkg/errors"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"golang.org/x/net/context"
)
func TestNewAPIClientFromFlags(t *testing.T) {
host := "unix://path"
opts := &flags.CommonOptions{Hosts: []string{host}}
configFile := &configfile.ConfigFile{
HTTPHeaders: map[string]string{
"My-Header": "Custom-Value",
},
}
apiclient, err := NewAPIClientFromFlags(opts, configFile)
require.NoError(t, err)
assert.Equal(t, host, apiclient.DaemonHost())
expectedHeaders := map[string]string{
"My-Header": "Custom-Value",
"User-Agent": UserAgent(),
}
assert.Equal(t, expectedHeaders, apiclient.(*client.Client).CustomHTTPHeaders())
assert.Equal(t, api.DefaultVersion, apiclient.ClientVersion())
}
func TestNewAPIClientFromFlagsWithAPIVersionFromEnv(t *testing.T) {
customVersion := "v3.3.3"
defer patchEnvVariable(t, "DOCKER_API_VERSION", customVersion)()
opts := &flags.CommonOptions{}
configFile := &configfile.ConfigFile{}
apiclient, err := NewAPIClientFromFlags(opts, configFile)
require.NoError(t, err)
assert.Equal(t, customVersion, apiclient.ClientVersion())
}
// TODO: use gotestyourself/env.Patch
func patchEnvVariable(t *testing.T, key, value string) func() {
oldValue, ok := os.LookupEnv(key)
require.NoError(t, os.Setenv(key, value))
return func() {
if !ok {
require.NoError(t, os.Unsetenv(key))
return
}
require.NoError(t, os.Setenv(key, oldValue))
}
}
type fakeClient struct {
client.Client
pingFunc func() (types.Ping, error)
version string
negotiated bool
}
func (c *fakeClient) Ping(_ context.Context) (types.Ping, error) {
return c.pingFunc()
}
func (c *fakeClient) ClientVersion() string {
return c.version
}
func (c *fakeClient) NegotiateAPIVersionPing(types.Ping) {
c.negotiated = true
}
func TestInitializeFromClient(t *testing.T) {
defaultVersion := "v1.55"
var testcases = []struct {
doc string
pingFunc func() (types.Ping, error)
expectedServer ServerInfo
negotiated bool
}{
{
doc: "successful ping",
pingFunc: func() (types.Ping, error) {
return types.Ping{Experimental: true, OSType: "linux", APIVersion: "v1.30"}, nil
},
expectedServer: ServerInfo{HasExperimental: true, OSType: "linux"},
negotiated: true,
},
{
doc: "failed ping, no API version",
pingFunc: func() (types.Ping, error) {
return types.Ping{}, errors.New("failed")
},
expectedServer: ServerInfo{HasExperimental: true},
},
{
doc: "failed ping, with API version",
pingFunc: func() (types.Ping, error) {
return types.Ping{APIVersion: "v1.33"}, errors.New("failed")
},
expectedServer: ServerInfo{HasExperimental: true},
negotiated: true,
},
}
for _, testcase := range testcases {
t.Run(testcase.doc, func(t *testing.T) {
apiclient := &fakeClient{
pingFunc: testcase.pingFunc,
version: defaultVersion,
}
cli := &DockerCli{client: apiclient}
cli.initializeFromClient()
assert.Equal(t, defaultVersion, cli.defaultVersion)
assert.Equal(t, testcase.expectedServer, cli.server)
assert.Equal(t, testcase.negotiated, apiclient.negotiated)
})
}
}
func TestGetClientWithPassword(t *testing.T) {
expected := "password"
var testcases = []struct {
doc string
password string
retrieverErr error
retrieverGiveup bool
newClientErr error
expectedErr string
}{
{
doc: "successful connect",
password: expected,
},
{
doc: "password retriever exhausted",
retrieverGiveup: true,
retrieverErr: errors.New("failed"),
expectedErr: "private key is encrypted, but could not get passphrase",
},
{
doc: "password retriever error",
retrieverErr: errors.New("failed"),
expectedErr: "failed",
},
{
doc: "newClient error",
newClientErr: errors.New("failed to connect"),
expectedErr: "failed to connect",
},
}
for _, testcase := range testcases {
t.Run(testcase.doc, func(t *testing.T) {
passRetriever := func(_, _ string, _ bool, attempts int) (passphrase string, giveup bool, err error) {
// Always return an invalid pass first to test iteration
switch attempts {
case 0:
return "something else", false, nil
default:
return testcase.password, testcase.retrieverGiveup, testcase.retrieverErr
}
}
newClient := func(currentPassword string) (client.APIClient, error) {
if testcase.newClientErr != nil {
return nil, testcase.newClientErr
}
if currentPassword == expected {
return &client.Client{}, nil
}
return &client.Client{}, x509.IncorrectPasswordError
}
_, err := getClientWithPassword(passRetriever, newClient)
if testcase.expectedErr != "" {
testutil.ErrorContains(t, err, testcase.expectedErr)
return
}
assert.NoError(t, err)
})
}
}

View File

@ -17,6 +17,7 @@ import (
"github.com/docker/cli/cli/command/stack"
"github.com/docker/cli/cli/command/swarm"
"github.com/docker/cli/cli/command/system"
"github.com/docker/cli/cli/command/trust"
"github.com/docker/cli/cli/command/volume"
"github.com/spf13/cobra"
)
@ -69,6 +70,9 @@ func AddCommands(cmd *cobra.Command, dockerCli *command.DockerCli) {
// swarm
swarm.NewSwarmCommand(dockerCli),
// trust
trust.NewTrustCommand(dockerCli),
// volume
volume.NewVolumeCommand(dockerCli),

View File

@ -7,11 +7,11 @@ import (
"strings"
"testing"
"github.com/docker/cli/cli/internal/test"
"github.com/docker/cli/internal/test"
"github.com/docker/cli/internal/test/testutil"
"github.com/docker/docker/api/types"
"github.com/docker/docker/api/types/swarm"
"github.com/docker/docker/pkg/testutil"
"github.com/docker/docker/pkg/testutil/golden"
"github.com/gotestyourself/gotestyourself/golden"
"github.com/pkg/errors"
"github.com/stretchr/testify/assert"
)
@ -26,10 +26,10 @@ func TestConfigCreateErrors(t *testing.T) {
}{
{
args: []string{"too_few"},
expectedError: "requires exactly 2 argument(s)",
expectedError: "requires exactly 2 arguments",
},
{args: []string{"too", "many", "arguments"},
expectedError: "requires exactly 2 argument(s)",
expectedError: "requires exactly 2 arguments",
},
{
args: []string{"name", filepath.Join("testdata", configDataFile)},
@ -71,8 +71,7 @@ func TestConfigCreateWithName(t *testing.T) {
cmd := newConfigCreateCommand(cli)
cmd.SetArgs([]string{name, filepath.Join("testdata", configDataFile)})
assert.NoError(t, cmd.Execute())
expected := golden.Get(t, actual, configDataFile)
assert.Equal(t, string(expected), string(actual))
golden.Assert(t, string(actual), configDataFile)
assert.Equal(t, "ID-"+name, strings.TrimSpace(cli.OutBuffer().String()))
}

View File

@ -1,19 +1,18 @@
package config
import (
"bytes"
"fmt"
"io/ioutil"
"testing"
"time"
"github.com/docker/cli/cli/internal/test"
"github.com/docker/cli/internal/test"
"github.com/docker/docker/api/types/swarm"
"github.com/pkg/errors"
// Import builders to get the builder function as package function
. "github.com/docker/cli/cli/internal/test/builders"
"github.com/docker/docker/pkg/testutil"
"github.com/docker/docker/pkg/testutil/golden"
. "github.com/docker/cli/internal/test/builders"
"github.com/docker/cli/internal/test/testutil"
"github.com/gotestyourself/gotestyourself/golden"
"github.com/stretchr/testify/assert"
)
@ -53,11 +52,10 @@ func TestConfigInspectErrors(t *testing.T) {
},
}
for _, tc := range testCases {
buf := new(bytes.Buffer)
cmd := newConfigInspectCommand(
test.NewFakeCliWithOutput(&fakeClient{
test.NewFakeCli(&fakeClient{
configInspectFunc: tc.configInspectFunc,
}, buf),
}),
)
cmd.SetArgs(tc.args)
for key, value := range tc.flags {
@ -95,17 +93,11 @@ func TestConfigInspectWithoutFormat(t *testing.T) {
},
}
for _, tc := range testCases {
buf := new(bytes.Buffer)
cmd := newConfigInspectCommand(
test.NewFakeCliWithOutput(&fakeClient{
configInspectFunc: tc.configInspectFunc,
}, buf),
)
cli := test.NewFakeCli(&fakeClient{configInspectFunc: tc.configInspectFunc})
cmd := newConfigInspectCommand(cli)
cmd.SetArgs(tc.args)
assert.NoError(t, cmd.Execute())
actual := buf.String()
expected := golden.Get(t, []byte(actual), fmt.Sprintf("config-inspect-without-format.%s.golden", tc.name))
testutil.EqualNormalizedString(t, testutil.RemoveSpace, actual, string(expected))
golden.Assert(t, cli.OutBuffer().String(), fmt.Sprintf("config-inspect-without-format.%s.golden", tc.name))
}
}
@ -135,18 +127,14 @@ func TestConfigInspectWithFormat(t *testing.T) {
},
}
for _, tc := range testCases {
buf := new(bytes.Buffer)
cmd := newConfigInspectCommand(
test.NewFakeCliWithOutput(&fakeClient{
configInspectFunc: tc.configInspectFunc,
}, buf),
)
cli := test.NewFakeCli(&fakeClient{
configInspectFunc: tc.configInspectFunc,
})
cmd := newConfigInspectCommand(cli)
cmd.SetArgs(tc.args)
cmd.Flags().Set("format", tc.format)
assert.NoError(t, cmd.Execute())
actual := buf.String()
expected := golden.Get(t, []byte(actual), fmt.Sprintf("config-inspect-with-format.%s.golden", tc.name))
testutil.EqualNormalizedString(t, testutil.RemoveSpace, actual, string(expected))
golden.Assert(t, cli.OutBuffer().String(), fmt.Sprintf("config-inspect-with-format.%s.golden", tc.name))
}
}
@ -172,16 +160,14 @@ func TestConfigInspectPretty(t *testing.T) {
},
}
for _, tc := range testCases {
buf := new(bytes.Buffer)
cmd := newConfigInspectCommand(
test.NewFakeCliWithOutput(&fakeClient{
configInspectFunc: tc.configInspectFunc,
}, buf))
cli := test.NewFakeCli(&fakeClient{
configInspectFunc: tc.configInspectFunc,
})
cmd := newConfigInspectCommand(cli)
cmd.SetArgs([]string{"configID"})
cmd.Flags().Set("pretty", "true")
assert.NoError(t, cmd.Execute())
actual := buf.String()
expected := golden.Get(t, []byte(actual), fmt.Sprintf("config-inspect-pretty.%s.golden", tc.name))
testutil.EqualNormalizedString(t, testutil.RemoveSpace, actual, string(expected))
golden.Assert(t, cli.OutBuffer().String(), fmt.Sprintf("config-inspect-pretty.%s.golden", tc.name))
}
}

View File

@ -1,15 +1,27 @@
package config
import (
"sort"
"github.com/docker/cli/cli"
"github.com/docker/cli/cli/command"
"github.com/docker/cli/cli/command/formatter"
"github.com/docker/cli/opts"
"github.com/docker/docker/api/types"
"github.com/docker/docker/api/types/swarm"
"github.com/spf13/cobra"
"golang.org/x/net/context"
"vbom.ml/util/sortorder"
)
type byConfigName []swarm.Config
func (r byConfigName) Len() int { return len(r) }
func (r byConfigName) Swap(i, j int) { r[i], r[j] = r[j], r[i] }
func (r byConfigName) Less(i, j int) bool {
return sortorder.NaturalLess(r[i].Spec.Name, r[j].Spec.Name)
}
type listOptions struct {
quiet bool
format string
@ -55,6 +67,8 @@ func runConfigList(dockerCli command.Cli, options listOptions) error {
}
}
sort.Sort(byConfigName(configs))
configCtx := formatter.Context{
Output: dockerCli.Out(),
Format: formatter.NewConfigFormat(format, options.quiet),

View File

@ -6,14 +6,14 @@ import (
"time"
"github.com/docker/cli/cli/config/configfile"
"github.com/docker/cli/cli/internal/test"
"github.com/docker/cli/internal/test"
"github.com/docker/docker/api/types"
"github.com/docker/docker/api/types/swarm"
"github.com/pkg/errors"
// Import builders to get the builder function as package function
. "github.com/docker/cli/cli/internal/test/builders"
"github.com/docker/docker/pkg/testutil"
"github.com/docker/docker/pkg/testutil/golden"
. "github.com/docker/cli/internal/test/builders"
"github.com/docker/cli/internal/test/testutil"
"github.com/gotestyourself/gotestyourself/golden"
"github.com/stretchr/testify/assert"
)
@ -50,14 +50,20 @@ func TestConfigList(t *testing.T) {
cli := test.NewFakeCli(&fakeClient{
configListFunc: func(options types.ConfigListOptions) ([]swarm.Config, error) {
return []swarm.Config{
*Config(ConfigID("ID-foo"),
ConfigName("foo"),
*Config(ConfigID("ID-1-foo"),
ConfigName("1-foo"),
ConfigVersion(swarm.Version{Index: 10}),
ConfigCreatedAt(time.Now().Add(-2*time.Hour)),
ConfigUpdatedAt(time.Now().Add(-1*time.Hour)),
),
*Config(ConfigID("ID-bar"),
ConfigName("bar"),
*Config(ConfigID("ID-10-foo"),
ConfigName("10-foo"),
ConfigVersion(swarm.Version{Index: 11}),
ConfigCreatedAt(time.Now().Add(-2*time.Hour)),
ConfigUpdatedAt(time.Now().Add(-1*time.Hour)),
),
*Config(ConfigID("ID-2-foo"),
ConfigName("2-foo"),
ConfigVersion(swarm.Version{Index: 11}),
ConfigCreatedAt(time.Now().Add(-2*time.Hour)),
ConfigUpdatedAt(time.Now().Add(-1*time.Hour)),
@ -66,11 +72,8 @@ func TestConfigList(t *testing.T) {
},
})
cmd := newConfigListCommand(cli)
cmd.SetOutput(cli.OutBuffer())
assert.NoError(t, cmd.Execute())
actual := cli.OutBuffer().String()
expected := golden.Get(t, []byte(actual), "config-list.golden")
testutil.EqualNormalizedString(t, testutil.RemoveSpace, actual, string(expected))
golden.Assert(t, cli.OutBuffer().String(), "config-list-sort.golden")
}
func TestConfigListWithQuietOption(t *testing.T) {
@ -87,9 +90,7 @@ func TestConfigListWithQuietOption(t *testing.T) {
cmd := newConfigListCommand(cli)
cmd.Flags().Set("quiet", "true")
assert.NoError(t, cmd.Execute())
actual := cli.OutBuffer().String()
expected := golden.Get(t, []byte(actual), "config-list-with-quiet-option.golden")
testutil.EqualNormalizedString(t, testutil.RemoveSpace, actual, string(expected))
golden.Assert(t, cli.OutBuffer().String(), "config-list-with-quiet-option.golden")
}
func TestConfigListWithConfigFormat(t *testing.T) {
@ -108,9 +109,7 @@ func TestConfigListWithConfigFormat(t *testing.T) {
})
cmd := newConfigListCommand(cli)
assert.NoError(t, cmd.Execute())
actual := cli.OutBuffer().String()
expected := golden.Get(t, []byte(actual), "config-list-with-config-format.golden")
testutil.EqualNormalizedString(t, testutil.RemoveSpace, actual, string(expected))
golden.Assert(t, cli.OutBuffer().String(), "config-list-with-config-format.golden")
}
func TestConfigListWithFormat(t *testing.T) {
@ -127,9 +126,7 @@ func TestConfigListWithFormat(t *testing.T) {
cmd := newConfigListCommand(cli)
cmd.Flags().Set("format", "{{ .Name }} {{ .Labels }}")
assert.NoError(t, cmd.Execute())
actual := cli.OutBuffer().String()
expected := golden.Get(t, []byte(actual), "config-list-with-format.golden")
testutil.EqualNormalizedString(t, testutil.RemoveSpace, actual, string(expected))
golden.Assert(t, cli.OutBuffer().String(), "config-list-with-format.golden")
}
func TestConfigListWithFilter(t *testing.T) {
@ -157,7 +154,5 @@ func TestConfigListWithFilter(t *testing.T) {
cmd.Flags().Set("filter", "name=foo")
cmd.Flags().Set("filter", "label=lbl1=Label-bar")
assert.NoError(t, cmd.Execute())
actual := cli.OutBuffer().String()
expected := golden.Get(t, []byte(actual), "config-list-with-filter.golden")
testutil.EqualNormalizedString(t, testutil.RemoveSpace, actual, string(expected))
golden.Assert(t, cli.OutBuffer().String(), "config-list-with-filter.golden")
}

View File

@ -1,13 +1,12 @@
package config
import (
"bytes"
"io/ioutil"
"strings"
"testing"
"github.com/docker/cli/cli/internal/test"
"github.com/docker/docker/pkg/testutil"
"github.com/docker/cli/internal/test"
"github.com/docker/cli/internal/test/testutil"
"github.com/pkg/errors"
"github.com/stretchr/testify/assert"
)
@ -20,7 +19,7 @@ func TestConfigRemoveErrors(t *testing.T) {
}{
{
args: []string{},
expectedError: "requires at least 1 argument(s).",
expectedError: "requires at least 1 argument.",
},
{
args: []string{"foo"},
@ -31,11 +30,10 @@ func TestConfigRemoveErrors(t *testing.T) {
},
}
for _, tc := range testCases {
buf := new(bytes.Buffer)
cmd := newConfigRemoveCommand(
test.NewFakeCliWithOutput(&fakeClient{
test.NewFakeCli(&fakeClient{
configRemoveFunc: tc.configRemoveFunc,
}, buf),
}),
)
cmd.SetArgs(tc.args)
cmd.SetOutput(ioutil.Discard)
@ -45,27 +43,25 @@ func TestConfigRemoveErrors(t *testing.T) {
func TestConfigRemoveWithName(t *testing.T) {
names := []string{"foo", "bar"}
buf := new(bytes.Buffer)
var removedConfigs []string
cli := test.NewFakeCliWithOutput(&fakeClient{
cli := test.NewFakeCli(&fakeClient{
configRemoveFunc: func(name string) error {
removedConfigs = append(removedConfigs, name)
return nil
},
}, buf)
})
cmd := newConfigRemoveCommand(cli)
cmd.SetArgs(names)
assert.NoError(t, cmd.Execute())
assert.Equal(t, names, strings.Split(strings.TrimSpace(buf.String()), "\n"))
assert.Equal(t, names, strings.Split(strings.TrimSpace(cli.OutBuffer().String()), "\n"))
assert.Equal(t, names, removedConfigs)
}
func TestConfigRemoveContinueAfterError(t *testing.T) {
names := []string{"foo", "bar"}
buf := new(bytes.Buffer)
var removedConfigs []string
cli := test.NewFakeCliWithOutput(&fakeClient{
cli := test.NewFakeCli(&fakeClient{
configRemoveFunc: func(name string) error {
removedConfigs = append(removedConfigs, name)
if name == "foo" {
@ -73,7 +69,7 @@ func TestConfigRemoveContinueAfterError(t *testing.T) {
}
return nil
},
}, buf)
})
cmd := newConfigRemoveCommand(cli)
cmd.SetArgs(names)

View File

@ -1,8 +1,8 @@
ID: configID
Name: configName
ID: configID
Name: configName
Labels:
- lbl1=value1
Created at: 0001-01-01 00:00:00+0000 utc
Updated at: 0001-01-01 00:00:00+0000 utc
- lbl1=value1
Created at: 0001-01-01 00:00:00 +0000 utc
Updated at: 0001-01-01 00:00:00 +0000 utc
Data:
payload here

View File

@ -1,7 +1,7 @@
[
{
"ID": "ID-foo",
"Version": {},
"Version": {},
"CreatedAt": "0001-01-01T00:00:00Z",
"UpdatedAt": "0001-01-01T00:00:00Z",
"Spec": {
@ -13,7 +13,7 @@
},
{
"ID": "ID-bar",
"Version": {},
"Version": {},
"CreatedAt": "0001-01-01T00:00:00Z",
"UpdatedAt": "0001-01-01T00:00:00Z",
"Spec": {

View File

@ -1,9 +1,9 @@
[
{
"ID": "ID-foo",
"Version": {},
"CreatedAt": "0001-01-01T00:00:00Z",
"UpdatedAt": "0001-01-01T00:00:00Z",
"Version": {},
"CreatedAt": "0001-01-01T00:00:00Z",
"UpdatedAt": "0001-01-01T00:00:00Z",
"Spec": {
"Name": "foo",
"Labels": null

View File

@ -0,0 +1,4 @@
ID NAME CREATED UPDATED
ID-1-foo 1-foo 2 hours ago About an hour ago
ID-2-foo 2-foo 2 hours ago About an hour ago
ID-10-foo 10-foo 2 hours ago About an hour ago

View File

@ -1,2 +1,2 @@
foo
bar label=label-bar
foo

View File

@ -1,3 +1,3 @@
ID NAME CREATED UPDATED
ID-foo foo 2 hours ago About an hour ago
ID-bar bar 2 hours ago About an hour ago
ID-foo foo 2 hours ago About an hour ago

View File

@ -1,2 +1,2 @@
foo
bar label=label-bar
foo

View File

@ -1,2 +1,2 @@
ID-foo
ID-bar
ID-foo

View File

@ -1,3 +0,0 @@
ID NAME CREATED UPDATED
ID-foo foo 2 hours ago About an hour ago
ID-bar bar 2 hours ago About an hour ago

View File

@ -4,13 +4,13 @@ import (
"io"
"net/http/httputil"
"github.com/Sirupsen/logrus"
"github.com/docker/cli/cli"
"github.com/docker/cli/cli/command"
"github.com/docker/docker/api/types"
"github.com/docker/docker/client"
"github.com/docker/docker/pkg/signal"
"github.com/pkg/errors"
"github.com/sirupsen/logrus"
"github.com/spf13/cobra"
"golang.org/x/net/context"
)
@ -120,18 +120,7 @@ func runAttach(dockerCli command.Cli, opts *attachOptions) error {
}
if c.Config.Tty && dockerCli.Out().IsTerminal() {
height, width := dockerCli.Out().GetTtySize()
// To handle the case where a user repeatedly attaches/detaches without resizing their
// terminal, the only way to get the shell prompt to display for attaches 2+ is to artificially
// resize it, then go back to normal. Without this, every attach after the first will
// require the user to manually resize or hit enter.
resizeTtyTo(ctx, client, opts.container, height+1, width+1, false)
// After the above resizing occurs, the call to MonitorTtySize below will handle resetting back
// to the actual size.
if err := MonitorTtySize(ctx, dockerCli, opts.container, false); err != nil {
logrus.Debugf("Error monitoring TTY size: %s", err)
}
resizeTTY(ctx, dockerCli, opts.container)
}
streamer := hijackedIOStreamer{
@ -151,14 +140,36 @@ func runAttach(dockerCli command.Cli, opts *attachOptions) error {
if errAttach != nil {
return errAttach
}
return getExitStatus(ctx, dockerCli.Client(), opts.container)
}
_, status, err := getExitCode(ctx, dockerCli, opts.container)
if err != nil {
return err
func resizeTTY(ctx context.Context, dockerCli command.Cli, containerID string) {
height, width := dockerCli.Out().GetTtySize()
// To handle the case where a user repeatedly attaches/detaches without resizing their
// terminal, the only way to get the shell prompt to display for attaches 2+ is to artificially
// resize it, then go back to normal. Without this, every attach after the first will
// require the user to manually resize or hit enter.
resizeTtyTo(ctx, dockerCli.Client(), containerID, height+1, width+1, false)
// After the above resizing occurs, the call to MonitorTtySize below will handle resetting back
// to the actual size.
if err := MonitorTtySize(ctx, dockerCli, containerID, false); err != nil {
logrus.Debugf("Error monitoring TTY size: %s", err)
}
}
func getExitStatus(ctx context.Context, apiclient client.ContainerAPIClient, containerID string) error {
container, err := apiclient.ContainerInspect(ctx, containerID)
if err != nil {
// If we can't connect, then the daemon probably died.
if !client.IsErrConnectionFailed(err) {
return err
}
return cli.StatusError{StatusCode: -1}
}
status := container.State.ExitCode
if status != 0 {
return cli.StatusError{StatusCode: status}
}
return nil
}

View File

@ -4,10 +4,13 @@ import (
"io/ioutil"
"testing"
"github.com/docker/cli/cli/internal/test"
"github.com/docker/cli/cli"
"github.com/docker/cli/internal/test"
"github.com/docker/cli/internal/test/testutil"
"github.com/docker/docker/api/types"
"github.com/docker/docker/pkg/testutil"
"github.com/pkg/errors"
"github.com/stretchr/testify/assert"
"golang.org/x/net/context"
)
func TestNewAttachCommandErrors(t *testing.T) {
@ -67,9 +70,48 @@ func TestNewAttachCommandErrors(t *testing.T) {
},
}
for _, tc := range testCases {
cmd := NewAttachCommand(test.NewFakeCli(&fakeClient{containerInspectFunc: tc.containerInspectFunc}))
cmd := NewAttachCommand(test.NewFakeCli(&fakeClient{inspectFunc: tc.containerInspectFunc}))
cmd.SetOutput(ioutil.Discard)
cmd.SetArgs(tc.args)
testutil.ErrorContains(t, cmd.Execute(), tc.expectedError)
}
}
func TestGetExitStatus(t *testing.T) {
containerID := "the exec id"
expecatedErr := errors.New("unexpected error")
testcases := []struct {
inspectError error
exitCode int
expectedError error
}{
{
inspectError: nil,
exitCode: 0,
},
{
inspectError: expecatedErr,
expectedError: expecatedErr,
},
{
exitCode: 15,
expectedError: cli.StatusError{StatusCode: 15},
},
}
for _, testcase := range testcases {
client := &fakeClient{
inspectFunc: func(id string) (types.ContainerJSON, error) {
assert.Equal(t, containerID, id)
return types.ContainerJSON{
ContainerJSONBase: &types.ContainerJSONBase{
State: &types.ContainerState{ExitCode: testcase.exitCode},
},
}, testcase.inspectError
},
}
err := getExitStatus(context.Background(), client, containerID)
assert.Equal(t, testcase.expectedError, err)
}
}

View File

@ -1,19 +1,73 @@
package container
import (
"io"
"github.com/docker/docker/api/types"
"github.com/docker/docker/api/types/container"
"github.com/docker/docker/api/types/network"
"github.com/docker/docker/client"
"golang.org/x/net/context"
)
type fakeClient struct {
client.Client
containerInspectFunc func(string) (types.ContainerJSON, error)
inspectFunc func(string) (types.ContainerJSON, error)
execInspectFunc func(execID string) (types.ContainerExecInspect, error)
execCreateFunc func(container string, config types.ExecConfig) (types.IDResponse, error)
createContainerFunc func(config *container.Config, hostConfig *container.HostConfig, networkingConfig *network.NetworkingConfig, containerName string) (container.ContainerCreateCreatedBody, error)
imageCreateFunc func(parentReference string, options types.ImageCreateOptions) (io.ReadCloser, error)
infoFunc func() (types.Info, error)
}
func (cli *fakeClient) ContainerInspect(_ context.Context, containerID string) (types.ContainerJSON, error) {
if cli.containerInspectFunc != nil {
return cli.containerInspectFunc(containerID)
func (f *fakeClient) ContainerInspect(_ context.Context, containerID string) (types.ContainerJSON, error) {
if f.inspectFunc != nil {
return f.inspectFunc(containerID)
}
return types.ContainerJSON{}, nil
}
func (f *fakeClient) ContainerExecCreate(_ context.Context, container string, config types.ExecConfig) (types.IDResponse, error) {
if f.execCreateFunc != nil {
return f.execCreateFunc(container, config)
}
return types.IDResponse{}, nil
}
func (f *fakeClient) ContainerExecInspect(_ context.Context, execID string) (types.ContainerExecInspect, error) {
if f.execInspectFunc != nil {
return f.execInspectFunc(execID)
}
return types.ContainerExecInspect{}, nil
}
func (f *fakeClient) ContainerExecStart(ctx context.Context, execID string, config types.ExecStartCheck) error {
return nil
}
func (f *fakeClient) ContainerCreate(
_ context.Context,
config *container.Config,
hostConfig *container.HostConfig,
networkingConfig *network.NetworkingConfig,
containerName string,
) (container.ContainerCreateCreatedBody, error) {
if f.createContainerFunc != nil {
return f.createContainerFunc(config, hostConfig, networkingConfig, containerName)
}
return container.ContainerCreateCreatedBody{}, nil
}
func (f *fakeClient) ImageCreate(ctx context.Context, parentReference string, options types.ImageCreateOptions) (io.ReadCloser, error) {
if f.imageCreateFunc != nil {
return f.imageCreateFunc(parentReference, options)
}
return nil, nil
}
func (f *fakeClient) Info(_ context.Context) (types.Info, error) {
if f.infoFunc != nil {
return f.infoFunc()
}
return types.Info{}, nil
}

View File

@ -113,7 +113,7 @@ func resolveLocalPath(localPath string) (absPath string, err error) {
return
}
return archive.PreserveTrailingDotOrSeparator(absPath, localPath), nil
return archive.PreserveTrailingDotOrSeparator(absPath, localPath, filepath.Separator), nil
}
func copyFromContainer(ctx context.Context, dockerCli *command.DockerCli, srcContainer, srcPath, dstPath string, cpParam *cpConfig) (err error) {

View File

@ -113,6 +113,9 @@ type cidFile struct {
}
func (cid *cidFile) Close() error {
if cid.file == nil {
return nil
}
cid.file.Close()
if cid.written {
@ -126,6 +129,9 @@ func (cid *cidFile) Close() error {
}
func (cid *cidFile) Write(id string) error {
if cid.file == nil {
return nil
}
if _, err := cid.file.Write([]byte(id)); err != nil {
return errors.Errorf("Failed to write the container ID to the file: %s", err)
}
@ -134,6 +140,9 @@ func (cid *cidFile) Write(id string) error {
}
func newCIDFile(path string) (*cidFile, error) {
if path == "" {
return &cidFile{}, nil
}
if _, err := os.Stat(path); err == nil {
return nil, errors.Errorf("Container ID file found, make sure the other container isn't running or delete %s", path)
}
@ -153,19 +162,15 @@ func createContainer(ctx context.Context, dockerCli command.Cli, containerConfig
stderr := dockerCli.Err()
var (
containerIDFile *cidFile
trustedRef reference.Canonical
namedRef reference.Named
trustedRef reference.Canonical
namedRef reference.Named
)
cidfile := hostConfig.ContainerIDFile
if cidfile != "" {
var err error
if containerIDFile, err = newCIDFile(cidfile); err != nil {
return nil, err
}
defer containerIDFile.Close()
containerIDFile, err := newCIDFile(hostConfig.ContainerIDFile)
if err != nil {
return nil, err
}
defer containerIDFile.Close()
ref, err := reference.ParseAnyReference(config.Image)
if err != nil {
@ -193,7 +198,7 @@ func createContainer(ctx context.Context, dockerCli command.Cli, containerConfig
fmt.Fprintf(stderr, "Unable to find image '%s' locally\n", reference.FamiliarString(namedRef))
// we don't want to write to stdout anything apart from container.ID
if err = pullImage(ctx, dockerCli, config.Image, stderr); err != nil {
if err := pullImage(ctx, dockerCli, config.Image, stderr); err != nil {
return nil, err
}
if taggedRef, ok := namedRef.(reference.NamedTagged); ok && trustedRef != nil {
@ -215,10 +220,6 @@ func createContainer(ctx context.Context, dockerCli command.Cli, containerConfig
for _, warning := range response.Warnings {
fmt.Fprintf(stderr, "WARNING: %s\n", warning)
}
if containerIDFile != nil {
if err = containerIDFile.Write(response.ID); err != nil {
return nil, err
}
}
return &response, nil
err = containerIDFile.Write(response.ID)
return &response, err
}

View File

@ -0,0 +1,120 @@
package container
import (
"context"
"io"
"io/ioutil"
"os"
"strings"
"testing"
"github.com/docker/cli/internal/test"
"github.com/docker/cli/internal/test/testutil"
"github.com/docker/docker/api/types"
"github.com/docker/docker/api/types/container"
"github.com/docker/docker/api/types/network"
"github.com/gotestyourself/gotestyourself/fs"
"github.com/pkg/errors"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestCIDFileNoOPWithNoFilename(t *testing.T) {
file, err := newCIDFile("")
require.NoError(t, err)
assert.Equal(t, &cidFile{}, file)
assert.NoError(t, file.Write("id"))
assert.NoError(t, file.Close())
}
func TestNewCIDFileWhenFileAlreadyExists(t *testing.T) {
tempfile := fs.NewFile(t, "test-cid-file")
defer tempfile.Remove()
_, err := newCIDFile(tempfile.Path())
testutil.ErrorContains(t, err, "Container ID file found")
}
func TestCIDFileCloseWithNoWrite(t *testing.T) {
tempdir := fs.NewDir(t, "test-cid-file")
defer tempdir.Remove()
path := tempdir.Join("cidfile")
file, err := newCIDFile(path)
require.NoError(t, err)
assert.Equal(t, file.path, path)
assert.NoError(t, file.Close())
_, err = os.Stat(path)
assert.True(t, os.IsNotExist(err))
}
func TestCIDFileCloseWithWrite(t *testing.T) {
tempdir := fs.NewDir(t, "test-cid-file")
defer tempdir.Remove()
path := tempdir.Join("cidfile")
file, err := newCIDFile(path)
require.NoError(t, err)
content := "id"
assert.NoError(t, file.Write(content))
actual, err := ioutil.ReadFile(path)
require.NoError(t, err)
assert.Equal(t, content, string(actual))
assert.NoError(t, file.Close())
_, err = os.Stat(path)
require.NoError(t, err)
}
func TestCreateContainerPullsImageIfMissing(t *testing.T) {
imageName := "does-not-exist-locally"
responseCounter := 0
containerID := "abcdef"
client := &fakeClient{
createContainerFunc: func(
config *container.Config,
hostConfig *container.HostConfig,
networkingConfig *network.NetworkingConfig,
containerName string,
) (container.ContainerCreateCreatedBody, error) {
defer func() { responseCounter++ }()
switch responseCounter {
case 0:
return container.ContainerCreateCreatedBody{}, fakeNotFound{}
case 1:
return container.ContainerCreateCreatedBody{ID: containerID}, nil
default:
return container.ContainerCreateCreatedBody{}, errors.New("unexpected")
}
},
imageCreateFunc: func(parentReference string, options types.ImageCreateOptions) (io.ReadCloser, error) {
return ioutil.NopCloser(strings.NewReader("")), nil
},
infoFunc: func() (types.Info, error) {
return types.Info{IndexServerAddress: "http://indexserver"}, nil
},
}
cli := test.NewFakeCli(client)
config := &containerConfig{
Config: &container.Config{
Image: imageName,
},
HostConfig: &container.HostConfig{},
}
body, err := createContainer(context.Background(), cli, config, "name")
require.NoError(t, err)
expected := container.ContainerCreateCreatedBody{ID: containerID}
assert.Equal(t, expected, *body)
stderr := cli.ErrBuffer().String()
assert.Contains(t, stderr, "Unable to find image 'does-not-exist-locally:latest' locally")
}
type fakeNotFound struct{}
func (f fakeNotFound) NotFound() bool { return true }
func (f fakeNotFound) Error() string { return "error fake not found" }

View File

@ -4,13 +4,14 @@ import (
"fmt"
"io"
"github.com/Sirupsen/logrus"
"github.com/docker/cli/cli"
"github.com/docker/cli/cli/command"
"github.com/docker/cli/cli/config/configfile"
"github.com/docker/cli/opts"
"github.com/docker/docker/api/types"
apiclient "github.com/docker/docker/client"
"github.com/docker/docker/pkg/promise"
"github.com/pkg/errors"
"github.com/sirupsen/logrus"
"github.com/spf13/cobra"
"golang.org/x/net/context"
)
@ -22,14 +23,13 @@ type execOptions struct {
detach bool
user string
privileged bool
env *opts.ListOpts
env opts.ListOpts
container string
command []string
}
func newExecOptions() *execOptions {
var values []string
return &execOptions{
env: opts.NewListOptsRef(&values, opts.ValidateEnv),
}
func newExecOptions() execOptions {
return execOptions{env: opts.NewListOpts(opts.ValidateEnv)}
}
// NewExecCommand creates a new cobra.Command for `docker exec`
@ -41,9 +41,9 @@ func NewExecCommand(dockerCli command.Cli) *cobra.Command {
Short: "Run a command in a running container",
Args: cli.RequiresMinArgs(2),
RunE: func(cmd *cobra.Command, args []string) error {
container := args[0]
execCmd := args[1:]
return runExec(dockerCli, options, container, execCmd)
options.container = args[0]
options.command = args[1:]
return runExec(dockerCli, options)
},
}
@ -56,27 +56,14 @@ func NewExecCommand(dockerCli command.Cli) *cobra.Command {
flags.BoolVarP(&options.detach, "detach", "d", false, "Detached mode: run command in the background")
flags.StringVarP(&options.user, "user", "u", "", "Username or UID (format: <name|uid>[:<group|gid>])")
flags.BoolVarP(&options.privileged, "privileged", "", false, "Give extended privileges to the command")
flags.VarP(options.env, "env", "e", "Set environment variables")
flags.VarP(&options.env, "env", "e", "Set environment variables")
flags.SetAnnotation("env", "version", []string{"1.25"})
return cmd
}
// nolint: gocyclo
func runExec(dockerCli command.Cli, options *execOptions, container string, execCmd []string) error {
execConfig, err := parseExec(options, execCmd)
// just in case the ParseExec does not exit
if container == "" || err != nil {
return cli.StatusError{StatusCode: 1}
}
if options.detachKeys != "" {
dockerCli.ConfigFile().DetachKeys = options.detachKeys
}
// Send client escape keys
execConfig.DetachKeys = dockerCli.ConfigFile().DetachKeys
func runExec(dockerCli command.Cli, options execOptions) error {
execConfig := parseExec(options, dockerCli.ConfigFile())
ctx := context.Background()
client := dockerCli.Client()
@ -84,7 +71,7 @@ func runExec(dockerCli command.Cli, options *execOptions, container string, exec
// otherwise if we error out we will leak execIDs on the server (and
// there's no easy way to clean those up). But also in order to make "not
// exist" errors take precedence we do a dummy inspect first.
if _, err := client.ContainerInspect(ctx, container); err != nil {
if _, err := client.ContainerInspect(ctx, options.container); err != nil {
return err
}
if !execConfig.Detach {
@ -93,32 +80,31 @@ func runExec(dockerCli command.Cli, options *execOptions, container string, exec
}
}
response, err := client.ContainerExecCreate(ctx, container, *execConfig)
response, err := client.ContainerExecCreate(ctx, options.container, *execConfig)
if err != nil {
return err
}
execID := response.ID
if execID == "" {
fmt.Fprintln(dockerCli.Out(), "exec ID empty")
return nil
return errors.New("exec ID empty")
}
// Temp struct for execStart so that we don't need to transfer all the execConfig.
if execConfig.Detach {
execStartCheck := types.ExecStartCheck{
Detach: execConfig.Detach,
Tty: execConfig.Tty,
}
return client.ContainerExecStart(ctx, execID, execStartCheck)
}
return interactiveExec(ctx, dockerCli, execConfig, execID)
}
func interactiveExec(ctx context.Context, dockerCli command.Cli, execConfig *types.ExecConfig, execID string) error {
// Interactive exec requested.
var (
out, stderr io.Writer
in io.ReadCloser
errCh chan error
)
if execConfig.AttachStdin {
@ -135,24 +121,31 @@ func runExec(dockerCli command.Cli, options *execOptions, container string, exec
}
}
client := dockerCli.Client()
resp, err := client.ContainerExecAttach(ctx, execID, *execConfig)
if err != nil {
return err
}
defer resp.Close()
errCh = promise.Go(func() error {
streamer := hijackedIOStreamer{
streams: dockerCli,
inputStream: in,
outputStream: out,
errorStream: stderr,
resp: resp,
tty: execConfig.Tty,
detachKeys: execConfig.DetachKeys,
}
return streamer.stream(ctx)
})
errCh := make(chan error, 1)
go func() {
defer close(errCh)
errCh <- func() error {
streamer := hijackedIOStreamer{
streams: dockerCli,
inputStream: in,
outputStream: out,
errorStream: stderr,
resp: resp,
tty: execConfig.Tty,
detachKeys: execConfig.DetachKeys,
}
return streamer.stream(ctx)
}()
}()
if execConfig.Tty && dockerCli.In().IsTerminal() {
if err := MonitorTtySize(ctx, dockerCli, execID, true); err != nil {
@ -165,42 +158,35 @@ func runExec(dockerCli command.Cli, options *execOptions, container string, exec
return err
}
var status int
if _, status, err = getExecExitCode(ctx, client, execID); err != nil {
return err
}
if status != 0 {
return cli.StatusError{StatusCode: status}
}
return nil
return getExecExitStatus(ctx, client, execID)
}
// getExecExitCode perform an inspect on the exec command. It returns
// the running state and the exit code.
func getExecExitCode(ctx context.Context, client apiclient.ContainerAPIClient, execID string) (bool, int, error) {
func getExecExitStatus(ctx context.Context, client apiclient.ContainerAPIClient, execID string) error {
resp, err := client.ContainerExecInspect(ctx, execID)
if err != nil {
// If we can't connect, then the daemon probably died.
if !apiclient.IsErrConnectionFailed(err) {
return false, -1, err
return err
}
return false, -1, nil
return cli.StatusError{StatusCode: -1}
}
return resp.Running, resp.ExitCode, nil
status := resp.ExitCode
if status != 0 {
return cli.StatusError{StatusCode: status}
}
return nil
}
// parseExec parses the specified args for the specified command and generates
// an ExecConfig from it.
func parseExec(opts *execOptions, execCmd []string) (*types.ExecConfig, error) {
func parseExec(opts execOptions, configFile *configfile.ConfigFile) *types.ExecConfig {
execConfig := &types.ExecConfig{
User: opts.user,
Privileged: opts.privileged,
Tty: opts.tty,
Cmd: execCmd,
Cmd: opts.command,
Detach: opts.detach,
Env: opts.env.GetAll(),
}
// If -d is not set, attach to everything by default
@ -212,9 +198,10 @@ func parseExec(opts *execOptions, execCmd []string) (*types.ExecConfig, error) {
}
}
if opts.env != nil {
execConfig.Env = opts.env.GetAll()
if opts.detachKeys != "" {
execConfig.DetachKeys = opts.detachKeys
} else {
execConfig.DetachKeys = configFile.DetachKeys
}
return execConfig, nil
return execConfig
}

View File

@ -4,118 +4,201 @@ import (
"io/ioutil"
"testing"
"github.com/docker/cli/cli/internal/test"
"github.com/docker/cli/cli"
"github.com/docker/cli/cli/config/configfile"
"github.com/docker/cli/internal/test"
"github.com/docker/cli/internal/test/testutil"
"github.com/docker/cli/opts"
"github.com/docker/docker/api/types"
"github.com/docker/docker/pkg/testutil"
"github.com/pkg/errors"
"github.com/stretchr/testify/require"
"github.com/stretchr/testify/assert"
"golang.org/x/net/context"
)
type arguments struct {
options execOptions
execCmd []string
func withDefaultOpts(options execOptions) execOptions {
options.env = opts.NewListOpts(opts.ValidateEnv)
if len(options.command) == 0 {
options.command = []string{"command"}
}
return options
}
func TestParseExec(t *testing.T) {
valids := map[*arguments]*types.ExecConfig{
testcases := []struct {
options execOptions
configFile configfile.ConfigFile
expected types.ExecConfig
}{
{
execCmd: []string{"command"},
}: {
Cmd: []string{"command"},
AttachStdout: true,
AttachStderr: true,
expected: types.ExecConfig{
Cmd: []string{"command"},
AttachStdout: true,
AttachStderr: true,
},
options: withDefaultOpts(execOptions{}),
},
{
execCmd: []string{"command1", "command2"},
}: {
Cmd: []string{"command1", "command2"},
AttachStdout: true,
AttachStderr: true,
expected: types.ExecConfig{
Cmd: []string{"command1", "command2"},
AttachStdout: true,
AttachStderr: true,
},
options: withDefaultOpts(execOptions{
command: []string{"command1", "command2"},
}),
},
{
options: execOptions{
options: withDefaultOpts(execOptions{
interactive: true,
tty: true,
user: "uid",
}),
expected: types.ExecConfig{
User: "uid",
AttachStdin: true,
AttachStdout: true,
AttachStderr: true,
Tty: true,
Cmd: []string{"command"},
},
execCmd: []string{"command"},
}: {
User: "uid",
AttachStdin: true,
AttachStdout: true,
AttachStderr: true,
Tty: true,
Cmd: []string{"command"},
},
{
options: execOptions{
detach: true,
options: withDefaultOpts(execOptions{detach: true}),
expected: types.ExecConfig{
Detach: true,
Cmd: []string{"command"},
},
execCmd: []string{"command"},
}: {
AttachStdin: false,
AttachStdout: false,
AttachStderr: false,
Detach: true,
Cmd: []string{"command"},
},
{
options: execOptions{
options: withDefaultOpts(execOptions{
tty: true,
interactive: true,
detach: true,
}),
expected: types.ExecConfig{
Detach: true,
Tty: true,
Cmd: []string{"command"},
},
},
{
options: withDefaultOpts(execOptions{detach: true}),
configFile: configfile.ConfigFile{DetachKeys: "de"},
expected: types.ExecConfig{
Cmd: []string{"command"},
DetachKeys: "de",
Detach: true,
},
},
{
options: withDefaultOpts(execOptions{
detach: true,
detachKeys: "ab",
}),
configFile: configfile.ConfigFile{DetachKeys: "de"},
expected: types.ExecConfig{
Cmd: []string{"command"},
DetachKeys: "ab",
Detach: true,
},
execCmd: []string{"command"},
}: {
AttachStdin: false,
AttachStdout: false,
AttachStderr: false,
Detach: true,
Tty: true,
Cmd: []string{"command"},
},
}
for valid, expectedExecConfig := range valids {
execConfig, err := parseExec(&valid.options, valid.execCmd)
require.NoError(t, err)
if !compareExecConfig(expectedExecConfig, execConfig) {
t.Fatalf("Expected [%v] for %v, got [%v]", expectedExecConfig, valid, execConfig)
}
for _, testcase := range testcases {
execConfig := parseExec(testcase.options, &testcase.configFile)
assert.Equal(t, testcase.expected, *execConfig)
}
}
func compareExecConfig(config1 *types.ExecConfig, config2 *types.ExecConfig) bool {
if config1.AttachStderr != config2.AttachStderr {
return false
func TestRunExec(t *testing.T) {
var testcases = []struct {
doc string
options execOptions
client fakeClient
expectedError string
expectedOut string
expectedErr string
}{
{
doc: "successful detach",
options: withDefaultOpts(execOptions{
container: "thecontainer",
detach: true,
}),
client: fakeClient{execCreateFunc: execCreateWithID},
},
{
doc: "inspect error",
options: newExecOptions(),
client: fakeClient{
inspectFunc: func(string) (types.ContainerJSON, error) {
return types.ContainerJSON{}, errors.New("failed inspect")
},
},
expectedError: "failed inspect",
},
{
doc: "missing exec ID",
options: newExecOptions(),
expectedError: "exec ID empty",
},
}
if config1.AttachStdin != config2.AttachStdin {
return false
for _, testcase := range testcases {
t.Run(testcase.doc, func(t *testing.T) {
cli := test.NewFakeCli(&testcase.client)
err := runExec(cli, testcase.options)
if testcase.expectedError != "" {
testutil.ErrorContains(t, err, testcase.expectedError)
} else {
if !assert.NoError(t, err) {
return
}
}
assert.Equal(t, testcase.expectedOut, cli.OutBuffer().String())
assert.Equal(t, testcase.expectedErr, cli.ErrBuffer().String())
})
}
if config1.AttachStdout != config2.AttachStdout {
return false
}
func execCreateWithID(_ string, _ types.ExecConfig) (types.IDResponse, error) {
return types.IDResponse{ID: "execid"}, nil
}
func TestGetExecExitStatus(t *testing.T) {
execID := "the exec id"
expecatedErr := errors.New("unexpected error")
testcases := []struct {
inspectError error
exitCode int
expectedError error
}{
{
inspectError: nil,
exitCode: 0,
},
{
inspectError: expecatedErr,
expectedError: expecatedErr,
},
{
exitCode: 15,
expectedError: cli.StatusError{StatusCode: 15},
},
}
if config1.Detach != config2.Detach {
return false
}
if config1.Privileged != config2.Privileged {
return false
}
if config1.Tty != config2.Tty {
return false
}
if config1.User != config2.User {
return false
}
if len(config1.Cmd) != len(config2.Cmd) {
return false
}
for index, value := range config1.Cmd {
if value != config2.Cmd[index] {
return false
for _, testcase := range testcases {
client := &fakeClient{
execInspectFunc: func(id string) (types.ContainerExecInspect, error) {
assert.Equal(t, execID, id)
return types.ContainerExecInspect{ExitCode: testcase.exitCode}, testcase.inspectError
},
}
err := getExecExitStatus(context.Background(), client, execID)
assert.Equal(t, testcase.expectedError, err)
}
return true
}
func TestNewExecCommandErrors(t *testing.T) {
@ -135,7 +218,7 @@ func TestNewExecCommandErrors(t *testing.T) {
},
}
for _, tc := range testCases {
cli := test.NewFakeCli(&fakeClient{containerInspectFunc: tc.containerInspectFunc})
cli := test.NewFakeCli(&fakeClient{inspectFunc: tc.containerInspectFunc})
cmd := NewExecCommand(cli)
cmd.SetOutput(ioutil.Discard)
cmd.SetArgs(tc.args)

View File

@ -6,12 +6,12 @@ import (
"runtime"
"sync"
"github.com/Sirupsen/logrus"
"github.com/docker/cli/cli/command"
"github.com/docker/docker/api/types"
"github.com/docker/docker/pkg/ioutils"
"github.com/docker/docker/pkg/stdcopy"
"github.com/docker/docker/pkg/term"
"github.com/sirupsen/logrus"
"golang.org/x/net/context"
)
@ -185,6 +185,7 @@ func setRawTerminal(streams command.Streams) error {
return streams.Out().SetRawTerminal()
}
// nolint: unparam
func restoreTerminal(streams command.Streams, in io.Closer) error {
streams.In().RestoreTerminal()
streams.Out().RestoreTerminal()

View File

@ -7,8 +7,8 @@ import (
"github.com/docker/cli/cli/command"
"github.com/docker/cli/cli/command/formatter"
"github.com/docker/cli/opts"
"github.com/docker/cli/templates"
"github.com/docker/docker/api/types"
"github.com/docker/docker/pkg/templates"
"github.com/spf13/cobra"
"golang.org/x/net/context"
)

View File

@ -11,7 +11,6 @@ import (
"strings"
"time"
"github.com/Sirupsen/logrus"
"github.com/docker/cli/cli/compose/loader"
"github.com/docker/cli/opts"
"github.com/docker/docker/api/types/container"
@ -20,6 +19,7 @@ import (
"github.com/docker/docker/pkg/signal"
"github.com/docker/go-connections/nat"
"github.com/pkg/errors"
"github.com/sirupsen/logrus"
"github.com/spf13/pflag"
)
@ -274,7 +274,7 @@ func addFlags(flags *pflag.FlagSet) *containerOptions {
// Low-level execution (cgroups, namespaces, ...)
flags.StringVar(&copts.cgroupParent, "cgroup-parent", "", "Optional parent cgroup for the container")
flags.StringVar(&copts.ipcMode, "ipc", "", "IPC namespace to use")
flags.StringVar(&copts.ipcMode, "ipc", "", "IPC mode to use")
flags.StringVar(&copts.isolation, "isolation", "", "Container isolation technology")
flags.StringVar(&copts.pidMode, "pid", "", "PID namespace to use")
flags.Var(&copts.shmSize, "shm-size", "Size of /dev/shm")
@ -421,11 +421,6 @@ func parse(flags *pflag.FlagSet, copts *containerOptions) (*containerConfig, err
return nil, err
}
ipcMode := container.IpcMode(copts.ipcMode)
if !ipcMode.Valid() {
return nil, errors.Errorf("--ipc: invalid IPC mode")
}
pidMode := container.PidMode(copts.pidMode)
if !pidMode.Valid() {
return nil, errors.Errorf("--pid: invalid PID mode")
@ -584,7 +579,7 @@ func parse(flags *pflag.FlagSet, copts *containerOptions) (*containerConfig, err
ExtraHosts: copts.extraHosts.GetAll(),
VolumesFrom: copts.volumesFrom.GetAll(),
NetworkMode: container.NetworkMode(copts.netMode),
IpcMode: ipcMode,
IpcMode: container.IpcMode(copts.ipcMode),
PidMode: pidMode,
UTSMode: utsMode,
UsernsMode: usernsMode,

View File

@ -1,8 +1,6 @@
package container
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"os"
@ -11,10 +9,9 @@ import (
"testing"
"time"
"github.com/docker/cli/internal/test/testutil"
"github.com/docker/docker/api/types/container"
networktypes "github.com/docker/docker/api/types/network"
"github.com/docker/docker/pkg/testutil"
"github.com/docker/docker/runconfig"
"github.com/docker/go-connections/nat"
"github.com/pkg/errors"
"github.com/spf13/pflag"
@ -46,6 +43,7 @@ func TestValidateAttach(t *testing.T) {
}
}
// nolint: unparam
func parseRun(args []string) (*container.Config, *container.HostConfig, *networktypes.NetworkingConfig, error) {
flags := pflag.NewFlagSet("run", pflag.ContinueOnError)
flags.SetOutput(ioutil.Discard)
@ -115,7 +113,7 @@ func TestParseRunWithInvalidArgs(t *testing.T) {
}
// nolint: gocyclo
func TestParseRunVolumes(t *testing.T) {
func TestParseWithVolumes(t *testing.T) {
// A single volume
arr, tryit := setupPlatformVolume([]string{`/tmp`}, []string{`c:\tmp`})
@ -135,19 +133,19 @@ func TestParseRunVolumes(t *testing.T) {
t.Fatalf("Error parsing volume flags, %s is missing from volumes. Received %v", arr[1], config.Volumes)
}
// A single bind-mount
// A single bind mount
arr, tryit = setupPlatformVolume([]string{`/hostTmp:/containerTmp`}, []string{os.Getenv("TEMP") + `:c:\containerTmp`})
if config, hostConfig := mustParse(t, tryit); hostConfig.Binds == nil || hostConfig.Binds[0] != arr[0] {
t.Fatalf("Error parsing volume flags, %q should mount-bind the path before the colon into the path after the colon. Received %v %v", arr[0], hostConfig.Binds, config.Volumes)
}
// Two bind-mounts.
// Two bind mounts.
arr, tryit = setupPlatformVolume([]string{`/hostTmp:/containerTmp`, `/hostVar:/containerVar`}, []string{os.Getenv("ProgramData") + `:c:\ContainerPD`, os.Getenv("TEMP") + `:c:\containerTmp`})
if _, hostConfig := mustParse(t, tryit); hostConfig.Binds == nil || compareRandomizedStrings(hostConfig.Binds[0], hostConfig.Binds[1], arr[0], arr[1]) != nil {
t.Fatalf("Error parsing volume flags, `%s and %s` did not mount-bind correctly. Received %v", arr[0], arr[1], hostConfig.Binds)
}
// Two bind-mounts, first read-only, second read-write.
// Two bind mounts, first read-only, second read-write.
// TODO Windows: The Windows version uses read-write as that's the only mode it supports. Can change this post TP4
arr, tryit = setupPlatformVolume(
[]string{`/hostTmp:/containerTmp:ro`, `/hostVar:/containerVar:rw`},
@ -366,23 +364,12 @@ func TestParseDevice(t *testing.T) {
}
func TestParseModes(t *testing.T) {
// ipc ko
_, _, _, err := parseRun([]string{"--ipc=container:", "img", "cmd"})
testutil.ErrorContains(t, err, "--ipc: invalid IPC mode")
// ipc ok
_, hostconfig, _, err := parseRun([]string{"--ipc=host", "img", "cmd"})
require.NoError(t, err)
if !hostconfig.IpcMode.Valid() {
t.Fatalf("Expected a valid IpcMode, got %v", hostconfig.IpcMode)
}
// pid ko
_, _, _, err = parseRun([]string{"--pid=container:", "img", "cmd"})
_, _, _, err := parseRun([]string{"--pid=container:", "img", "cmd"})
testutil.ErrorContains(t, err, "--pid: invalid PID mode")
// pid ok
_, hostconfig, _, err = parseRun([]string{"--pid=host", "img", "cmd"})
_, hostconfig, _, err := parseRun([]string{"--pid=host", "img", "cmd"})
require.NoError(t, err)
if !hostconfig.PidMode.Valid() {
t.Fatalf("Expected a valid PidMode, got %v", hostconfig.PidMode)
@ -595,161 +582,6 @@ func TestParseEntryPoint(t *testing.T) {
}
}
// This tests the cases for binds which are generated through
// DecodeContainerConfig rather than Parse()
// nolint: gocyclo
func TestDecodeContainerConfigVolumes(t *testing.T) {
// Root to root
bindsOrVols, _ := setupPlatformVolume([]string{`/:/`}, []string{os.Getenv("SystemDrive") + `\:c:\`})
if _, _, err := callDecodeContainerConfig(nil, bindsOrVols); err == nil {
t.Fatalf("binds %v should have failed", bindsOrVols)
}
if _, _, err := callDecodeContainerConfig(bindsOrVols, nil); err == nil {
t.Fatalf("volume %v should have failed", bindsOrVols)
}
// No destination path
bindsOrVols, _ = setupPlatformVolume([]string{`/tmp:`}, []string{os.Getenv("TEMP") + `\:`})
if _, _, err := callDecodeContainerConfig(nil, bindsOrVols); err == nil {
t.Fatalf("binds %v should have failed", bindsOrVols)
}
if _, _, err := callDecodeContainerConfig(bindsOrVols, nil); err == nil {
t.Fatalf("volume %v should have failed", bindsOrVols)
}
// // No destination path or mode
bindsOrVols, _ = setupPlatformVolume([]string{`/tmp::`}, []string{os.Getenv("TEMP") + `\::`})
if _, _, err := callDecodeContainerConfig(nil, bindsOrVols); err == nil {
t.Fatalf("binds %v should have failed", bindsOrVols)
}
if _, _, err := callDecodeContainerConfig(bindsOrVols, nil); err == nil {
t.Fatalf("volume %v should have failed", bindsOrVols)
}
// A whole lot of nothing
bindsOrVols = []string{`:`}
if _, _, err := callDecodeContainerConfig(nil, bindsOrVols); err == nil {
t.Fatalf("binds %v should have failed", bindsOrVols)
}
if _, _, err := callDecodeContainerConfig(bindsOrVols, nil); err == nil {
t.Fatalf("volume %v should have failed", bindsOrVols)
}
// A whole lot of nothing with no mode
bindsOrVols = []string{`::`}
if _, _, err := callDecodeContainerConfig(nil, bindsOrVols); err == nil {
t.Fatalf("binds %v should have failed", bindsOrVols)
}
if _, _, err := callDecodeContainerConfig(bindsOrVols, nil); err == nil {
t.Fatalf("volume %v should have failed", bindsOrVols)
}
// Too much including an invalid mode
wTmp := os.Getenv("TEMP")
bindsOrVols, _ = setupPlatformVolume([]string{`/tmp:/tmp:/tmp:/tmp`}, []string{wTmp + ":" + wTmp + ":" + wTmp + ":" + wTmp})
if _, _, err := callDecodeContainerConfig(nil, bindsOrVols); err == nil {
t.Fatalf("binds %v should have failed", bindsOrVols)
}
if _, _, err := callDecodeContainerConfig(bindsOrVols, nil); err == nil {
t.Fatalf("volume %v should have failed", bindsOrVols)
}
// Windows specific error tests
if runtime.GOOS == "windows" {
// Volume which does not include a drive letter
bindsOrVols = []string{`\tmp`}
if _, _, err := callDecodeContainerConfig(nil, bindsOrVols); err == nil {
t.Fatalf("binds %v should have failed", bindsOrVols)
}
if _, _, err := callDecodeContainerConfig(bindsOrVols, nil); err == nil {
t.Fatalf("volume %v should have failed", bindsOrVols)
}
// Root to C-Drive
bindsOrVols = []string{os.Getenv("SystemDrive") + `\:c:`}
if _, _, err := callDecodeContainerConfig(nil, bindsOrVols); err == nil {
t.Fatalf("binds %v should have failed", bindsOrVols)
}
if _, _, err := callDecodeContainerConfig(bindsOrVols, nil); err == nil {
t.Fatalf("volume %v should have failed", bindsOrVols)
}
// Container path that does not include a drive letter
bindsOrVols = []string{`c:\windows:\somewhere`}
if _, _, err := callDecodeContainerConfig(nil, bindsOrVols); err == nil {
t.Fatalf("binds %v should have failed", bindsOrVols)
}
if _, _, err := callDecodeContainerConfig(bindsOrVols, nil); err == nil {
t.Fatalf("volume %v should have failed", bindsOrVols)
}
}
// Linux-specific error tests
if runtime.GOOS != "windows" {
// Just root
bindsOrVols = []string{`/`}
if _, _, err := callDecodeContainerConfig(nil, bindsOrVols); err == nil {
t.Fatalf("binds %v should have failed", bindsOrVols)
}
if _, _, err := callDecodeContainerConfig(bindsOrVols, nil); err == nil {
t.Fatalf("volume %v should have failed", bindsOrVols)
}
// A single volume that looks like a bind mount passed in Volumes.
// This should be handled as a bind mount, not a volume.
vols := []string{`/foo:/bar`}
if config, hostConfig, err := callDecodeContainerConfig(vols, nil); err != nil {
t.Fatal("Volume /foo:/bar should have succeeded as a volume name")
} else if hostConfig.Binds != nil {
t.Fatalf("Error parsing volume flags, /foo:/bar should not mount-bind anything. Received %v", hostConfig.Binds)
} else if _, exists := config.Volumes[vols[0]]; !exists {
t.Fatalf("Error parsing volume flags, /foo:/bar is missing from volumes. Received %v", config.Volumes)
}
}
}
// callDecodeContainerConfig is a utility function used by TestDecodeContainerConfigVolumes
// to call DecodeContainerConfig. It effectively does what a client would
// do when calling the daemon by constructing a JSON stream of a
// ContainerConfigWrapper which is populated by the set of volume specs
// passed into it. It returns a config and a hostconfig which can be
// validated to ensure DecodeContainerConfig has manipulated the structures
// correctly.
func callDecodeContainerConfig(volumes []string, binds []string) (*container.Config, *container.HostConfig, error) {
var (
b []byte
err error
c *container.Config
h *container.HostConfig
)
w := runconfig.ContainerConfigWrapper{
Config: &container.Config{
Volumes: map[string]struct{}{},
},
HostConfig: &container.HostConfig{
NetworkMode: "none",
Binds: binds,
},
}
for _, v := range volumes {
w.Config.Volumes[v] = struct{}{}
}
if b, err = json.Marshal(w); err != nil {
return nil, nil, errors.Errorf("Error on marshal %s", err.Error())
}
c, h, _, err = runconfig.DecodeContainerConfig(bytes.NewReader(b))
if err != nil {
return nil, nil, errors.Errorf("Error parsing %s: %v", string(b), err)
}
if c == nil || h == nil {
return nil, nil, errors.Errorf("Empty config or hostconfig")
}
return c, h, err
}
func TestValidateDevice(t *testing.T) {
valid := []string{
"/home",

View File

@ -10,16 +10,15 @@ import (
"strings"
"syscall"
"github.com/Sirupsen/logrus"
"github.com/docker/cli/cli"
"github.com/docker/cli/cli/command"
"github.com/docker/cli/opts"
"github.com/docker/docker/api/types"
"github.com/docker/docker/api/types/container"
"github.com/docker/docker/pkg/promise"
"github.com/docker/docker/pkg/signal"
"github.com/docker/docker/pkg/term"
"github.com/pkg/errors"
"github.com/sirupsen/logrus"
"github.com/spf13/cobra"
"github.com/spf13/pflag"
"golang.org/x/net/context"
@ -291,22 +290,27 @@ func attachContainer(
return nil, errAttach
}
*errCh = promise.Go(func() error {
streamer := hijackedIOStreamer{
streams: dockerCli,
inputStream: in,
outputStream: out,
errorStream: cerr,
resp: resp,
tty: config.Tty,
detachKeys: options.DetachKeys,
}
ch := make(chan error, 1)
*errCh = ch
if errHijack := streamer.stream(ctx); errHijack != nil {
return errHijack
}
return errAttach
})
go func() {
ch <- func() error {
streamer := hijackedIOStreamer{
streams: dockerCli,
inputStream: in,
outputStream: out,
errorStream: cerr,
resp: resp,
tty: config.Tty,
detachKeys: options.DetachKeys,
}
if errHijack := streamer.stream(ctx); errHijack != nil {
return errHijack
}
return errAttach
}()
}()
return resp.Close, nil
}

View File

@ -9,7 +9,6 @@ import (
"github.com/docker/cli/cli"
"github.com/docker/cli/cli/command"
"github.com/docker/docker/api/types"
"github.com/docker/docker/pkg/promise"
"github.com/docker/docker/pkg/signal"
"github.com/docker/docker/pkg/term"
"github.com/pkg/errors"
@ -103,23 +102,28 @@ func runStart(dockerCli *command.DockerCli, opts *startOptions) error {
return errAttach
}
defer resp.Close()
cErr := promise.Go(func() error {
streamer := hijackedIOStreamer{
streams: dockerCli,
inputStream: in,
outputStream: dockerCli.Out(),
errorStream: dockerCli.Err(),
resp: resp,
tty: c.Config.Tty,
detachKeys: options.DetachKeys,
}
errHijack := streamer.stream(ctx)
if errHijack == nil {
return errAttach
}
return errHijack
})
cErr := make(chan error, 1)
go func() {
cErr <- func() error {
streamer := hijackedIOStreamer{
streams: dockerCli,
inputStream: in,
outputStream: dockerCli.Out(),
errorStream: dockerCli.Err(),
resp: resp,
tty: c.Config.Tty,
detachKeys: options.DetachKeys,
}
errHijack := streamer.stream(ctx)
if errHijack == nil {
return errAttach
}
return errHijack
}()
}()
// 3. We should open a channel for receiving status code of the container
// no matter it's detached, removed on daemon side(--rm) or exit normally.

View File

@ -21,6 +21,7 @@ import (
type statsOptions struct {
all bool
noStream bool
noTrunc bool
format string
containers []string
}
@ -42,6 +43,7 @@ func NewStatsCommand(dockerCli *command.DockerCli) *cobra.Command {
flags := cmd.Flags()
flags.BoolVarP(&opts.all, "all", "a", false, "Show all containers (default shows just running)")
flags.BoolVar(&opts.noStream, "no-stream", false, "Disable streaming stats and only pull the first result")
flags.BoolVar(&opts.noTrunc, "no-trunc", false, "Do not truncate output")
flags.StringVar(&opts.format, "format", "", "Pretty-print images using a Go template")
return cmd
}
@ -214,7 +216,7 @@ func runStats(dockerCli *command.DockerCli, opts *statsOptions) error {
ccstats = append(ccstats, c.GetStatistics())
}
cStats.mu.Unlock()
if err = formatter.ContainerStatsWrite(statsCtx, ccstats, daemonOSType); err != nil {
if err = formatter.ContainerStatsWrite(statsCtx, ccstats, daemonOSType, !opts.noTrunc); err != nil {
break
}
if len(cStats.cs) == 0 && !showAll {

View File

@ -7,11 +7,11 @@ import (
"sync"
"time"
"github.com/Sirupsen/logrus"
"github.com/docker/cli/cli/command/formatter"
"github.com/docker/docker/api/types"
"github.com/docker/docker/client"
"github.com/pkg/errors"
"github.com/sirupsen/logrus"
"golang.org/x/net/context"
)

View File

@ -7,11 +7,11 @@ import (
"runtime"
"time"
"github.com/Sirupsen/logrus"
"github.com/docker/cli/cli/command"
"github.com/docker/docker/api/types"
"github.com/docker/docker/client"
"github.com/docker/docker/pkg/signal"
"github.com/sirupsen/logrus"
"golang.org/x/net/context"
)

View File

@ -3,14 +3,13 @@ package container
import (
"strconv"
"github.com/Sirupsen/logrus"
"github.com/docker/cli/cli/command"
"github.com/docker/docker/api/types"
"github.com/docker/docker/api/types/container"
"github.com/docker/docker/api/types/events"
"github.com/docker/docker/api/types/filters"
"github.com/docker/docker/api/types/versions"
clientapi "github.com/docker/docker/client"
"github.com/sirupsen/logrus"
"golang.org/x/net/context"
)
@ -125,20 +124,6 @@ func legacyWaitExitOrRemoved(ctx context.Context, dockerCli *command.DockerCli,
return statusChan
}
// getExitCode performs an inspect on the container. It returns
// the running state and the exit code.
func getExitCode(ctx context.Context, dockerCli command.Cli, containerID string) (bool, int, error) {
c, err := dockerCli.Client().ContainerInspect(ctx, containerID)
if err != nil {
// If we can't connect, then the daemon probably died.
if !clientapi.IsErrConnectionFailed(err) {
return false, -1, err
}
return false, -1, nil
}
return c.State.Running, c.State.ExitCode, nil
}
func parallelOperation(ctx context.Context, containers []string, op func(ctx context.Context, container string) error) chan error {
if len(containers) == 0 {
return nil

View File

@ -3,8 +3,8 @@ package command
import (
"sync"
"github.com/Sirupsen/logrus"
eventtypes "github.com/docker/docker/api/types/events"
"github.com/sirupsen/logrus"
)
// EventHandler is abstract interface for user to customize

View File

@ -10,6 +10,7 @@ import (
"github.com/docker/docker/api/types"
"github.com/docker/docker/pkg/stringid"
"github.com/gotestyourself/gotestyourself/golden"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
@ -230,10 +231,7 @@ size: 0B
// Special headers for customized table format
{
Context{Format: NewContainerFormat(`table {{truncate .ID 5}}\t{{json .Image}} {{.RunningFor}}/{{title .Status}}/{{pad .Ports 2 2}}.{{upper .Names}} {{lower .Status}}`, false, true)},
`CONTAINER ID IMAGE CREATED/STATUS/ PORTS .NAMES STATUS
conta "ubuntu" 24 hours ago//.FOOBAR_BAZ
conta "ubuntu" 24 hours ago//.FOOBAR_BAR
`,
string(golden.Get(t, "container-context-write-special-headers.golden")),
},
}

View File

@ -1,9 +1,10 @@
package formatter
import (
"reflect"
"strings"
"testing"
"github.com/stretchr/testify/assert"
)
func compareMultipleValues(t *testing.T, value, expected string) {
@ -22,7 +23,5 @@ func compareMultipleValues(t *testing.T, value, expected string) {
keyval := strings.Split(expected, "=")
expMap[keyval[0]] = keyval[1]
}
if !reflect.DeepEqual(expMap, entriesMap) {
t.Fatalf("Expected entries: %v, got: %v", expected, value)
}
assert.Equal(t, expMap, entriesMap)
}

View File

@ -4,6 +4,7 @@ import (
"bytes"
"testing"
"github.com/gotestyourself/gotestyourself/golden"
"github.com/stretchr/testify/assert"
)
@ -83,12 +84,7 @@ Build Cache 0B
Format: NewDiskUsageFormat("table {{.Type}}\t{{.Active}}"),
},
},
`TYPE ACTIVE
Images 0
Containers 0
Local Volumes 0
Build Cache
`,
string(golden.Get(t, "disk-usage-context-write-custom.golden")),
},
// Raw Format
{
@ -97,31 +93,7 @@ Build Cache
Format: NewDiskUsageFormat("raw"),
},
},
`type: Images
total: 0
active: 0
size: 0B
reclaimable: 0B
type: Containers
total: 0
active: 0
size: 0B
reclaimable: 0B
type: Local Volumes
total: 0
active: 0
size: 0B
reclaimable: 0B
type: Build Cache
total:
active:
size: 0B
reclaimable: 0B
`,
string(golden.Get(t, "disk-usage-raw-format.golden")),
},
}

View File

@ -7,7 +7,7 @@ import (
"text/tabwriter"
"text/template"
"github.com/docker/docker/pkg/templates"
"github.com/docker/cli/templates"
"github.com/pkg/errors"
)

View File

@ -79,10 +79,13 @@ func (c *historyContext) ID() string {
}
func (c *historyContext) CreatedAt() string {
return units.HumanDuration(time.Now().UTC().Sub(time.Unix(c.h.Created, 0)))
return time.Unix(c.h.Created, 0).Format(time.RFC3339)
}
func (c *historyContext) CreatedSince() string {
if !c.human {
return c.CreatedAt()
}
created := units.HumanDuration(time.Now().UTC().Sub(time.Unix(c.h.Created, 0)))
return created + " ago"
}

View File

@ -51,17 +51,21 @@ func TestHistoryContext_ID(t *testing.T) {
}
func TestHistoryContext_CreatedSince(t *testing.T) {
unixTime := time.Now().AddDate(0, 0, -7).Unix()
expected := "7 days ago"
var ctx historyContext
cases := []historyCase{
{
historyContext{
h: image.HistoryResponseItem{Created: unixTime},
h: image.HistoryResponseItem{Created: time.Now().AddDate(0, 0, -7).Unix()},
trunc: false,
human: true,
}, expected, ctx.CreatedSince,
}, "7 days ago", ctx.CreatedSince,
},
{
historyContext{
h: image.HistoryResponseItem{Created: time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC).Unix()},
trunc: false,
human: false,
}, "2009-11-10T23:00:00Z", ctx.CreatedSince,
},
}

View File

@ -79,11 +79,16 @@ func ImageWrite(ctx ImageContext, images []types.ImageSummary) error {
return ctx.Write(newImageContext(), render)
}
// needDigest determines whether the image digest should be ignored or not when writing image context
func needDigest(ctx ImageContext) bool {
return ctx.Digest || ctx.Format.Contains("{{.Digest}}")
}
func imageFormat(ctx ImageContext, images []types.ImageSummary, format func(subContext subContext) error) error {
for _, image := range images {
images := []*imageContext{}
formatted := []*imageContext{}
if isDangling(image) {
images = append(images, &imageContext{
formatted = append(formatted, &imageContext{
trunc: ctx.Trunc,
i: image,
repo: "<none>",
@ -91,90 +96,9 @@ func imageFormat(ctx ImageContext, images []types.ImageSummary, format func(subC
digest: "<none>",
})
} else {
repoTags := map[string][]string{}
repoDigests := map[string][]string{}
for _, refString := range image.RepoTags {
ref, err := reference.ParseNormalizedNamed(refString)
if err != nil {
continue
}
if nt, ok := ref.(reference.NamedTagged); ok {
familiarRef := reference.FamiliarName(ref)
repoTags[familiarRef] = append(repoTags[familiarRef], nt.Tag())
}
}
for _, refString := range image.RepoDigests {
ref, err := reference.ParseNormalizedNamed(refString)
if err != nil {
continue
}
if c, ok := ref.(reference.Canonical); ok {
familiarRef := reference.FamiliarName(ref)
repoDigests[familiarRef] = append(repoDigests[familiarRef], c.Digest().String())
}
}
for repo, tags := range repoTags {
digests := repoDigests[repo]
// Do not display digests as their own row
delete(repoDigests, repo)
if !ctx.Digest {
// Ignore digest references, just show tag once
digests = nil
}
for _, tag := range tags {
if len(digests) == 0 {
images = append(images, &imageContext{
trunc: ctx.Trunc,
i: image,
repo: repo,
tag: tag,
digest: "<none>",
})
continue
}
// Display the digests for each tag
for _, dgst := range digests {
images = append(images, &imageContext{
trunc: ctx.Trunc,
i: image,
repo: repo,
tag: tag,
digest: dgst,
})
}
}
}
// Show rows for remaining digest only references
for repo, digests := range repoDigests {
// If digests are displayed, show row per digest
if ctx.Digest {
for _, dgst := range digests {
images = append(images, &imageContext{
trunc: ctx.Trunc,
i: image,
repo: repo,
tag: "<none>",
digest: dgst,
})
}
} else {
images = append(images, &imageContext{
trunc: ctx.Trunc,
i: image,
repo: repo,
tag: "<none>",
})
}
}
formatted = imageFormatTaggedAndDigest(ctx, image)
}
for _, imageCtx := range images {
for _, imageCtx := range formatted {
if err := format(imageCtx); err != nil {
return err
}
@ -183,6 +107,82 @@ func imageFormat(ctx ImageContext, images []types.ImageSummary, format func(subC
return nil
}
func imageFormatTaggedAndDigest(ctx ImageContext, image types.ImageSummary) []*imageContext {
repoTags := map[string][]string{}
repoDigests := map[string][]string{}
images := []*imageContext{}
for _, refString := range image.RepoTags {
ref, err := reference.ParseNormalizedNamed(refString)
if err != nil {
continue
}
if nt, ok := ref.(reference.NamedTagged); ok {
familiarRef := reference.FamiliarName(ref)
repoTags[familiarRef] = append(repoTags[familiarRef], nt.Tag())
}
}
for _, refString := range image.RepoDigests {
ref, err := reference.ParseNormalizedNamed(refString)
if err != nil {
continue
}
if c, ok := ref.(reference.Canonical); ok {
familiarRef := reference.FamiliarName(ref)
repoDigests[familiarRef] = append(repoDigests[familiarRef], c.Digest().String())
}
}
addImage := func(repo, tag, digest string) {
image := &imageContext{
trunc: ctx.Trunc,
i: image,
repo: repo,
tag: tag,
digest: digest,
}
images = append(images, image)
}
for repo, tags := range repoTags {
digests := repoDigests[repo]
// Do not display digests as their own row
delete(repoDigests, repo)
if !needDigest(ctx) {
// Ignore digest references, just show tag once
digests = nil
}
for _, tag := range tags {
if len(digests) == 0 {
addImage(repo, tag, "<none>")
continue
}
// Display the digests for each tag
for _, dgst := range digests {
addImage(repo, tag, dgst)
}
}
}
// Show rows for remaining digest only references
for repo, digests := range repoDigests {
// If digests are displayed, show row per digest
if ctx.Digest {
for _, dgst := range digests {
addImage(repo, "<none>", dgst)
}
} else {
addImage(repo, "<none>", "")
}
}
return images
}
type imageContext struct {
HeaderContext
trunc bool

View File

@ -55,6 +55,26 @@ func TestImageContext(t *testing.T) {
i: types.ImageSummary{},
digest: "sha256:d149ab53f8718e987c3a3024bb8aa0e2caadf6c0328f1d9d850b2a2a67f2819a",
}, "sha256:d149ab53f8718e987c3a3024bb8aa0e2caadf6c0328f1d9d850b2a2a67f2819a", ctx.Digest},
{
imageContext{
i: types.ImageSummary{Containers: 10},
}, "10", ctx.Containers,
},
{
imageContext{
i: types.ImageSummary{VirtualSize: 10000},
}, "10kB", ctx.VirtualSize,
},
{
imageContext{
i: types.ImageSummary{SharedSize: 10000},
}, "10kB", ctx.SharedSize,
},
{
imageContext{
i: types.ImageSummary{SharedSize: 5000, VirtualSize: 20000},
}, "15kB", ctx.UniqueSize,
},
}
for _, c := range cases {
@ -62,8 +82,8 @@ func TestImageContext(t *testing.T) {
v := c.call()
if strings.Contains(v, ",") {
compareMultipleValues(t, v, c.expValue)
} else if v != c.expValue {
t.Fatalf("Expected %s, was %s\n", c.expValue, v)
} else {
assert.Equal(t, c.expValue, v)
}
}
}
@ -137,6 +157,14 @@ image <none>
},
"REPOSITORY\nimage\nimage\n<none>\n",
},
{
ImageContext{
Context: Context{
Format: NewImageFormat("table {{.Digest}}", true, false),
},
},
"DIGEST\nsha256:cbbf2f9a99b47fc460d422812b6a5adff7dfee951d8fa2e4a98caa0382cfbdbf\n<none>\n<none>\n",
},
{
ImageContext{
Context: Context{

View File

@ -0,0 +1,104 @@
package formatter
import (
"strconv"
"strings"
registry "github.com/docker/docker/api/types/registry"
"github.com/docker/docker/pkg/stringutils"
)
const (
defaultSearchTableFormat = "table {{.Name}}\t{{.Description}}\t{{.StarCount}}\t{{.IsOfficial}}\t{{.IsAutomated}}"
starsHeader = "STARS"
officialHeader = "OFFICIAL"
automatedHeader = "AUTOMATED"
)
// NewSearchFormat returns a Format for rendering using a network Context
func NewSearchFormat(source string) Format {
switch source {
case "":
return defaultSearchTableFormat
case TableFormatKey:
return defaultSearchTableFormat
}
return Format(source)
}
// SearchWrite writes the context
func SearchWrite(ctx Context, results []registry.SearchResult, auto bool, stars int) error {
render := func(format func(subContext subContext) error) error {
for _, result := range results {
// --automated and -s, --stars are deprecated since Docker 1.12
if (auto && !result.IsAutomated) || (stars > result.StarCount) {
continue
}
searchCtx := &searchContext{trunc: ctx.Trunc, s: result}
if err := format(searchCtx); err != nil {
return err
}
}
return nil
}
searchCtx := searchContext{}
searchCtx.header = map[string]string{
"Name": nameHeader,
"Description": descriptionHeader,
"StarCount": starsHeader,
"IsOfficial": officialHeader,
"IsAutomated": automatedHeader,
}
return ctx.Write(&searchCtx, render)
}
type searchContext struct {
HeaderContext
trunc bool
json bool
s registry.SearchResult
}
func (c *searchContext) MarshalJSON() ([]byte, error) {
c.json = true
return marshalJSON(c)
}
func (c *searchContext) Name() string {
return c.s.Name
}
func (c *searchContext) Description() string {
desc := strings.Replace(c.s.Description, "\n", " ", -1)
desc = strings.Replace(desc, "\r", " ", -1)
if c.trunc {
desc = stringutils.Ellipsis(desc, 45)
}
return desc
}
func (c *searchContext) StarCount() string {
return strconv.Itoa(c.s.StarCount)
}
func (c *searchContext) formatBool(value bool) string {
switch {
case value && c.json:
return "true"
case value:
return "[OK]"
case c.json:
return "false"
default:
return ""
}
}
func (c *searchContext) IsOfficial() string {
return c.formatBool(c.s.IsOfficial)
}
func (c *searchContext) IsAutomated() string {
return c.formatBool(c.s.IsAutomated)
}

View File

@ -0,0 +1,280 @@
package formatter
import (
"bytes"
"encoding/json"
"strings"
"testing"
registrytypes "github.com/docker/docker/api/types/registry"
"github.com/docker/docker/pkg/stringutils"
"github.com/gotestyourself/gotestyourself/golden"
"github.com/stretchr/testify/assert"
)
func TestSearchContext(t *testing.T) {
name := "nginx"
starCount := 5000
var ctx searchContext
cases := []struct {
searchCtx searchContext
expValue string
call func() string
}{
{searchContext{
s: registrytypes.SearchResult{Name: name},
}, name, ctx.Name},
{searchContext{
s: registrytypes.SearchResult{StarCount: starCount},
}, "5000", ctx.StarCount},
{searchContext{
s: registrytypes.SearchResult{IsOfficial: true},
}, "[OK]", ctx.IsOfficial},
{searchContext{
s: registrytypes.SearchResult{IsOfficial: false},
}, "", ctx.IsOfficial},
{searchContext{
s: registrytypes.SearchResult{IsAutomated: true},
}, "[OK]", ctx.IsAutomated},
{searchContext{
s: registrytypes.SearchResult{IsAutomated: false},
}, "", ctx.IsAutomated},
}
for _, c := range cases {
ctx = c.searchCtx
v := c.call()
if strings.Contains(v, ",") {
compareMultipleValues(t, v, c.expValue)
} else if v != c.expValue {
t.Fatalf("Expected %s, was %s\n", c.expValue, v)
}
}
}
func TestSearchContextDescription(t *testing.T) {
shortDescription := "Official build of Nginx."
longDescription := "Automated Nginx reverse proxy for docker containers"
descriptionWReturns := "Automated\nNginx reverse\rproxy\rfor docker\ncontainers"
var ctx searchContext
cases := []struct {
searchCtx searchContext
expValue string
call func() string
}{
{searchContext{
s: registrytypes.SearchResult{Description: shortDescription},
trunc: true,
}, shortDescription, ctx.Description},
{searchContext{
s: registrytypes.SearchResult{Description: shortDescription},
trunc: false,
}, shortDescription, ctx.Description},
{searchContext{
s: registrytypes.SearchResult{Description: longDescription},
trunc: false,
}, longDescription, ctx.Description},
{searchContext{
s: registrytypes.SearchResult{Description: longDescription},
trunc: true,
}, stringutils.Ellipsis(longDescription, 45), ctx.Description},
{searchContext{
s: registrytypes.SearchResult{Description: descriptionWReturns},
trunc: false,
}, longDescription, ctx.Description},
{searchContext{
s: registrytypes.SearchResult{Description: descriptionWReturns},
trunc: true,
}, stringutils.Ellipsis(longDescription, 45), ctx.Description},
}
for _, c := range cases {
ctx = c.searchCtx
v := c.call()
if strings.Contains(v, ",") {
compareMultipleValues(t, v, c.expValue)
} else if v != c.expValue {
t.Fatalf("Expected %s, was %s\n", c.expValue, v)
}
}
}
func TestSearchContextWrite(t *testing.T) {
cases := []struct {
context Context
expected string
}{
// Errors
{
Context{Format: "{{InvalidFunction}}"},
`Template parsing error: template: :1: function "InvalidFunction" not defined
`,
},
{
Context{Format: "{{nil}}"},
`Template parsing error: template: :1:2: executing "" at <nil>: nil is not a command
`,
},
// Table format
{
Context{Format: NewSearchFormat("table")},
string(golden.Get(t, "search-context-write-table.golden")),
},
{
Context{Format: NewSearchFormat("table {{.Name}}")},
`NAME
result1
result2
`,
},
// Custom Format
{
Context{Format: NewSearchFormat("{{.Name}}")},
`result1
result2
`,
},
// Custom Format with CreatedAt
{
Context{Format: NewSearchFormat("{{.Name}} {{.StarCount}}")},
`result1 5000
result2 5
`,
},
}
for _, testcase := range cases {
results := []registrytypes.SearchResult{
{Name: "result1", Description: "Official build", StarCount: 5000, IsOfficial: true, IsAutomated: false},
{Name: "result2", Description: "Not official", StarCount: 5, IsOfficial: false, IsAutomated: true},
}
out := bytes.NewBufferString("")
testcase.context.Output = out
err := SearchWrite(testcase.context, results, false, 0)
if err != nil {
assert.Error(t, err, testcase.expected)
} else {
assert.Equal(t, out.String(), testcase.expected)
}
}
}
func TestSearchContextWriteAutomated(t *testing.T) {
cases := []struct {
context Context
expected string
}{
// Table format
{
Context{Format: NewSearchFormat("table")},
`NAME DESCRIPTION STARS OFFICIAL AUTOMATED
result2 Not official 5 [OK]
`,
},
{
Context{Format: NewSearchFormat("table {{.Name}}")},
`NAME
result2
`,
},
}
for _, testcase := range cases {
results := []registrytypes.SearchResult{
{Name: "result1", Description: "Official build", StarCount: 5000, IsOfficial: true, IsAutomated: false},
{Name: "result2", Description: "Not official", StarCount: 5, IsOfficial: false, IsAutomated: true},
}
out := bytes.NewBufferString("")
testcase.context.Output = out
err := SearchWrite(testcase.context, results, true, 0)
if err != nil {
assert.Error(t, err, testcase.expected)
} else {
assert.Equal(t, out.String(), testcase.expected)
}
}
}
func TestSearchContextWriteStars(t *testing.T) {
cases := []struct {
context Context
expected string
}{
// Table format
{
Context{Format: NewSearchFormat("table")},
string(golden.Get(t, "search-context-write-stars-table.golden")),
},
{
Context{Format: NewSearchFormat("table {{.Name}}")},
`NAME
result1
`,
},
}
for _, testcase := range cases {
results := []registrytypes.SearchResult{
{Name: "result1", Description: "Official build", StarCount: 5000, IsOfficial: true, IsAutomated: false},
{Name: "result2", Description: "Not official", StarCount: 5, IsOfficial: false, IsAutomated: true},
}
out := bytes.NewBufferString("")
testcase.context.Output = out
err := SearchWrite(testcase.context, results, false, 6)
if err != nil {
assert.Error(t, err, testcase.expected)
} else {
assert.Equal(t, out.String(), testcase.expected)
}
}
}
func TestSearchContextWriteJSON(t *testing.T) {
results := []registrytypes.SearchResult{
{Name: "result1", Description: "Official build", StarCount: 5000, IsOfficial: true, IsAutomated: false},
{Name: "result2", Description: "Not official", StarCount: 5, IsOfficial: false, IsAutomated: true},
}
expectedJSONs := []map[string]interface{}{
{"Name": "result1", "Description": "Official build", "StarCount": "5000", "IsOfficial": "true", "IsAutomated": "false"},
{"Name": "result2", "Description": "Not official", "StarCount": "5", "IsOfficial": "false", "IsAutomated": "true"},
}
out := bytes.NewBufferString("")
err := SearchWrite(Context{Format: "{{json .}}", Output: out}, results, false, 0)
if err != nil {
t.Fatal(err)
}
for i, line := range strings.Split(strings.TrimSpace(out.String()), "\n") {
t.Logf("Output: line %d: %s", i, line)
var m map[string]interface{}
if err := json.Unmarshal([]byte(line), &m); err != nil {
t.Fatal(err)
}
assert.Equal(t, m, expectedJSONs[i])
}
}
func TestSearchContextWriteJSONField(t *testing.T) {
results := []registrytypes.SearchResult{
{Name: "result1", Description: "Official build", StarCount: 5000, IsOfficial: true, IsAutomated: false},
{Name: "result2", Description: "Not official", StarCount: 5, IsOfficial: false, IsAutomated: true},
}
out := bytes.NewBufferString("")
err := SearchWrite(Context{Format: "{{json .Name}}", Output: out}, results, false, 0)
if err != nil {
t.Fatal(err)
}
for i, line := range strings.Split(strings.TrimSpace(out.String()), "\n") {
t.Logf("Output: line %d: %s", i, line)
var s string
if err := json.Unmarshal([]byte(line), &s); err != nil {
t.Fatal(err)
}
assert.Equal(t, s, results[i].Name)
}
}

View File

@ -12,19 +12,20 @@ import (
)
const (
defaultSecretTableFormat = "table {{.ID}}\t{{.Name}}\t{{.CreatedAt}}\t{{.UpdatedAt}}"
defaultSecretTableFormat = "table {{.ID}}\t{{.Name}}\t{{.Driver}}\t{{.CreatedAt}}\t{{.UpdatedAt}}"
secretIDHeader = "ID"
secretCreatedHeader = "CREATED"
secretUpdatedHeader = "UPDATED"
secretInspectPrettyTemplate Format = `ID: {{.ID}}
Name: {{.Name}}
secretInspectPrettyTemplate Format = `ID: {{.ID}}
Name: {{.Name}}
{{- if .Labels }}
Labels:
{{- range $k, $v := .Labels }}
- {{ $k }}{{if $v }}={{ $v }}{{ end }}
{{- end }}{{ end }}
Created at: {{.CreatedAt}}
Updated at: {{.UpdatedAt}}`
Driver: {{.Driver}}
Created at: {{.CreatedAt}}
Updated at: {{.UpdatedAt}}`
)
// NewSecretFormat returns a Format for rendering using a secret Context
@ -61,6 +62,7 @@ func newSecretContext() *secretContext {
sCtx.header = map[string]string{
"ID": secretIDHeader,
"Name": nameHeader,
"Driver": driverHeader,
"CreatedAt": secretCreatedHeader,
"UpdatedAt": secretUpdatedHeader,
"Labels": labelsHeader,
@ -89,6 +91,13 @@ func (c *secretContext) CreatedAt() string {
return units.HumanDuration(time.Now().UTC().Sub(c.s.Meta.CreatedAt)) + " ago"
}
func (c *secretContext) Driver() string {
if c.s.Spec.Driver == nil {
return ""
}
return c.s.Spec.Driver.Name
}
func (c *secretContext) UpdatedAt() string {
return units.HumanDuration(time.Now().UTC().Sub(c.s.Meta.UpdatedAt)) + " ago"
}
@ -153,6 +162,13 @@ func (ctx *secretInspectContext) Labels() map[string]string {
return ctx.Secret.Spec.Labels
}
func (ctx *secretInspectContext) Driver() string {
if ctx.Secret.Spec.Driver == nil {
return ""
}
return ctx.Secret.Spec.Driver.Name
}
func (ctx *secretInspectContext) CreatedAt() string {
return command.PrettyPrint(ctx.Secret.CreatedAt)
}

View File

@ -28,9 +28,9 @@ func TestSecretContextFormatWrite(t *testing.T) {
},
// Table format
{Context{Format: NewSecretFormat("table", false)},
`ID NAME CREATED UPDATED
1 passwords Less than a second ago Less than a second ago
2 id_rsa Less than a second ago Less than a second ago
`ID NAME DRIVER CREATED UPDATED
1 passwords Less than a second ago Less than a second ago
2 id_rsa Less than a second ago Less than a second ago
`},
{Context{Format: NewSecretFormat("table {{.Name}}", true)},
`NAME

View File

@ -504,7 +504,10 @@ func (c *serviceContext) Replicas() string {
}
func (c *serviceContext) Image() string {
image := c.service.Spec.TaskTemplate.ContainerSpec.Image
var image string
if c.service.Spec.TaskTemplate.ContainerSpec != nil {
image = c.service.Spec.TaskTemplate.ContainerSpec.Image
}
if ref, err := reference.ParseNormalizedNamed(image); err == nil {
// update image string for display, (strips any digest)
if nt, ok := ref.(reference.NamedTagged); ok {
@ -518,11 +521,11 @@ func (c *serviceContext) Image() string {
}
func (c *serviceContext) Ports() string {
if c.service.Spec.EndpointSpec == nil || c.service.Spec.EndpointSpec.Ports == nil {
if c.service.Endpoint.Ports == nil {
return ""
}
ports := []string{}
for _, pConfig := range c.service.Spec.EndpointSpec.Ports {
for _, pConfig := range c.service.Endpoint.Ports {
if pConfig.PublishMode == swarm.PortConfigPublishModeIngress {
ports = append(ports, fmt.Sprintf("*:%d->%d/%s",
pConfig.PublishedPort,

View File

@ -8,6 +8,7 @@ import (
"testing"
"github.com/docker/docker/api/types/swarm"
"github.com/gotestyourself/gotestyourself/golden"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
@ -59,21 +60,7 @@ bar
// Raw Format
{
Context{Format: NewServiceListFormat("raw", false)},
`id: id_baz
name: baz
mode: global
replicas: 2/4
image:
ports: *:80->8080/tcp
id: id_bar
name: bar
mode: replicated
replicas: 2/4
image:
ports: *:80->8080/tcp
`,
string(golden.Get(t, "service-context-write-raw.golden")),
},
{
Context{Format: NewServiceListFormat("raw", true)},
@ -96,14 +83,14 @@ bar
ID: "id_baz",
Spec: swarm.ServiceSpec{
Annotations: swarm.Annotations{Name: "baz"},
EndpointSpec: &swarm.EndpointSpec{
Ports: []swarm.PortConfig{
{
PublishMode: "ingress",
PublishedPort: 80,
TargetPort: 8080,
Protocol: "tcp",
},
},
Endpoint: swarm.Endpoint{
Ports: []swarm.PortConfig{
{
PublishMode: "ingress",
PublishedPort: 80,
TargetPort: 8080,
Protocol: "tcp",
},
},
},
@ -112,14 +99,14 @@ bar
ID: "id_bar",
Spec: swarm.ServiceSpec{
Annotations: swarm.Annotations{Name: "bar"},
EndpointSpec: &swarm.EndpointSpec{
Ports: []swarm.PortConfig{
{
PublishMode: "ingress",
PublishedPort: 80,
TargetPort: 8080,
Protocol: "tcp",
},
},
Endpoint: swarm.Endpoint{
Ports: []swarm.PortConfig{
{
PublishMode: "ingress",
PublishedPort: 80,
TargetPort: 8080,
Protocol: "tcp",
},
},
},
@ -152,14 +139,14 @@ func TestServiceContextWriteJSON(t *testing.T) {
ID: "id_baz",
Spec: swarm.ServiceSpec{
Annotations: swarm.Annotations{Name: "baz"},
EndpointSpec: &swarm.EndpointSpec{
Ports: []swarm.PortConfig{
{
PublishMode: "ingress",
PublishedPort: 80,
TargetPort: 8080,
Protocol: "tcp",
},
},
Endpoint: swarm.Endpoint{
Ports: []swarm.PortConfig{
{
PublishMode: "ingress",
PublishedPort: 80,
TargetPort: 8080,
Protocol: "tcp",
},
},
},
@ -168,14 +155,14 @@ func TestServiceContextWriteJSON(t *testing.T) {
ID: "id_bar",
Spec: swarm.ServiceSpec{
Annotations: swarm.Annotations{Name: "bar"},
EndpointSpec: &swarm.EndpointSpec{
Ports: []swarm.PortConfig{
{
PublishMode: "ingress",
PublishedPort: 80,
TargetPort: 8080,
Protocol: "tcp",
},
},
Endpoint: swarm.Endpoint{
Ports: []swarm.PortConfig{
{
PublishMode: "ingress",
PublishedPort: 80,
TargetPort: 8080,
Protocol: "tcp",
},
},
},

View File

@ -4,13 +4,14 @@ import (
"fmt"
"sync"
"github.com/docker/docker/pkg/stringid"
units "github.com/docker/go-units"
)
const (
winOSType = "windows"
defaultStatsTableFormat = "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.MemPerc}}\t{{.NetIO}}\t{{.BlockIO}}\t{{.PIDs}}"
winDefaultStatsTableFormat = "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.NetIO}}\t{{.BlockIO}}"
defaultStatsTableFormat = "table {{.ID}}\t{{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.MemPerc}}\t{{.NetIO}}\t{{.BlockIO}}\t{{.PIDs}}"
winDefaultStatsTableFormat = "table {{.ID}}\t{{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.NetIO}}\t{{.BlockIO}}"
containerHeader = "CONTAINER"
cpuPercHeader = "CPU %"
@ -114,12 +115,13 @@ func NewContainerStats(container string) *ContainerStats {
}
// ContainerStatsWrite renders the context for a list of containers statistics
func ContainerStatsWrite(ctx Context, containerStats []StatsEntry, osType string) error {
func ContainerStatsWrite(ctx Context, containerStats []StatsEntry, osType string, trunc bool) error {
render := func(format func(subContext subContext) error) error {
for _, cstats := range containerStats {
containerStatsCtx := &containerStatsContext{
s: cstats,
os: osType,
s: cstats,
os: osType,
trunc: trunc,
}
if err := format(containerStatsCtx); err != nil {
return err
@ -149,8 +151,9 @@ func ContainerStatsWrite(ctx Context, containerStats []StatsEntry, osType string
type containerStatsContext struct {
HeaderContext
s StatsEntry
os string
s StatsEntry
os string
trunc bool
}
func (c *containerStatsContext) MarshalJSON() ([]byte, error) {
@ -169,6 +172,9 @@ func (c *containerStatsContext) Name() string {
}
func (c *containerStatsContext) ID() string {
if c.trunc {
return stringid.TruncateID(c.s.ID)
}
return c.s.ID
}

View File

@ -114,7 +114,7 @@ container2 --
}
var out bytes.Buffer
te.context.Output = &out
err := ContainerStatsWrite(te.context, stats, "linux")
err := ContainerStatsWrite(te.context, stats, "linux", false)
if err != nil {
assert.EqualError(t, err, te.expected)
} else {
@ -180,7 +180,7 @@ container2 -- --
}
var out bytes.Buffer
te.context.Output = &out
err := ContainerStatsWrite(te.context, stats, "windows")
err := ContainerStatsWrite(te.context, stats, "windows", false)
if err != nil {
assert.EqualError(t, err, te.expected)
} else {
@ -220,7 +220,7 @@ func TestContainerStatsContextWriteWithNoStats(t *testing.T) {
}
for _, context := range contexts {
ContainerStatsWrite(context.context, []StatsEntry{}, "linux")
ContainerStatsWrite(context.context, []StatsEntry{}, "linux", false)
assert.Equal(t, context.expected, out.String())
// Clean buffer
out.Reset()
@ -258,7 +258,41 @@ func TestContainerStatsContextWriteWithNoStatsWindows(t *testing.T) {
}
for _, context := range contexts {
ContainerStatsWrite(context.context, []StatsEntry{}, "windows")
ContainerStatsWrite(context.context, []StatsEntry{}, "windows", false)
assert.Equal(t, context.expected, out.String())
// Clean buffer
out.Reset()
}
}
func TestContainerStatsContextWriteTrunc(t *testing.T) {
var out bytes.Buffer
contexts := []struct {
context Context
trunc bool
expected string
}{
{
Context{
Format: "{{.ID}}",
Output: &out,
},
false,
"b95a83497c9161c9b444e3d70e1a9dfba0c1840d41720e146a95a08ebf938afc\n",
},
{
Context{
Format: "{{.ID}}",
Output: &out,
},
true,
"b95a83497c91\n",
},
}
for _, context := range contexts {
ContainerStatsWrite(context.context, []StatsEntry{{ID: "b95a83497c9161c9b444e3d70e1a9dfba0c1840d41720e146a95a08ebf938afc"}}, "linux", context.trunc)
assert.Equal(t, context.expected, out.String())
// Clean buffer
out.Reset()

View File

@ -7,6 +7,7 @@ import (
"testing"
"github.com/docker/docker/api/types/swarm"
"github.com/gotestyourself/gotestyourself/golden"
"github.com/stretchr/testify/assert"
)
@ -33,10 +34,7 @@ taskID2
},
{
Context{Format: NewTaskFormat("table {{.Name}}\t{{.Node}}\t{{.Ports}}", false)},
`NAME NODE PORTS
foobar_baz foo1
foobar_bar foo2
`,
string(golden.Get(t, "task-context-write-table-custom.golden")),
},
{
Context{Format: NewTaskFormat("table {{.Name}}", true)},

View File

@ -0,0 +1,3 @@
CONTAINER ID IMAGE CREATED/STATUS/ PORTS .NAMES STATUS
conta "ubuntu" 24 hours ago//.FOOBAR_BAZ
conta "ubuntu" 24 hours ago//.FOOBAR_BAR

View File

@ -0,0 +1,5 @@
TYPE ACTIVE
Images 0
Containers 0
Local Volumes 0
Build Cache

View File

@ -0,0 +1,24 @@
type: Images
total: 0
active: 0
size: 0B
reclaimable: 0B
type: Containers
total: 0
active: 0
size: 0B
reclaimable: 0B
type: Local Volumes
total: 0
active: 0
size: 0B
reclaimable: 0B
type: Build Cache
total:
active:
size: 0B
reclaimable: 0B

View File

@ -0,0 +1,2 @@
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
result1 Official build 5000 [OK]

View File

@ -0,0 +1,3 @@
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
result1 Official build 5000 [OK]
result2 Not official 5 [OK]

View File

@ -0,0 +1,14 @@
id: id_baz
name: baz
mode: global
replicas: 2/4
image:
ports: *:80->8080/tcp
id: id_bar
name: bar
mode: replicated
replicas: 2/4
image:
ports: *:80->8080/tcp

View File

@ -0,0 +1,3 @@
NAME NODE PORTS
foobar_baz foo1
foobar_bar foo2

View File

@ -0,0 +1,150 @@
package formatter
import (
"sort"
"strings"
"github.com/docker/docker/pkg/stringid"
)
const (
defaultTrustTagTableFormat = "table {{.SignedTag}}\t{{.Digest}}\t{{.Signers}}"
signedTagNameHeader = "SIGNED TAG"
trustedDigestHeader = "DIGEST"
signersHeader = "SIGNERS"
defaultSignerInfoTableFormat = "table {{.Signer}}\t{{.Keys}}"
signerNameHeader = "SIGNER"
keysHeader = "KEYS"
)
// SignedTagInfo represents all formatted information needed to describe a signed tag:
// Name: name of the signed tag
// Digest: hex encoded digest of the contents
// Signers: list of entities who signed the tag
type SignedTagInfo struct {
Name string
Digest string
Signers []string
}
// SignerInfo represents all formatted information needed to describe a signer:
// Name: name of the signer role
// Keys: the keys associated with the signer
type SignerInfo struct {
Name string
Keys []string
}
// NewTrustTagFormat returns a Format for rendering using a trusted tag Context
func NewTrustTagFormat() Format {
return defaultTrustTagTableFormat
}
// NewSignerInfoFormat returns a Format for rendering a signer role info Context
func NewSignerInfoFormat() Format {
return defaultSignerInfoTableFormat
}
// TrustTagWrite writes the context
func TrustTagWrite(ctx Context, signedTagInfoList []SignedTagInfo) error {
render := func(format func(subContext subContext) error) error {
for _, signedTag := range signedTagInfoList {
if err := format(&trustTagContext{s: signedTag}); err != nil {
return err
}
}
return nil
}
trustTagCtx := trustTagContext{}
trustTagCtx.header = trustTagHeaderContext{
"SignedTag": signedTagNameHeader,
"Digest": trustedDigestHeader,
"Signers": signersHeader,
}
return ctx.Write(&trustTagCtx, render)
}
type trustTagHeaderContext map[string]string
type trustTagContext struct {
HeaderContext
s SignedTagInfo
}
// SignedTag returns the name of the signed tag
func (c *trustTagContext) SignedTag() string {
return c.s.Name
}
// Digest returns the hex encoded digest associated with this signed tag
func (c *trustTagContext) Digest() string {
return c.s.Digest
}
// Signers returns the sorted list of entities who signed this tag
func (c *trustTagContext) Signers() string {
sort.Strings(c.s.Signers)
return strings.Join(c.s.Signers, ", ")
}
// SignerInfoWrite writes the context
func SignerInfoWrite(ctx Context, signerInfoList []SignerInfo) error {
render := func(format func(subContext subContext) error) error {
for _, signerInfo := range signerInfoList {
if err := format(&signerInfoContext{
trunc: ctx.Trunc,
s: signerInfo,
}); err != nil {
return err
}
}
return nil
}
signerInfoCtx := signerInfoContext{}
signerInfoCtx.header = signerInfoHeaderContext{
"Signer": signerNameHeader,
"Keys": keysHeader,
}
return ctx.Write(&signerInfoCtx, render)
}
type signerInfoHeaderContext map[string]string
type signerInfoContext struct {
HeaderContext
trunc bool
s SignerInfo
}
// Keys returns the sorted list of keys associated with the signer
func (c *signerInfoContext) Keys() string {
sort.Strings(c.s.Keys)
truncatedKeys := []string{}
if c.trunc {
for _, keyID := range c.s.Keys {
truncatedKeys = append(truncatedKeys, stringid.TruncateID(keyID))
}
return strings.Join(truncatedKeys, ", ")
}
return strings.Join(c.s.Keys, ", ")
}
// Signer returns the name of the signer
func (c *signerInfoContext) Signer() string {
return c.s.Name
}
// SignerInfoList helps sort []SignerInfo by signer names
type SignerInfoList []SignerInfo
func (signerInfoComp SignerInfoList) Len() int {
return len(signerInfoComp)
}
func (signerInfoComp SignerInfoList) Less(i, j int) bool {
return signerInfoComp[i].Name < signerInfoComp[j].Name
}
func (signerInfoComp SignerInfoList) Swap(i, j int) {
signerInfoComp[i], signerInfoComp[j] = signerInfoComp[j], signerInfoComp[i]
}

View File

@ -0,0 +1,238 @@
package formatter
import (
"bytes"
"testing"
"github.com/docker/docker/pkg/stringid"
"github.com/stretchr/testify/assert"
)
func TestTrustTag(t *testing.T) {
digest := stringid.GenerateRandomID()
trustedTag := "tag"
var ctx trustTagContext
cases := []struct {
trustTagCtx trustTagContext
expValue string
call func() string
}{
{
trustTagContext{
s: SignedTagInfo{Name: trustedTag,
Digest: digest,
Signers: nil,
},
},
digest,
ctx.Digest,
},
{
trustTagContext{
s: SignedTagInfo{Name: trustedTag,
Digest: digest,
Signers: nil,
},
},
trustedTag,
ctx.SignedTag,
},
// Empty signers makes a row with empty string
{
trustTagContext{
s: SignedTagInfo{Name: trustedTag,
Digest: digest,
Signers: nil,
},
},
"",
ctx.Signers,
},
{
trustTagContext{
s: SignedTagInfo{Name: trustedTag,
Digest: digest,
Signers: []string{"alice", "bob", "claire"},
},
},
"alice, bob, claire",
ctx.Signers,
},
// alphabetic signing on Signers
{
trustTagContext{
s: SignedTagInfo{Name: trustedTag,
Digest: digest,
Signers: []string{"claire", "bob", "alice"},
},
},
"alice, bob, claire",
ctx.Signers,
},
}
for _, c := range cases {
ctx = c.trustTagCtx
v := c.call()
if v != c.expValue {
t.Fatalf("Expected %s, was %s\n", c.expValue, v)
}
}
}
func TestTrustTagContextWrite(t *testing.T) {
cases := []struct {
context Context
expected string
}{
// Errors
{
Context{
Format: "{{InvalidFunction}}",
},
`Template parsing error: template: :1: function "InvalidFunction" not defined
`,
},
{
Context{
Format: "{{nil}}",
},
`Template parsing error: template: :1:2: executing "" at <nil>: nil is not a command
`,
},
// Table Format
{
Context{
Format: NewTrustTagFormat(),
},
`SIGNED TAG DIGEST SIGNERS
tag1 deadbeef alice
tag2 aaaaaaaa alice, bob
tag3 bbbbbbbb
`,
},
}
for _, testcase := range cases {
signedTags := []SignedTagInfo{
{Name: "tag1", Digest: "deadbeef", Signers: []string{"alice"}},
{Name: "tag2", Digest: "aaaaaaaa", Signers: []string{"alice", "bob"}},
{Name: "tag3", Digest: "bbbbbbbb", Signers: []string{}},
}
out := bytes.NewBufferString("")
testcase.context.Output = out
err := TrustTagWrite(testcase.context, signedTags)
if err != nil {
assert.EqualError(t, err, testcase.expected)
} else {
assert.Equal(t, testcase.expected, out.String())
}
}
}
// With no trust data, the TrustTagWrite will print an empty table:
// it's up to the caller to decide whether or not to print this versus an error
func TestTrustTagContextEmptyWrite(t *testing.T) {
emptyCase := struct {
context Context
expected string
}{
Context{
Format: NewTrustTagFormat(),
},
`SIGNED TAG DIGEST SIGNERS
`,
}
emptySignedTags := []SignedTagInfo{}
out := bytes.NewBufferString("")
emptyCase.context.Output = out
err := TrustTagWrite(emptyCase.context, emptySignedTags)
assert.NoError(t, err)
assert.Equal(t, emptyCase.expected, out.String())
}
func TestSignerInfoContextEmptyWrite(t *testing.T) {
emptyCase := struct {
context Context
expected string
}{
Context{
Format: NewSignerInfoFormat(),
},
`SIGNER KEYS
`,
}
emptySignerInfo := []SignerInfo{}
out := bytes.NewBufferString("")
emptyCase.context.Output = out
err := SignerInfoWrite(emptyCase.context, emptySignerInfo)
assert.NoError(t, err)
assert.Equal(t, emptyCase.expected, out.String())
}
func TestSignerInfoContextWrite(t *testing.T) {
cases := []struct {
context Context
expected string
}{
// Errors
{
Context{
Format: "{{InvalidFunction}}",
},
`Template parsing error: template: :1: function "InvalidFunction" not defined
`,
},
{
Context{
Format: "{{nil}}",
},
`Template parsing error: template: :1:2: executing "" at <nil>: nil is not a command
`,
},
// Table Format
{
Context{
Format: NewSignerInfoFormat(),
Trunc: true,
},
`SIGNER KEYS
alice key11, key12
bob key21
eve foobarbazqux, key31, key32
`,
},
// No truncation
{
Context{
Format: NewSignerInfoFormat(),
},
`SIGNER KEYS
alice key11, key12
bob key21
eve foobarbazquxquux, key31, key32
`,
},
}
for _, testcase := range cases {
signerInfo := SignerInfoList{
{Name: "alice", Keys: []string{"key11", "key12"}},
{Name: "bob", Keys: []string{"key21"}},
{Name: "eve", Keys: []string{"key31", "key32", "foobarbazquxquux"}},
}
out := bytes.NewBufferString("")
testcase.context.Output = out
err := SignerInfoWrite(testcase.context, signerInfo)
if err != nil {
assert.EqualError(t, err, testcase.expected)
} else {
assert.Equal(t, testcase.expected, out.String())
}
}
}

View File

@ -5,7 +5,7 @@ import (
"github.com/docker/docker/api/types/swarm"
// Import builders to get the builder function as package function
. "github.com/docker/cli/cli/internal/test/builders"
. "github.com/docker/cli/internal/test/builders"
"github.com/pkg/errors"
"github.com/stretchr/testify/assert"
"golang.org/x/net/context"

View File

@ -12,7 +12,6 @@ import (
"regexp"
"runtime"
"github.com/Sirupsen/logrus"
"github.com/docker/cli/cli"
"github.com/docker/cli/cli/command"
"github.com/docker/cli/cli/command/image/build"
@ -22,12 +21,14 @@ import (
"github.com/docker/docker/api/types"
"github.com/docker/docker/api/types/container"
"github.com/docker/docker/pkg/archive"
"github.com/docker/docker/pkg/idtools"
"github.com/docker/docker/pkg/jsonmessage"
"github.com/docker/docker/pkg/progress"
"github.com/docker/docker/pkg/streamformatter"
"github.com/docker/docker/pkg/urlutil"
units "github.com/docker/go-units"
"github.com/pkg/errors"
"github.com/sirupsen/logrus"
"github.com/spf13/cobra"
"golang.org/x/net/context"
)
@ -243,6 +244,7 @@ func runBuild(dockerCli command.Cli, options buildOptions) error {
excludes = build.TrimBuildFilesFromExcludes(excludes, relDockerfile, options.dockerfileFromStdin())
buildCtx, err = archive.TarWithOptions(contextDir, &archive.TarOptions{
ExcludePatterns: excludes,
ChownOpts: &idtools.IDPair{UID: 0, GID: 0},
})
if err != nil {
return err
@ -376,13 +378,13 @@ func runBuild(dockerCli command.Cli, options buildOptions) error {
if s != nil {
go func() {
logrus.Debugf("running session: %v", s.UUID())
logrus.Debugf("running session: %v", s.ID())
if err := s.Run(ctx, dockerCli.Client().DialSession); err != nil {
logrus.Error(err)
cancel() // cancel progress context
}
}()
buildOptions.SessionID = s.UUID()
buildOptions.SessionID = s.ID()
}
response, err := dockerCli.Client().ImageBuild(ctx, body, buildOptions)

View File

@ -11,8 +11,8 @@ import (
"strings"
"testing"
"github.com/docker/cli/internal/test/testutil"
"github.com/docker/docker/pkg/archive"
"github.com/docker/docker/pkg/testutil"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)

View File

@ -17,9 +17,9 @@ import (
"github.com/docker/cli/cli/command/image/build"
cliconfig "github.com/docker/cli/cli/config"
"github.com/docker/docker/api/types/versions"
"github.com/docker/docker/client/session"
"github.com/docker/docker/client/session/filesync"
"github.com/docker/docker/pkg/progress"
"github.com/moby/buildkit/session"
"github.com/moby/buildkit/session/filesync"
"github.com/pkg/errors"
"golang.org/x/time/rate"
)
@ -53,7 +53,9 @@ func addDirToSession(session *session.Session, contextDir string, progressOutput
p := &sizeProgress{out: progressOutput, action: "Streaming build context to Docker daemon"}
workdirProvider := filesync.NewFSSyncProvider(contextDir, excludes)
workdirProvider := filesync.NewFSSyncProvider([]filesync.SyncedDir{
{Dir: contextDir, Excludes: excludes},
})
session.Allow(workdirProvider)
// this will be replaced on parallel build jobs. keep the current

View File

@ -6,18 +6,57 @@ import (
"io/ioutil"
"os"
"path/filepath"
"runtime"
"sort"
"syscall"
"testing"
"github.com/docker/cli/cli/command"
"github.com/docker/cli/cli/internal/test"
"github.com/docker/cli/internal/test"
"github.com/docker/docker/api/types"
"github.com/docker/docker/pkg/archive"
"github.com/gotestyourself/gotestyourself/fs"
"github.com/gotestyourself/gotestyourself/skip"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"golang.org/x/net/context"
)
func TestRunBuildResetsUidAndGidInContext(t *testing.T) {
skip.IfCondition(t, runtime.GOOS == "windows", "uid and gid not relevant on windows")
dest := fs.NewDir(t, "test-build-context-dest")
defer dest.Remove()
fakeImageBuild := func(_ context.Context, context io.Reader, options types.ImageBuildOptions) (types.ImageBuildResponse, error) {
assert.NoError(t, archive.Untar(context, dest.Path(), nil))
body := new(bytes.Buffer)
return types.ImageBuildResponse{Body: ioutil.NopCloser(body)}, nil
}
cli := test.NewFakeCli(&fakeClient{imageBuildFunc: fakeImageBuild})
dir := fs.NewDir(t, "test-build-context",
fs.WithFile("foo", "some content", fs.AsUser(65534, 65534)),
fs.WithFile("Dockerfile", `
FROM alpine:3.6
COPY foo bar /
`),
)
defer dir.Remove()
options := newBuildOptions()
options.context = dir.Path()
err := runBuild(cli, options)
require.NoError(t, err)
files, err := ioutil.ReadDir(dest.Path())
require.NoError(t, err)
for _, fileInfo := range files {
assert.Equal(t, uint32(0), fileInfo.Sys().(*syscall.Stat_t).Uid)
assert.Equal(t, uint32(0), fileInfo.Sys().(*syscall.Stat_t).Gid)
}
}
func TestRunBuildDockerfileFromStdinWithCompress(t *testing.T) {
dest, err := ioutil.TempDir("", "test-build-compress-dest")
require.NoError(t, err)
@ -68,3 +107,37 @@ func TestRunBuildDockerfileFromStdinWithCompress(t *testing.T) {
sort.Strings(actual)
assert.Equal(t, []string{dockerfileName, ".dockerignore", "foo"}, actual)
}
// TestRunBuildFromLocalGitHubDirNonExistingRepo tests that build contexts
// starting with `github.com/` are special-cased, and the build command attempts
// to clone the remote repo.
func TestRunBuildFromGitHubSpecialCase(t *testing.T) {
cmd := NewBuildCommand(test.NewFakeCli(nil))
cmd.SetArgs([]string{"github.com/docker/no-such-repository"})
cmd.SetOutput(ioutil.Discard)
err := cmd.Execute()
assert.Error(t, err)
assert.Contains(t, err.Error(), "unable to prepare context: unable to 'git clone'")
}
// TestRunBuildFromLocalGitHubDirNonExistingRepo tests that a local directory
// starting with `github.com` takes precedence over the `github.com` special
// case.
func TestRunBuildFromLocalGitHubDir(t *testing.T) {
tmpDir, err := ioutil.TempDir("", "docker-build-from-local-dir-")
require.NoError(t, err)
defer os.RemoveAll(tmpDir)
buildDir := filepath.Join(tmpDir, "github.com", "docker", "no-such-repository")
err = os.MkdirAll(buildDir, 0777)
require.NoError(t, err)
err = ioutil.WriteFile(filepath.Join(buildDir, "Dockerfile"), []byte("FROM busybox\n"), 0644)
require.NoError(t, err)
client := test.NewFakeCli(&fakeClient{})
cmd := NewBuildCommand(client)
cmd.SetArgs([]string{buildDir})
cmd.SetOutput(ioutil.Discard)
err = cmd.Execute()
require.NoError(t, err)
}

View File

@ -3,14 +3,13 @@ package image
import (
"fmt"
"io/ioutil"
"regexp"
"testing"
"time"
"github.com/docker/cli/cli/internal/test"
"github.com/docker/cli/internal/test"
"github.com/docker/cli/internal/test/testutil"
"github.com/docker/docker/api/types/image"
"github.com/docker/docker/pkg/testutil"
"github.com/docker/docker/pkg/testutil/golden"
"github.com/gotestyourself/gotestyourself/golden"
"github.com/pkg/errors"
"github.com/stretchr/testify/assert"
)
@ -25,7 +24,7 @@ func TestNewHistoryCommandErrors(t *testing.T) {
{
name: "wrong-args",
args: []string{},
expectedError: "requires exactly 1 argument(s).",
expectedError: "requires exactly 1 argument.",
},
{
name: "client-error",
@ -96,11 +95,9 @@ func TestNewHistoryCommandSuccess(t *testing.T) {
assert.NoError(t, err)
actual := cli.OutBuffer().String()
if tc.outputRegex == "" {
expected := string(golden.Get(t, []byte(actual), fmt.Sprintf("history-command-success.%s.golden", tc.name))[:])
testutil.EqualNormalizedString(t, testutil.RemoveSpace, actual, expected)
golden.Assert(t, actual, fmt.Sprintf("history-command-success.%s.golden", tc.name))
} else {
match, _ := regexp.MatchString(tc.outputRegex, actual)
assert.True(t, match)
assert.Regexp(t, tc.outputRegex, actual)
}
}
}

View File

@ -1,15 +1,14 @@
package image
import (
"bytes"
"io"
"io/ioutil"
"strings"
"testing"
"github.com/docker/cli/cli/internal/test"
"github.com/docker/cli/internal/test"
"github.com/docker/cli/internal/test/testutil"
"github.com/docker/docker/api/types"
"github.com/docker/docker/pkg/testutil"
"github.com/pkg/errors"
"github.com/stretchr/testify/assert"
)
@ -24,7 +23,7 @@ func TestNewImportCommandErrors(t *testing.T) {
{
name: "wrong-args",
args: []string{},
expectedError: "requires at least 1 argument(s).",
expectedError: "requires at least 1 argument.",
},
{
name: "import-failed",
@ -36,8 +35,7 @@ func TestNewImportCommandErrors(t *testing.T) {
},
}
for _, tc := range testCases {
buf := new(bytes.Buffer)
cmd := NewImportCommand(test.NewFakeCliWithOutput(&fakeClient{imageImportFunc: tc.imageImportFunc}, buf))
cmd := NewImportCommand(test.NewFakeCli(&fakeClient{imageImportFunc: tc.imageImportFunc}))
cmd.SetOutput(ioutil.Discard)
cmd.SetArgs(tc.args)
testutil.ErrorContains(t, cmd.Execute(), tc.expectedError)
@ -91,8 +89,7 @@ func TestNewImportCommandSuccess(t *testing.T) {
},
}
for _, tc := range testCases {
buf := new(bytes.Buffer)
cmd := NewImportCommand(test.NewFakeCliWithOutput(&fakeClient{imageImportFunc: tc.imageImportFunc}, buf))
cmd := NewImportCommand(test.NewFakeCli(&fakeClient{imageImportFunc: tc.imageImportFunc}))
cmd.SetOutput(ioutil.Discard)
cmd.SetArgs(tc.args)
assert.NoError(t, cmd.Execute())

View File

@ -1,15 +1,14 @@
package image
import (
"bytes"
"fmt"
"io/ioutil"
"testing"
"github.com/docker/cli/cli/internal/test"
"github.com/docker/cli/internal/test"
"github.com/docker/cli/internal/test/testutil"
"github.com/docker/docker/api/types"
"github.com/docker/docker/pkg/testutil"
"github.com/docker/docker/pkg/testutil/golden"
"github.com/gotestyourself/gotestyourself/golden"
"github.com/stretchr/testify/assert"
)
@ -22,12 +21,11 @@ func TestNewInspectCommandErrors(t *testing.T) {
{
name: "wrong-args",
args: []string{},
expectedError: "requires at least 1 argument(s).",
expectedError: "requires at least 1 argument.",
},
}
for _, tc := range testCases {
buf := new(bytes.Buffer)
cmd := newInspectCommand(test.NewFakeCliWithOutput(&fakeClient{}, buf))
cmd := newInspectCommand(test.NewFakeCli(&fakeClient{}))
cmd.SetOutput(ioutil.Discard)
cmd.SetArgs(tc.args)
testutil.ErrorContains(t, cmd.Execute(), tc.expectedError)
@ -78,15 +76,13 @@ func TestNewInspectCommandSuccess(t *testing.T) {
}
for _, tc := range testCases {
imageInspectInvocationCount = 0
buf := new(bytes.Buffer)
cmd := newInspectCommand(test.NewFakeCliWithOutput(&fakeClient{imageInspectFunc: tc.imageInspectFunc}, buf))
cli := test.NewFakeCli(&fakeClient{imageInspectFunc: tc.imageInspectFunc})
cmd := newInspectCommand(cli)
cmd.SetOutput(ioutil.Discard)
cmd.SetArgs(tc.args)
err := cmd.Execute()
assert.NoError(t, err)
actual := buf.String()
expected := string(golden.Get(t, []byte(actual), fmt.Sprintf("inspect-command-success.%s.golden", tc.name))[:])
testutil.EqualNormalizedString(t, testutil.RemoveSpace, actual, expected)
golden.Assert(t, cli.OutBuffer().String(), fmt.Sprintf("inspect-command-success.%s.golden", tc.name))
assert.Equal(t, imageInspectInvocationCount, tc.imageCount)
}
}

View File

@ -1,16 +1,15 @@
package image
import (
"bytes"
"fmt"
"io/ioutil"
"testing"
"github.com/docker/cli/cli/config/configfile"
"github.com/docker/cli/cli/internal/test"
"github.com/docker/cli/internal/test"
"github.com/docker/cli/internal/test/testutil"
"github.com/docker/docker/api/types"
"github.com/docker/docker/pkg/testutil"
"github.com/docker/docker/pkg/testutil/golden"
"github.com/gotestyourself/gotestyourself/golden"
"github.com/pkg/errors"
"github.com/stretchr/testify/assert"
)
@ -25,7 +24,7 @@ func TestNewImagesCommandErrors(t *testing.T) {
{
name: "wrong-args",
args: []string{"arg1", "arg2"},
expectedError: "requires at most 1 argument(s).",
expectedError: "requires at most 1 argument.",
},
{
name: "failed-list",
@ -80,17 +79,14 @@ func TestNewImagesCommandSuccess(t *testing.T) {
},
}
for _, tc := range testCases {
buf := new(bytes.Buffer)
cli := test.NewFakeCliWithOutput(&fakeClient{imageListFunc: tc.imageListFunc}, buf)
cli := test.NewFakeCli(&fakeClient{imageListFunc: tc.imageListFunc})
cli.SetConfigFile(&configfile.ConfigFile{ImagesFormat: tc.imageFormat})
cmd := NewImagesCommand(cli)
cmd.SetOutput(ioutil.Discard)
cmd.SetArgs(tc.args)
err := cmd.Execute()
assert.NoError(t, err)
actual := buf.String()
expected := string(golden.Get(t, []byte(actual), fmt.Sprintf("list-command-success.%s.golden", tc.name))[:])
testutil.EqualNormalizedString(t, testutil.RemoveSpace, actual, expected)
golden.Assert(t, cli.OutBuffer().String(), fmt.Sprintf("list-command-success.%s.golden", tc.name))
}
}

View File

@ -1,17 +1,16 @@
package image
import (
"bytes"
"fmt"
"io"
"io/ioutil"
"strings"
"testing"
"github.com/docker/cli/cli/internal/test"
"github.com/docker/cli/internal/test"
"github.com/docker/cli/internal/test/testutil"
"github.com/docker/docker/api/types"
"github.com/docker/docker/pkg/testutil"
"github.com/docker/docker/pkg/testutil/golden"
"github.com/gotestyourself/gotestyourself/golden"
"github.com/pkg/errors"
"github.com/stretchr/testify/assert"
)
@ -27,7 +26,7 @@ func TestNewLoadCommandErrors(t *testing.T) {
{
name: "wrong-args",
args: []string{"arg"},
expectedError: "accepts no argument(s).",
expectedError: "accepts no arguments.",
},
{
name: "input-to-terminal",
@ -92,14 +91,12 @@ func TestNewLoadCommandSuccess(t *testing.T) {
},
}
for _, tc := range testCases {
buf := new(bytes.Buffer)
cmd := NewLoadCommand(test.NewFakeCliWithOutput(&fakeClient{imageLoadFunc: tc.imageLoadFunc}, buf))
cli := test.NewFakeCli(&fakeClient{imageLoadFunc: tc.imageLoadFunc})
cmd := NewLoadCommand(cli)
cmd.SetOutput(ioutil.Discard)
cmd.SetArgs(tc.args)
err := cmd.Execute()
assert.NoError(t, err)
actual := buf.String()
expected := string(golden.Get(t, []byte(actual), fmt.Sprintf("load-command-success.%s.golden", tc.name))[:])
testutil.EqualNormalizedString(t, testutil.RemoveSpace, actual, expected)
golden.Assert(t, cli.OutBuffer().String(), fmt.Sprintf("load-command-success.%s.golden", tc.name))
}
}

View File

@ -1,16 +1,15 @@
package image
import (
"bytes"
"fmt"
"io/ioutil"
"testing"
"github.com/docker/cli/cli/internal/test"
"github.com/docker/cli/internal/test"
"github.com/docker/cli/internal/test/testutil"
"github.com/docker/docker/api/types"
"github.com/docker/docker/api/types/filters"
"github.com/docker/docker/pkg/testutil"
"github.com/docker/docker/pkg/testutil/golden"
"github.com/gotestyourself/gotestyourself/golden"
"github.com/pkg/errors"
"github.com/stretchr/testify/assert"
)
@ -25,7 +24,7 @@ func TestNewPruneCommandErrors(t *testing.T) {
{
name: "wrong-args",
args: []string{"something"},
expectedError: "accepts no argument(s).",
expectedError: "accepts no arguments.",
},
{
name: "prune-error",
@ -37,10 +36,9 @@ func TestNewPruneCommandErrors(t *testing.T) {
},
}
for _, tc := range testCases {
buf := new(bytes.Buffer)
cmd := NewPruneCommand(test.NewFakeCliWithOutput(&fakeClient{
cmd := NewPruneCommand(test.NewFakeCli(&fakeClient{
imagesPruneFunc: tc.imagesPruneFunc,
}, buf))
}))
cmd.SetOutput(ioutil.Discard)
cmd.SetArgs(tc.args)
testutil.ErrorContains(t, cmd.Execute(), tc.expectedError)
@ -85,16 +83,12 @@ func TestNewPruneCommandSuccess(t *testing.T) {
},
}
for _, tc := range testCases {
buf := new(bytes.Buffer)
cmd := NewPruneCommand(test.NewFakeCliWithOutput(&fakeClient{
imagesPruneFunc: tc.imagesPruneFunc,
}, buf))
cli := test.NewFakeCli(&fakeClient{imagesPruneFunc: tc.imagesPruneFunc})
cmd := NewPruneCommand(cli)
cmd.SetOutput(ioutil.Discard)
cmd.SetArgs(tc.args)
err := cmd.Execute()
assert.NoError(t, err)
actual := buf.String()
expected := string(golden.Get(t, []byte(actual), fmt.Sprintf("prune-command-success.%s.golden", tc.name))[:])
testutil.EqualNormalizedString(t, testutil.RemoveSpace, actual, expected)
golden.Assert(t, cli.OutBuffer().String(), fmt.Sprintf("prune-command-success.%s.golden", tc.name))
}
}

View File

@ -6,8 +6,8 @@ import (
"github.com/docker/cli/cli"
"github.com/docker/cli/cli/command"
"github.com/docker/cli/cli/trust"
"github.com/docker/distribution/reference"
"github.com/docker/docker/registry"
"github.com/pkg/errors"
"github.com/spf13/cobra"
"golang.org/x/net/context"
@ -40,11 +40,14 @@ func NewPullCommand(dockerCli command.Cli) *cobra.Command {
return cmd
}
func runPull(dockerCli command.Cli, opts pullOptions) error {
distributionRef, err := reference.ParseNormalizedNamed(opts.remote)
func runPull(cli command.Cli, opts pullOptions) error {
ctx := context.Background()
imgRefAndAuth, err := trust.GetImageReferencesAndAuth(ctx, AuthResolver(cli), opts.remote)
if err != nil {
return err
}
distributionRef := imgRefAndAuth.Reference()
if opts.all && !reference.IsNameOnly(distributionRef) {
return errors.New("tag can't be used with --all-tags/-a")
}
@ -52,27 +55,16 @@ func runPull(dockerCli command.Cli, opts pullOptions) error {
if !opts.all && reference.IsNameOnly(distributionRef) {
distributionRef = reference.TagNameOnly(distributionRef)
if tagged, ok := distributionRef.(reference.Tagged); ok {
fmt.Fprintf(dockerCli.Out(), "Using default tag: %s\n", tagged.Tag())
fmt.Fprintf(cli.Out(), "Using default tag: %s\n", tagged.Tag())
}
}
// Resolve the Repository name from fqn to RepositoryInfo
repoInfo, err := registry.ParseRepositoryInfo(distributionRef)
if err != nil {
return err
}
ctx := context.Background()
authConfig := command.ResolveAuthConfig(ctx, dockerCli, repoInfo.Index)
requestPrivilege := command.RegistryAuthenticationPrivilegedFunc(dockerCli, repoInfo.Index, "pull")
// Check if reference has a digest
_, isCanonical := distributionRef.(reference.Canonical)
if command.IsTrusted() && !isCanonical {
err = trustedPull(ctx, dockerCli, repoInfo, distributionRef, authConfig, requestPrivilege)
err = trustedPull(ctx, cli, imgRefAndAuth)
} else {
err = imagePullPrivileged(ctx, dockerCli, authConfig, reference.FamiliarString(distributionRef), requestPrivilege, opts.all)
err = imagePullPrivileged(ctx, cli, imgRefAndAuth, opts.all)
}
if err != nil {
if strings.Contains(err.Error(), "when fetching 'plugin'") {
@ -80,6 +72,5 @@ func runPull(dockerCli command.Cli, opts pullOptions) error {
}
return err
}
return nil
}

View File

@ -5,9 +5,9 @@ import (
"io/ioutil"
"testing"
"github.com/docker/cli/cli/internal/test"
"github.com/docker/docker/pkg/testutil"
"github.com/docker/docker/pkg/testutil/golden"
"github.com/docker/cli/internal/test"
"github.com/docker/cli/internal/test/testutil"
"github.com/gotestyourself/gotestyourself/golden"
"github.com/stretchr/testify/assert"
)
@ -19,7 +19,7 @@ func TestNewPullCommandErrors(t *testing.T) {
}{
{
name: "wrong-args",
expectedError: "requires exactly 1 argument(s).",
expectedError: "requires exactly 1 argument.",
args: []string{},
},
{
@ -32,11 +32,6 @@ func TestNewPullCommandErrors(t *testing.T) {
expectedError: "tag can't be used with --all-tags/-a",
args: []string{"--all-tags", "image:tag"},
},
{
name: "pull-error",
args: []string{"--disable-content-trust=false", "image:tag"},
expectedError: "you are not authorized to perform this operation: server returned 401.",
},
}
for _, tc := range testCases {
cli := test.NewFakeCli(&fakeClient{})
@ -68,8 +63,6 @@ func TestNewPullCommandSuccess(t *testing.T) {
cmd.SetArgs(tc.args)
err := cmd.Execute()
assert.NoError(t, err)
actual := cli.OutBuffer().String()
expected := string(golden.Get(t, []byte(actual), fmt.Sprintf("pull-command-success.%s.golden", tc.name))[:])
testutil.EqualNormalizedString(t, testutil.RemoveSpace, actual, expected)
golden.Assert(t, cli.OutBuffer().String(), fmt.Sprintf("pull-command-success.%s.golden", tc.name))
}
}

View File

@ -48,7 +48,7 @@ func runPush(dockerCli command.Cli, remote string) error {
requestPrivilege := command.RegistryAuthenticationPrivilegedFunc(dockerCli, repoInfo.Index, "push")
if command.IsTrusted() {
return trustedPush(ctx, dockerCli, repoInfo, ref, authConfig, requestPrivilege)
return TrustedPush(ctx, dockerCli, repoInfo, ref, authConfig, requestPrivilege)
}
responseBody, err := imagePushPrivileged(ctx, dockerCli, authConfig, ref, requestPrivilege)

View File

@ -6,9 +6,9 @@ import (
"strings"
"testing"
"github.com/docker/cli/cli/internal/test"
"github.com/docker/cli/internal/test"
"github.com/docker/cli/internal/test/testutil"
"github.com/docker/docker/api/types"
"github.com/docker/docker/pkg/testutil"
"github.com/pkg/errors"
"github.com/stretchr/testify/assert"
)
@ -23,7 +23,7 @@ func TestNewPushCommandErrors(t *testing.T) {
{
name: "wrong-args",
args: []string{},
expectedError: "requires exactly 1 argument(s).",
expectedError: "requires exactly 1 argument.",
},
{
name: "invalid-name",

View File

@ -5,10 +5,10 @@ import (
"io/ioutil"
"testing"
"github.com/docker/cli/cli/internal/test"
"github.com/docker/cli/internal/test"
"github.com/docker/cli/internal/test/testutil"
"github.com/docker/docker/api/types"
"github.com/docker/docker/pkg/testutil"
"github.com/docker/docker/pkg/testutil/golden"
"github.com/gotestyourself/gotestyourself/golden"
"github.com/pkg/errors"
"github.com/stretchr/testify/assert"
)
@ -29,7 +29,7 @@ func TestNewRemoveCommandErrors(t *testing.T) {
}{
{
name: "wrong args",
expectedError: "requires at least 1 argument(s).",
expectedError: "requires at least 1 argument.",
},
{
name: "ImageRemove fail",
@ -96,16 +96,14 @@ func TestNewRemoveCommandSuccess(t *testing.T) {
},
}
for _, tc := range testCases {
fakeCli := test.NewFakeCli(&fakeClient{imageRemoveFunc: tc.imageRemoveFunc})
cmd := NewRemoveCommand(fakeCli)
cli := test.NewFakeCli(&fakeClient{imageRemoveFunc: tc.imageRemoveFunc})
cmd := NewRemoveCommand(cli)
cmd.SetOutput(ioutil.Discard)
cmd.SetArgs(tc.args)
assert.NoError(t, cmd.Execute())
if tc.expectedErrMsg != "" {
assert.Equal(t, tc.expectedErrMsg, fakeCli.ErrBuffer().String())
assert.Equal(t, tc.expectedErrMsg, cli.ErrBuffer().String())
}
actual := fakeCli.OutBuffer().String()
expected := string(golden.Get(t, []byte(actual), fmt.Sprintf("remove-command-success.%s.golden", tc.name))[:])
testutil.EqualNormalizedString(t, testutil.RemoveSpace, actual, expected)
golden.Assert(t, cli.OutBuffer().String(), fmt.Sprintf("remove-command-success.%s.golden", tc.name))
}
}

View File

@ -2,6 +2,8 @@ package image
import (
"io"
"os"
"path/filepath"
"github.com/docker/cli/cli"
"github.com/docker/cli/cli/command"
@ -41,6 +43,10 @@ func runSave(dockerCli command.Cli, opts saveOptions) error {
return errors.New("cowardly refusing to save to a terminal. Use the -o flag or redirect")
}
if err := validateOutputPath(opts.output); err != nil {
return errors.Wrap(err, "failed to save image")
}
responseBody, err := dockerCli.Client().ImageSave(context.Background(), opts.images)
if err != nil {
return err
@ -54,3 +60,13 @@ func runSave(dockerCli command.Cli, opts saveOptions) error {
return command.CopyToFile(opts.output, responseBody)
}
func validateOutputPath(path string) error {
dir := filepath.Dir(path)
if dir != "" && dir != "." {
if _, err := os.Stat(dir); os.IsNotExist(err) {
return errors.Errorf("unable to validate output path: directory %q does not exist", dir)
}
}
return nil
}

View File

@ -1,15 +1,14 @@
package image
import (
"bytes"
"io"
"io/ioutil"
"os"
"strings"
"testing"
"github.com/docker/cli/cli/internal/test"
"github.com/docker/docker/pkg/testutil"
"github.com/docker/cli/internal/test"
"github.com/docker/cli/internal/test/testutil"
"github.com/pkg/errors"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
@ -26,7 +25,7 @@ func TestNewSaveCommandErrors(t *testing.T) {
{
name: "wrong args",
args: []string{},
expectedError: "requires at least 1 argument(s).",
expectedError: "requires at least 1 argument.",
},
{
name: "output to terminal",
@ -43,6 +42,11 @@ func TestNewSaveCommandErrors(t *testing.T) {
return ioutil.NopCloser(strings.NewReader("")), errors.Errorf("error saving image")
},
},
{
name: "output directory does not exist",
args: []string{"-o", "fakedir/out.tar", "arg1"},
expectedError: "failed to save image: unable to validate output path: directory \"fakedir\" does not exist",
},
}
for _, tc := range testCases {
cli := test.NewFakeCli(&fakeClient{imageSaveFunc: tc.imageSaveFunc})
@ -85,11 +89,11 @@ func TestNewSaveCommandSuccess(t *testing.T) {
},
}
for _, tc := range testCases {
cmd := NewSaveCommand(test.NewFakeCliWithOutput(&fakeClient{
cmd := NewSaveCommand(test.NewFakeCli(&fakeClient{
imageSaveFunc: func(images []string) (io.ReadCloser, error) {
return ioutil.NopCloser(strings.NewReader("")), nil
},
}, new(bytes.Buffer)))
}))
cmd.SetOutput(ioutil.Discard)
cmd.SetArgs(tc.args)
assert.NoError(t, cmd.Execute())

View File

@ -4,8 +4,8 @@ import (
"io/ioutil"
"testing"
"github.com/docker/cli/cli/internal/test"
"github.com/docker/docker/pkg/testutil"
"github.com/docker/cli/internal/test"
"github.com/docker/cli/internal/test/testutil"
"github.com/stretchr/testify/assert"
)
@ -15,7 +15,7 @@ func TestCliNewTagCommandErrors(t *testing.T) {
{"image1"},
{"image1", "image2", "image3"},
}
expectedError := "\"tag\" requires exactly 2 argument(s)."
expectedError := "\"tag\" requires exactly 2 arguments."
for _, args := range testCases {
cmd := NewTagCommand(test.NewFakeCli(&fakeClient{}))
cmd.SetArgs(args)

View File

@ -5,20 +5,20 @@ import (
"encoding/json"
"fmt"
"io"
"path"
"sort"
"github.com/Sirupsen/logrus"
"github.com/docker/cli/cli/command"
"github.com/docker/cli/cli/trust"
"github.com/docker/distribution/reference"
"github.com/docker/docker/api/types"
registrytypes "github.com/docker/docker/api/types/registry"
"github.com/docker/docker/pkg/jsonmessage"
"github.com/docker/docker/registry"
"github.com/docker/notary/client"
"github.com/docker/notary/tuf/data"
"github.com/opencontainers/go-digest"
digest "github.com/opencontainers/go-digest"
"github.com/pkg/errors"
"github.com/sirupsen/logrus"
"golang.org/x/net/context"
)
@ -28,8 +28,8 @@ type target struct {
size int64
}
// trustedPush handles content trust pushing of an image
func trustedPush(ctx context.Context, cli command.Cli, repoInfo *registry.RepositoryInfo, ref reference.Named, authConfig types.AuthConfig, requestPrivilege types.RequestPrivilegeFunc) error {
// TrustedPush handles content trust pushing of an image
func TrustedPush(ctx context.Context, cli command.Cli, repoInfo *registry.RepositoryInfo, ref reference.Named, authConfig types.AuthConfig, requestPrivilege types.RequestPrivilegeFunc) error {
responseBody, err := imagePushPrivileged(ctx, cli, authConfig, ref, requestPrivilege)
if err != nil {
return err
@ -103,25 +103,25 @@ func PushTrustedReference(streams command.Streams, repoInfo *registry.Repository
fmt.Fprintln(streams.Out(), "Signing and pushing trust metadata")
repo, err := trust.GetNotaryRepository(streams, repoInfo, authConfig, "push", "pull")
repo, err := trust.GetNotaryRepository(streams.In(), streams.Out(), command.UserAgent(), repoInfo, &authConfig, "push", "pull")
if err != nil {
fmt.Fprintf(streams.Out(), "Error establishing connection to notary repository: %s\n", err)
return err
}
// get the latest repository metadata so we can figure out which roles to sign
err = repo.Update(false)
_, err = repo.ListTargets()
switch err.(type) {
case client.ErrRepoNotInitialized, client.ErrRepositoryNotExist:
keys := repo.CryptoService.ListKeys(data.CanonicalRootRole)
keys := repo.GetCryptoService().ListKeys(data.CanonicalRootRole)
var rootKeyID string
// always select the first root key
if len(keys) > 0 {
sort.Strings(keys)
rootKeyID = keys[0]
} else {
rootPublicKey, err := repo.CryptoService.Create(data.CanonicalRootRole, "", data.ECDSAKey)
rootPublicKey, err := repo.GetCryptoService().Create(data.CanonicalRootRole, "", data.ECDSAKey)
if err != nil {
return err
}
@ -136,7 +136,7 @@ func PushTrustedReference(streams command.Streams, repoInfo *registry.Repository
err = repo.AddTarget(target, data.CanonicalTargetsRole)
case nil:
// already initialized and we have successfully downloaded the latest metadata
err = addTargetToAllSignableRoles(repo, target)
err = AddTargetToAllSignableRoles(repo, target)
default:
return trust.NotaryError(repoInfo.Name.Name(), err)
}
@ -154,51 +154,16 @@ func PushTrustedReference(streams command.Streams, repoInfo *registry.Repository
return nil
}
// Attempt to add the image target to all the top level delegation roles we can
// AddTargetToAllSignableRoles attempts to add the image target to all the top level delegation roles we can
// (based on whether we have the signing key and whether the role's path allows
// us to).
// If there are no delegation roles, we add to the targets role.
func addTargetToAllSignableRoles(repo *client.NotaryRepository, target *client.Target) error {
var signableRoles []string
// translate the full key names, which includes the GUN, into just the key IDs
allCanonicalKeyIDs := make(map[string]struct{})
for fullKeyID := range repo.CryptoService.ListAllKeys() {
allCanonicalKeyIDs[path.Base(fullKeyID)] = struct{}{}
}
allDelegationRoles, err := repo.GetDelegationRoles()
func AddTargetToAllSignableRoles(repo client.Repository, target *client.Target) error {
signableRoles, err := trust.GetSignableRoles(repo, target)
if err != nil {
return err
}
// if there are no delegation roles, then just try to sign it into the targets role
if len(allDelegationRoles) == 0 {
return repo.AddTarget(target, data.CanonicalTargetsRole)
}
// there are delegation roles, find every delegation role we have a key for, and
// attempt to sign into into all those roles.
for _, delegationRole := range allDelegationRoles {
// We do not support signing any delegation role that isn't a direct child of the targets role.
// Also don't bother checking the keys if we can't add the target
// to this role due to path restrictions
if path.Dir(delegationRole.Name) != data.CanonicalTargetsRole || !delegationRole.CheckPaths(target.Name) {
continue
}
for _, canonicalKeyID := range delegationRole.KeyIDs {
if _, ok := allCanonicalKeyIDs[canonicalKeyID]; ok {
signableRoles = append(signableRoles, delegationRole.Name)
break
}
}
}
if len(signableRoles) == 0 {
return errors.Errorf("no valid signing keys for delegation roles")
}
return repo.AddTarget(target, signableRoles...)
}
@ -217,57 +182,13 @@ func imagePushPrivileged(ctx context.Context, cli command.Cli, authConfig types.
}
// trustedPull handles content trust pulling of an image
func trustedPull(ctx context.Context, cli command.Cli, repoInfo *registry.RepositoryInfo, ref reference.Named, authConfig types.AuthConfig, requestPrivilege types.RequestPrivilegeFunc) error {
var refs []target
notaryRepo, err := trust.GetNotaryRepository(cli, repoInfo, authConfig, "pull")
func trustedPull(ctx context.Context, cli command.Cli, imgRefAndAuth trust.ImageRefAndAuth) error {
refs, err := getTrustedPullTargets(cli, imgRefAndAuth)
if err != nil {
fmt.Fprintf(cli.Out(), "Error establishing connection to trust repository: %s\n", err)
return err
}
if tagged, isTagged := ref.(reference.NamedTagged); !isTagged {
// List all targets
targets, err := notaryRepo.ListTargets(trust.ReleasesRole, data.CanonicalTargetsRole)
if err != nil {
return trust.NotaryError(ref.Name(), err)
}
for _, tgt := range targets {
t, err := convertTarget(tgt.Target)
if err != nil {
fmt.Fprintf(cli.Out(), "Skipping target for %q\n", reference.FamiliarName(ref))
continue
}
// Only list tags in the top level targets role or the releases delegation role - ignore
// all other delegation roles
if tgt.Role != trust.ReleasesRole && tgt.Role != data.CanonicalTargetsRole {
continue
}
refs = append(refs, t)
}
if len(refs) == 0 {
return trust.NotaryError(ref.Name(), errors.Errorf("No trusted tags for %s", ref.Name()))
}
} else {
t, err := notaryRepo.GetTargetByName(tagged.Tag(), trust.ReleasesRole, data.CanonicalTargetsRole)
if err != nil {
return trust.NotaryError(ref.Name(), err)
}
// Only get the tag if it's in the top level targets role or the releases delegation role
// ignore it if it's in any other delegation roles
if t.Role != trust.ReleasesRole && t.Role != data.CanonicalTargetsRole {
return trust.NotaryError(ref.Name(), errors.Errorf("No trust data for %s", tagged.Tag()))
}
logrus.Debugf("retrieving target for %s role\n", t.Role)
r, err := convertTarget(t.Target)
if err != nil {
return err
}
refs = append(refs, r)
}
ref := imgRefAndAuth.Reference()
for i, r := range refs {
displayTag := r.name
if displayTag != "" {
@ -279,7 +200,7 @@ func trustedPull(ctx context.Context, cli command.Cli, repoInfo *registry.Reposi
if err != nil {
return err
}
if err := imagePullPrivileged(ctx, cli, authConfig, reference.FamiliarString(trustedRef), requestPrivilege, false); err != nil {
if err := imagePullPrivileged(ctx, cli, imgRefAndAuth, false); err != nil {
return err
}
@ -295,13 +216,65 @@ func trustedPull(ctx context.Context, cli command.Cli, repoInfo *registry.Reposi
return nil
}
// imagePullPrivileged pulls the image and displays it to the output
func imagePullPrivileged(ctx context.Context, cli command.Cli, authConfig types.AuthConfig, ref string, requestPrivilege types.RequestPrivilegeFunc, all bool) error {
func getTrustedPullTargets(cli command.Cli, imgRefAndAuth trust.ImageRefAndAuth) ([]target, error) {
notaryRepo, err := cli.NotaryClient(imgRefAndAuth, trust.ActionsPullOnly)
if err != nil {
fmt.Fprintf(cli.Out(), "Error establishing connection to trust repository: %s\n", err)
return nil, err
}
encodedAuth, err := command.EncodeAuthToBase64(authConfig)
ref := imgRefAndAuth.Reference()
tagged, isTagged := ref.(reference.NamedTagged)
if !isTagged {
// List all targets
targets, err := notaryRepo.ListTargets(trust.ReleasesRole, data.CanonicalTargetsRole)
if err != nil {
return nil, trust.NotaryError(ref.Name(), err)
}
var refs []target
for _, tgt := range targets {
t, err := convertTarget(tgt.Target)
if err != nil {
fmt.Fprintf(cli.Out(), "Skipping target for %q\n", reference.FamiliarName(ref))
continue
}
// Only list tags in the top level targets role or the releases delegation role - ignore
// all other delegation roles
if tgt.Role != trust.ReleasesRole && tgt.Role != data.CanonicalTargetsRole {
continue
}
refs = append(refs, t)
}
if len(refs) == 0 {
return nil, trust.NotaryError(ref.Name(), errors.Errorf("No trusted tags for %s", ref.Name()))
}
return refs, nil
}
t, err := notaryRepo.GetTargetByName(tagged.Tag(), trust.ReleasesRole, data.CanonicalTargetsRole)
if err != nil {
return nil, trust.NotaryError(ref.Name(), err)
}
// Only get the tag if it's in the top level targets role or the releases delegation role
// ignore it if it's in any other delegation roles
if t.Role != trust.ReleasesRole && t.Role != data.CanonicalTargetsRole {
return nil, trust.NotaryError(ref.Name(), errors.Errorf("No trust data for %s", tagged.Tag()))
}
logrus.Debugf("retrieving target for %s role\n", t.Role)
r, err := convertTarget(t.Target)
return []target{r}, err
}
// imagePullPrivileged pulls the image and displays it to the output
func imagePullPrivileged(ctx context.Context, cli command.Cli, imgRefAndAuth trust.ImageRefAndAuth, all bool) error {
ref := reference.FamiliarString(imgRefAndAuth.Reference())
encodedAuth, err := command.EncodeAuthToBase64(*imgRefAndAuth.AuthConfig())
if err != nil {
return err
}
requestPrivilege := command.RegistryAuthenticationPrivilegedFunc(cli, imgRefAndAuth.RepoInfo().Index, "pull")
options := types.ImagePullOptions{
RegistryAuth: encodedAuth,
PrivilegeFunc: requestPrivilege,
@ -335,7 +308,7 @@ func TrustedReference(ctx context.Context, cli command.Cli, ref reference.NamedT
// Resolve the Auth config relevant for this server
authConfig := command.ResolveAuthConfig(ctx, cli, repoInfo.Index)
notaryRepo, err := trust.GetNotaryRepository(cli, repoInfo, authConfig, "pull")
notaryRepo, err := trust.GetNotaryRepository(cli.In(), cli.Out(), command.UserAgent(), repoInfo, &authConfig, "pull")
if err != nil {
fmt.Fprintf(cli.Out(), "Error establishing connection to trust repository: %s\n", err)
return nil, err
@ -348,7 +321,7 @@ func TrustedReference(ctx context.Context, cli command.Cli, ref reference.NamedT
// Only list tags in the top level targets role or the releases delegation role - ignore
// all other delegation roles
if t.Role != trust.ReleasesRole && t.Role != data.CanonicalTargetsRole {
return nil, trust.NotaryError(repoInfo.Name.Name(), errors.Errorf("No trust data for %s", ref.Tag()))
return nil, trust.NotaryError(repoInfo.Name.Name(), client.ErrNoSuchTarget(ref.Tag()))
}
r, err := convertTarget(t.Target)
if err != nil {
@ -382,3 +355,10 @@ func TagTrusted(ctx context.Context, cli command.Cli, trustedRef reference.Canon
return cli.Client().ImageTag(ctx, trustedFamiliarRef, familiarRef)
}
// AuthResolver returns an auth resolver function from a command.Cli
func AuthResolver(cli command.Cli) func(ctx context.Context, index *registrytypes.IndexInfo) types.AuthConfig {
return func(ctx context.Context, index *registrytypes.IndexInfo) types.AuthConfig {
return command.ResolveAuthConfig(ctx, cli, index)
}
}

View File

@ -1,12 +1,18 @@
package image
import (
"io/ioutil"
"os"
"testing"
"github.com/docker/cli/cli/trust"
registrytypes "github.com/docker/docker/api/types/registry"
"github.com/docker/docker/registry"
"github.com/docker/notary/client"
"github.com/docker/notary/passphrase"
"github.com/docker/notary/trustpinning"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func unsetENV() {
@ -55,3 +61,15 @@ func TestNonOfficialTrustServer(t *testing.T) {
t.Fatalf("Expected server to be %s, got %s", expectedStr, output)
}
}
func TestAddTargetToAllSignableRolesError(t *testing.T) {
tmpDir, err := ioutil.TempDir("", "notary-test-")
assert.NoError(t, err)
defer os.RemoveAll(tmpDir)
notaryRepo, err := client.NewFileCachedRepository(tmpDir, "gun", "https://localhost", nil, passphrase.ConstantRetriever("password"), trustpinning.TrustPinConfig{})
require.NoError(t, err)
target := client.Target{}
err = AddTargetToAllSignableRoles(notaryRepo, &target)
assert.EqualError(t, err, "client is offline")
}

Some files were not shown because too many files have changed in this diff Show More