Compare commits

..

1028 Commits

Author SHA1 Message Date
Antonio Murdaca 6743a6e665 Merge pull request #16111 from Mashimiao/fix-typo-daemon-daemon
daemon/daemon: fix typo
2015-09-07 09:31:54 +02:00
Ma Shimiao 89f99343ff daemon/daemon: fix typo
Signed-off-by: Ma Shimiao <mashimiao.fnst@cn.fujitsu.com>
2015-09-07 14:43:22 +08:00
Doug Davis 7ce97dbe30 Merge pull request #16102 from HuKeping/rmdeadcode
Remove dead code
2015-09-06 08:40:45 -04:00
Hu Keping c957d9c768 Remove dead code
Signed-off-by: Hu Keping <hukeping@huawei.com>
2015-09-06 19:52:39 +08:00
Sebastiaan van Stijn 8562c423b8 Merge pull request #16091 from sallyom/man-docker-pull
correct man docker-pull
2015-09-05 14:14:11 +02:00
Sven Dowideit e4f721e73e Merge pull request #16082 from sallyom/manDocker
add --insecure-registry warning to online docs
2015-09-05 22:06:45 +10:00
Jessie Frazelle 835acd96ec Merge pull request #15992 from Microsoft/10662-cli
Windows: Get Integration CLI running
2015-09-04 13:38:41 -07:00
Sally O'Malley 73fe42e3db correct man docker-pull
Signed-off-by: Sally O'Malley <somalley@redhat.com>
2015-09-04 16:34:40 -04:00
John Howard f9a3558a9d Windows: Get Integration CLI running
Signed-off-by: John Howard <jhoward@microsoft.com>
2015-09-04 12:32:40 -07:00
Jessie Frazelle bc915d0856 Merge pull request #16087 from Microsoft/turn-off-dockerhubpull-suite
Temp: Turn off dockerhubpullsuite on Win2Linux CI
2015-09-04 12:30:06 -07:00
John Howard 0b18b1b309 Temp: Turn off dockerhubpullsuite on Win2Linux CI
Signed-off-by: John Howard <jhoward@microsoft.com>
2015-09-04 11:53:40 -07:00
Jessie Frazelle 6b14d9a645 Merge pull request #16065 from Microsoft/10662-fix2panics
Fixes 2 panics initialising tests
2015-09-04 11:07:17 -07:00
Jessie Frazelle 5b46d8f0fa Merge pull request #16039 from icecrime/update_pull_tests
Update pull tests
2015-09-04 09:52:41 -07:00
Jessie Frazelle 7c667f9d6e Merge pull request #15999 from cpuguy83/15994_ext_volume_bind
Set bind driver after volume is created
2015-09-04 09:47:10 -07:00
Sally O'Malley 5446aac0e5 add --insecure-registry warning to online docs
Signed-off-by: Sally O'Malley <somalley@redhat.com>
2015-09-04 10:28:35 -04:00
Sebastiaan van Stijn 4a0606423b Merge pull request #16043 from sallyom/manDockerfile
man Dockerfile ADD/COPY/FROM clarify
2015-09-04 10:03:50 +02:00
Sebastiaan van Stijn 409212be24 Merge pull request #16057 from sallyom/manDocker
clarify --insecure-registry in man docker
2015-09-04 09:56:01 +02:00
Alexander Morozov 0009852cb0 Merge pull request #15877 from Microsoft/10662-trigger
Fix trigger count and output
2015-09-03 20:04:05 -07:00
Jessie Frazelle 38ecc7fc32 Merge pull request #16054 from jfrazelle/update-sqlite3-dep
code.google.com is shutting down so update the dep
2015-09-03 19:20:57 -07:00
John Howard 69bf17ffbd Fixes 2 panics initialising tests
Signed-off-by: John Howard <jhoward@microsoft.com>
2015-09-03 18:26:38 -07:00
Jessie Frazelle 90477e8e94 Merge pull request #16066 from jfrazelle/remove-reprepro
remove reprepro
2015-09-03 18:20:01 -07:00
Jessie Frazelle 1fa560e6eb Merge pull request #15706 from clnperez/vendor-helper-use-branch
Allow branch name in vendor-helper script
2015-09-03 18:02:06 -07:00
Tianon Gravi b019229996 Merge pull request #16052 from jfrazelle/fix-release-selinux
make docker-engine-selinux findable
2015-09-03 17:52:39 -07:00
Tibor Vass c8c1c472b2 Merge pull request #15845 from calavera/refactor_daemon_list
Refactor daemon container list.
2015-09-03 20:48:54 -04:00
Tibor Vass 057f53f503 Merge pull request #15846 from ZJU-SEL/11646-fix-path-validations
fix 11646 to check volume path in server side
2015-09-03 20:42:37 -04:00
Jessica Frazelle 4a864a7552 code.google.com is shutting down so update the dep
Signed-off-by: Jessica Frazelle <acidburn@docker.com>
2015-09-03 17:39:29 -07:00
John Howard 6620102926 Fix trigger count and output
Signed-off-by: John Howard <jhoward@microsoft.com>
2015-09-03 17:39:19 -07:00
Jessica Frazelle e7cf75c103 remove reprepro
Signed-off-by: Jessica Frazelle <acidburn@docker.com>
2015-09-03 17:31:49 -07:00
Tibor Vass 07d2eae6d5 Merge pull request #16060 from vdemeester/14756-lint-pkg-term-windows
Lint pkg/term/windows package
2015-09-03 19:54:20 -04:00
Tibor Vass 2d605ce53b Merge pull request #16041 from runcom/portmapping-doc-cleaning
Clean latest api doc from PortMapping and outdated error check
2015-09-03 19:37:34 -04:00
Jessie Frazelle 9b072fb722 Merge pull request #16067 from jfrazelle/fix-release-branch-in-suites-script
fix release branch in suites.sh
2015-09-03 16:33:32 -07:00
Arnaud Porterie f324f4851f Update image pull tests
Update and migrate existing tests to the `DockerHubPullSuite`. Most
tests were preserved, but refactored and made more exhaustive. One test
was deliberately removed (`TestPullVerified`) as it is unreliable and
that the feature was obsoleted by content trust.

Move all trust related tests to `docker_cli_pull_trusted_test.go`.

Move tests depending on a local registry to `docker_cli_pull_local_test.go`.

Signed-off-by: Arnaud Porterie <arnaud.porterie@docker.com>
2015-09-03 15:57:41 -07:00
Arnaud Porterie c87cbd3862 Add integration-cli/checker package
Add a `checker` package that adds some utility Checker implementation,
the first one being `checker.Contains`, as well as brining all go-check
provided Checker implementations in scope as a commodity.

Signed-off-by: Arnaud Porterie <arnaud.porterie@docker.com>
2015-09-03 15:57:41 -07:00
Jessica Frazelle e38a9ecef6 fix release branch in suites.sh
we changed the naming scheme of the release branch

Signed-off-by: Jessica Frazelle <acidburn@docker.com>
2015-09-03 15:48:02 -07:00
Tibor Vass 6ffbea3c94 Merge pull request #16027 from Microsoft/10662-utimes
Windows: Fix dockerfile ADD from HTTP
2015-09-03 18:44:34 -04:00
Tibor Vass f0a5d03400 Merge pull request #16022 from nalind/cgo-windows
Fix a daemon build error when cgo isn't available
2015-09-03 18:42:58 -04:00
Sally O'Malley 2d9ea188d4 clarify --insecure-registry in man docker
Signed-off-by: Sally O'Malley <somalley@redhat.com>
2015-09-03 17:10:40 -04:00
Vincent Demeester 3409de971c Lint pkg/term/windows package
Signed-off-by: Vincent Demeester <vincent@sbr.pm>
2015-09-03 22:25:52 +02:00
Brian Goff 9d0eef55ea Merge pull request #16025 from sallyom/overlayfsSelinux
selinux/overlay incompatible err
2015-09-03 16:08:55 -04:00
Michael Crosby 6f5eb78519 Merge pull request #16018 from surya-shodan/master
Typo in README.md
2015-09-03 11:57:06 -07:00
Michael Crosby 8258996cf2 Merge pull request #16036 from Microsoft/10662-httpdirectory
Windows: Fix HTTP download directory
2015-09-03 11:54:53 -07:00
Michael Crosby 288275ab60 Merge pull request #16038 from aboch/sbx
Vendor libnetwork dc52820147f40fe424c8959987af3b396f842639
2015-09-03 11:48:02 -07:00
Jessica Frazelle c7b3e7e770 make docker-engine-selinux findable
Signed-off-by: Jessica Frazelle <acidburn@docker.com>
2015-09-03 08:58:33 -07:00
Sally O'Malley 48badd2a2e man Dockerfile ADD/COPY/FROM clarify
Signed-off-by: Sally O'Malley <somalley@redhat.com>
2015-09-03 09:08:25 -04:00
David Calavera d9065fcdb5 Merge pull request #16001 from jfrazelle/apt-repo-pinning
use apt-ftparchive and reprepro to enable apt-pinning;
2015-09-03 11:18:54 +02:00
Antonio Murdaca 137c12f19a Clean latest api doc from PortMapping and outdated error check
Regarding the outdated error check, there's no `docker.PortMapping`
struct anymore and this is linked to something really old #1334

Signed-off-by: Antonio Murdaca <runcom@linux.com>
2015-09-03 11:01:55 +02:00
Sebastiaan van Stijn ee4de4d163 Merge pull request #15984 from jlhawn/document_build_auth_config
[docs] Add description of "X-Registry-Config"
2015-09-03 08:40:34 +02:00
Arnaud Porterie 9e4addde76 Add test suite for push/pull code
Introduce the `DockerHubPullSuite` that interacts with its own dedicated
daemon, thus allowing to start from a clean environment and finely test
against the impact of isolated push and pull operations.

Signed-off-by: Arnaud Porterie <arnaud.porterie@docker.com>
2015-09-02 22:06:24 -07:00
Alexander Morozov 2bd30cd6cb Merge pull request #16035 from aaronlehmann/remove-test-push-interrupt
Remove TestPushInterrupt
2015-09-02 21:07:55 -07:00
Alessandro Boch 56fdb05258 Docker changes for libnetwork Sandbox
- Ground-work for integrating with user namespace support

Signed-off-by: Alessandro Boch <aboch@docker.com>
2015-09-02 17:24:56 -07:00
Brian Goff 39be36658d Set bind driver after volume is created
When using a named volume without --volume-driver, the driver was
hardcoded to "local".
Even when the volume was already created by some other driver (and
visible in `docker volume ls`), the container would store in it's own
config that it was the `local` driver.
The external driver would work perfecly fine until the daemon is
restarted, at which point the `local` driver was assumed because that is
as it was set in the container config.

Set the bind driver to the driver returned by createVolume.

Signed-off-by: Brian Goff <cpuguy83@gmail.com>
2015-09-02 20:13:20 -04:00
Brian Goff fb4cce5e53 Merge pull request #16030 from Microsoft/fix-golint-commit
Windows: Fix golint daemon breaking commit
2015-09-02 20:10:33 -04:00
Alessandro Boch 414dfbf681 Vendor libnetwork dc52820147f40fe424c8959987af3b396f842639
Main changes in this vendoring are to allow user name space integration in docker.
And it includes major fix for network namespace handling

Signed-off-by: Alessandro Boch <aboch@docker.com>

Signed-off-by: Alessandro Boch <aboch@docker.com>
2015-09-02 16:57:43 -07:00
John Howard 7beb026f0e Windows: Fix HTTP download directory
Signed-off-by: John Howard <jhoward@microsoft.com>
2015-09-02 16:24:53 -07:00
Jessie Frazelle c6dd451073 Merge pull request #16002 from Microsoft/10662-workdir-platformsemantics
Windows: Ensure workdir handled in platform semantics
2015-09-02 16:09:35 -07:00
Sally O'Malley 04329e0b3e selinux/overlay incompatible err
Signed-off-by: Sally O'Malley <somalley@redhat.com>
2015-09-02 18:52:10 -04:00
Aaron Lehmann 6cc38775bb Remove TestPushInterrupt
This test relies on a race condition, and has been failing often in CI.

Signed-off-by: Aaron Lehmann <aaron.lehmann@docker.com>
2015-09-02 15:30:55 -07:00
John Howard cfddca2bf9 Windows: Fix golint daemon breaking commit
Signed-off-by: John Howard <jhoward@microsoft.com>
2015-09-02 14:36:45 -07:00
John Howard 3715e60c71 Windows: Fix dockerfile ADD from HTTP
Signed-off-by: John Howard <jhoward@microsoft.com>
2015-09-02 13:53:09 -07:00
Jessie Frazelle 2434bd8e63 Merge pull request #15935 from vdemeester/badges-all-the-things
Add more badges :)
2015-09-02 11:07:25 -07:00
Jessica Frazelle 12a71c8954 use apt-ftparchive and reprepro to enable apt-pinning;
Signed-off-by: Jessica Frazelle <acidburn@docker.com>
2015-09-02 09:32:24 -07:00
Jessie Frazelle 8c5d511aa6 Merge pull request #16020 from runcom/remove-port-mapping-field
Remove PortMapping from container NetworkSettings
2015-09-02 09:10:38 -07:00
Nalin Dahyabhai 00ab6d9d47 Fix a daemon build error when cgo isn't available
Avoid duplicate definitions of NewSqliteConn when cgo isn't enabled, so
that we can at least build the daemon.

Signed-off-by: Nalin Dahyabhai <nalin@redhat.com> (github: nalind)
2015-09-02 11:41:42 -04:00
Antonio Murdaca db4f20404d Remove PortMapping from container NetworkSettings
Signed-off-by: Antonio Murdaca <runcom@linux.com>
2015-09-02 14:32:53 +02:00
Suryakumar Sudar dae50f9b5e Typo in README.md
The number of StackOverflow question is 7000, not 7000k. The extra 'k' is redundant.
Signed-off-by: Suryakumar Sudar <suryakumar.sudar@gmail.com>
2015-09-02 15:52:05 +05:30
Antonio Murdaca 9ea7267285 Merge pull request #16014 from angt/angt-patch-2
Fix typo
2015-09-02 11:25:12 +02:00
David Calavera 1ed3cb2b6c Merge pull request #15921 from srust/volume_driver_register_retry
Retry registering a volume driver
2015-09-02 11:24:52 +02:00
Antonio Murdaca 4c54751cab Merge pull request #16007 from toddjcrane/master
Normalized, ungrouped, and sorted names
2015-09-02 11:24:42 +02:00
angt 01059cba78 Fix typo
Signed-off-by: Adrien Gallouët <agallouet@gmail.com>
2015-09-02 10:43:49 +02:00
Todd Crane ed14fe2afa Normalized, ungrouped, and sorted names
Signed-off-by: Todd Crane <todd@toddcrane.com>
2015-09-01 21:57:01 -07:00
John Howard 6c56f917d3 Windows: Ensure workdir handled in platform semantics
Signed-off-by: John Howard <jhoward@microsoft.com>
2015-09-01 18:50:41 -07:00
Jessie Frazelle 7f8954cb79 Merge pull request #15989 from tianon/ubuntu
Swap "ubuntu-debootstrap" for just "ubuntu"
2015-09-01 15:19:16 -07:00
Alexander Morozov 3111aa7293 Merge pull request #15988 from runcom/use-stringutils-strslice
Use StrSlice from pkg/stringutils
2015-09-01 14:32:58 -07:00
Tianon Gravi a5eec723f8 Swap "ubuntu-debootstrap" for just "ubuntu"
See https://github.com/docker-library/official-images/pull/982#issuecomment-133207587.

Signed-off-by: Andrew "Tianon" Page <admwiggin@gmail.com>
2015-09-01 14:03:49 -07:00
Alexander Morozov 7c44209037 Merge pull request #15986 from runcom/add-strslice-tests
pkg: stringutils: Add more tests to strslice
2015-09-01 12:29:27 -07:00
Antonio Murdaca 17999c70c3 Use StrSlice from pkg/stringutils
Signed-off-by: Antonio Murdaca <runcom@linux.com>
2015-09-01 21:23:46 +02:00
Stephen Rust 45fdce8a0d Retry registering a volume driver
Signed-off-by: Stephen Rust <srust@blockbridge.com>
2015-09-01 14:56:29 -04:00
Antonio Murdaca cac8f4f0d0 pkg: stringutils: Add more tests to strslice
Signed-off-by: Antonio Murdaca <runcom@linux.com>
2015-09-01 20:27:45 +02:00
Alexander Morozov 70f0d6d84c Merge pull request #15983 from Microsoft/unix-run-test
Move run tests out of unix files
2015-09-01 10:49:01 -07:00
Josh Hawn 61de962979 [docs] Add description of "X-Registry-Config"
The structure of this header has never been specified in the docs and has
been a pain point for those who have tried to get registry authentication
to work during builds. This Patch *finally* adds a description of JSON
object which should be base64-url-safe-encoded and used as the value of
the X-Registry-Config HTTP request header during `POST /build`.

Docker-DCO-1.1-Signed-off-by: Josh Hawn <josh.hawn@docker.com> (github: jlhawn)
2015-09-01 10:05:30 -07:00
Alexander Morozov 82415adc81 Merge pull request #15980 from Microsoft/unix-links-test
Moved unix links tests to non-platform
2015-09-01 10:03:54 -07:00
John Howard d7eb85bb1f Move run tests out of unix files
Signed-off-by: John Howard <jhoward@microsoft.com>
2015-09-01 09:42:19 -07:00
David Calavera 2093616d7f Merge pull request #15871 from Microsoft/10662-absolute
Windows: Fix absolute checks
2015-09-01 18:38:36 +02:00
Alexander Morozov 7f58fb5f01 Merge pull request #15972 from calavera/remove_containers_ps
Remove /containers/ps from the api router.
2015-09-01 09:15:35 -07:00
John Howard 4fccf8adfa Moved unix links tests to non-platform
Signed-off-by: John Howard <jhoward@microsoft.com>
2015-09-01 09:10:24 -07:00
Alexander Morozov be8e126a0f Merge pull request #15834 from Microsoft/10662-fixdockercp
Windows: Fix docker cp
2015-09-01 08:41:59 -07:00
John Howard 49c1b51ae2 Windows: Fix absolute checks
Signed-off-by: John Howard <jhoward@microsoft.com>
2015-09-01 08:41:37 -07:00
David Calavera 26fb160610 Merge pull request #15976 from duglin/MissingDefer
Add missing defer to delete temp dir
2015-09-01 17:13:37 +02:00
Antonio Murdaca 4bb2449188 Merge pull request #15913 from mountkin/abstract
abstract the string slice struct to stringutils package
2015-09-01 17:06:13 +02:00
Doug Davis 51e721ab07 Add missing defer to delete temp dir
Minor thing I just noticed

Signed-off-by: Doug Davis <dug@us.ibm.com>
2015-09-01 07:19:38 -07:00
Brian Goff 3b2c9fa049 Merge pull request #15965 from tonistiigi/pull-goroutine-leak
Fix goroutine leak on pull
2015-09-01 09:27:55 -04:00
Brian Goff 567687fd98 Merge pull request #15900 from Microsoft/10662-testinfra
Test infrastructure for cross platform
2015-09-01 09:18:29 -04:00
Doug Davis 5eb4a6b933 Merge pull request #15927 from SvenDowideit/clean-up-parsehost
Change ParseTCPAddr to use tcp://127.0.0.0:2375 format as default consistently
2015-09-01 08:25:59 -04:00
Antonio Murdaca e98ec2b567 Merge pull request #15970 from Mashimiao/cleanup-daemon-commit-unneeded-code
daemon/commit: remove unneeded code
2015-09-01 14:15:56 +02:00
David Calavera dd49002055 Merge pull request #15958 from vdemeester/14570-contrib-completion-image
Add docker ps --filter=… ancestor image bash completion
2015-09-01 12:16:52 +02:00
David Calavera b5cc077864 Remove /containers/ps from the api router.
This route was deprecated more than two years ago in the linked
commit[1]. It's not referenced anywhere in the documentation and it's
time to stop maintaning it.

[1]: https://github.com/docker/docker/commit/4f9443927e8bc8a724b43afae6cf7a183cd9acd0

Signed-off-by: David Calavera <david.calavera@gmail.com>
2015-09-01 05:17:35 -04:00
Ma Shimiao ab868ad79c daemon/commit: remove unneeded code
Signed-off-by: Ma Shimiao <mashimiao.fnst@cn.fujitsu.com>
2015-09-01 16:34:07 +08:00
Vincent Demeester 6ae2cb7ad1 Add docker ps --filter=… image completion
I missed that on #15919, thanks @albers

Signed-off-by: Vincent Demeester <vincent@sbr.pm>
2015-09-01 08:47:02 +02:00
Sebastiaan van Stijn d080f6524b Merge pull request #15969 from charleswhchan/issue-15939
Fix issue #15939: Hyperlink to MongoDB Dockerfile not found.
2015-09-01 08:33:22 +02:00
Charles Chan f814ae437f Fix issue #15939: Hyperlink to MongoDB Dockerfile not found. Replaced with link to file in Github.
Signed-off-by: Charles Chan <charleswhchan@users.noreply.github.com>
2015-08-31 19:28:36 -07:00
Alexander Morozov 84bc41a3fb Merge pull request #15963 from Microsoft/fix-unixtestport
Move TestPort out of _unix
2015-08-31 17:09:59 -07:00
Doug Davis 0f878cfa00 Merge pull request #15966 from Microsoft/test-typo
Fix typo in test title
2015-08-31 18:59:55 -04:00
Tonis Tiigi 3037e4f7c4 Fix goroutine leak on pull
Close the pipeWriter even if there was no error.

Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
2015-08-31 15:56:19 -07:00
John Howard 3c2b128582 Fix typo in test title
Signed-off-by: John Howard <jhoward@microsoft.com>
2015-08-31 15:28:40 -07:00
John Howard 68c7d24a12 Move TestPort out of _unix
Signed-off-by: John Howard <jhoward@microsoft.com>
2015-08-31 14:40:36 -07:00
David Calavera 166412e529 Merge pull request #15827 from williamh/fix-openrc-script
Fix openrc script
2015-08-31 20:32:00 +02:00
Sebastiaan van Stijn c844effeda Merge pull request #15926 from moxiegirl/carry-15210
add: best practice for security when sharing host directories.
2015-08-31 19:51:15 +02:00
Mary Anthony 7271dca8cc updating again.
Signed-off-by: Mary Anthony <mary@docker.com>
2015-08-31 09:56:35 -07:00
Mary Anthony 95495d20be Updating with SEb's comments
Signed-off-by: Mary Anthony <mary@docker.com>
2015-08-31 09:54:15 -07:00
David Calavera 3bd8016259 Merge pull request #15922 from unclejack/lower_reset_timeout_bufreader
pkg/ioutils: lower bufReader reset timeout
2015-08-31 18:43:45 +02:00
Arnaud Porterie 84614fdae0 Merge pull request #15489 from aaronlehmann/pull-updates
Show pull progress in terminal for inflight pull requests
2015-08-31 09:37:33 -07:00
moxiegirl 38ac1f908e Merge pull request #15920 from mikebrow/docker-engine-update-to-index
Adding additional instructions to the Docker Engine installation/inde…
2015-08-31 09:35:34 -07:00
LIZAO LI b0fd4f882f add: best practice for security when sharing host directories.
Closes and carries PR #15210
Updating with Seb's comment

Signed-off-by: Mary Anthony <mary@docker.com>
2015-08-31 09:32:42 -07:00
David Calavera 96974170f8 Merge pull request #15606 from jlhawn/img_delete
[daemon] Refactor image_delete.go
2015-08-31 18:22:48 +02:00
John Howard cd18e7bb73 Test infrastructure for cross platform
Signed-off-by: John Howard <jhoward@microsoft.com>
2015-08-31 09:10:18 -07:00
Alexander Morozov 4ae81e145e Merge pull request #15918 from duglin/HttpHeaderTests
More httputil tests for the docker header
2015-08-31 08:48:28 -07:00
Jessie Frazelle 3272b3d120 Merge pull request #15954 from jfrazelle/no-t-install-script
we dont need the tty in the install script
2015-08-31 08:45:35 -07:00
Brian Goff 754c10430b Merge pull request #15807 from coolljt0725/remove_remove_redundant_tag_name
Minor fix: remove redundant tag name in error message of create failed.
2015-08-31 11:34:40 -04:00
Mike Brown e9eaef6f1e Adding additional instructions to the Docker Engine installation/index page per discussions with @moxiegirl.
Removed the "Other Linux" heading; Changed the "Next Steps" heading to "Where to go After Installing"

Signed-off-by: Mike Brown <brownwm@us.ibm.com>
2015-08-31 10:25:41 -05:00
Jessica Frazelle 80c32162b5 we dont need the tty in the install script
Signed-off-by: Jessica Frazelle <acidburn@docker.com>
2015-08-31 08:12:01 -07:00
Sebastiaan van Stijn 81d6f350f7 Merge pull request #13266 from shishir-a412ed/docker_lvm_devmapper_loopbackdevices
Warning message for lvm devmapper running on top of loopback devices
2015-08-31 16:40:16 +02:00
Shishir Mahajan 4870fb36d4 Warning message for lvm devmapper running on top of loopback devices
Signed-off-by: Shishir Mahajan <shishir.mahajan@redhat.com>
2015-08-31 10:35:48 -04:00
David Calavera 06699f73fb Refactor daemon container list.
Separate container iteration, filtering and reducing.
This will make easier in the future to improve the implementation of
docker ps as we know it.

The end goal is to unify the objects returned by the api for docker ps
and docker inspect, leaving all docker ps transformations to the client.

Signed-off-by: David Calavera <david.calavera@gmail.com>
2015-08-31 04:24:08 -04:00
David Calavera 754d81bd69 Merge pull request #15873 from cpuguy83/no_args_for_volume_subcmd
Fix `docker volume invalidarg` so it displays usage
2015-08-31 10:04:45 +02:00
David Calavera 998699316c Merge pull request #15901 from Microsoft/10662-revendorhcs
Windows: Revendor HCSShim with godoc
2015-08-31 10:03:18 +02:00
David Calavera d6a94fbf22 Merge pull request #15919 from vdemeester/14570-contrib-completion
Update shell completion on docker ps for ancestor
2015-08-31 09:58:05 +02:00
David Calavera 9703c3a90e Merge pull request #15914 from dmcgowan/fix-upload-sanitize
Fix sanitize URL bug on layer upload
2015-08-31 09:35:28 +02:00
xlgao 50be74ba14 just check -v /src:dest and test it
Signed-off-by: xlgao <xlgao@zju.edu.cn>
2015-08-31 10:50:49 +08:00
Vincent Demeester 10005433eb Add jenkins and godoc badges
Build badges are for master and one for experimental (in the `README.md`
of the experimental folder)

Signed-off-by: Vincent Demeester <vincent@sbr.pm>
2015-08-30 21:31:13 +02:00
Lei Jitang 16220e0681 Minor fix: remove redundant tag name in error message of create failed.
Signed-off-by: Lei Jitang <leijitang@huawei.com>
2015-08-30 10:43:33 +08:00
James Turnbull e137f2d081 Merge pull request #15932 from lyndaoleary/15909-daemon-flag
Removed deprecated -d flag from docs
2015-08-29 22:10:35 -04:00
Sebastiaan van Stijn ad91d2e97a Merge pull request #15929 from jjn2009/patch-1
ubuntu-14-10-x64 is not a valid image on digital ocean
2015-08-30 02:54:16 +02:00
Sebastiaan van Stijn bace51571f Merge pull request #15925 from moxiegirl/carry-14234
Closes #14234 and updates text
2015-08-30 01:33:57 +02:00
Lynda O'Leary 55468e2ac4 Removed deprecated -d flag from docs
Signed-off-by: Lynda O'Leary <lyndaoleary29@gmail.com>
2015-08-29 23:31:27 +01:00
moxiegirl fd1b21b646 Merge pull request #15885 from tombee/7866-10463-runmetrics-doc-updates
Updated runmetrics article to use up-to-date cgroup paths
2015-08-29 13:36:20 -07:00
Mary Anthony 2920550211 Closes #14234 and updates text
Updating with Seb's comments
Entering Sven's comment

Signed-off-by: Mary Anthony <mary@docker.com>
2015-08-29 13:15:36 -07:00
Arnaud Porterie 626c05036c Merge pull request #15832 from jfrazelle/add-docker-seliux-policy-for-rpm
Add docker seliux policy for rpm
2015-08-29 11:07:20 -07:00
Sven Dowideit 3d510f15da Change ParseTCPAddr to use tcp://127.0.0.0:2375 format as default consistently
Signed-off-by: Sven Dowideit <SvenDowideit@home.org.au>
2015-08-29 11:23:51 +00:00
Jordan 24c4594cc3 ubuntu-14-10-x64 is not a valid image on digital ocean
Signed-off-by: Jordan Jennings <jjn2009@gmail.com>
2015-08-28 23:59:30 -07:00
Jessica Frazelle 8fe675d799 add selinux-policy and docker-engine-selinux rpm
Signed-off-by: Jessica Frazelle <acidburn@docker.com>
2015-08-28 17:54:04 -07:00
Jessica Frazelle 42d8fe6105 add build deps for selinux-policy/selinux-policy-devel
Signed-off-by: Jessica Frazelle <acidburn@docker.com>
2015-08-28 17:43:30 -07:00
Jessica Frazelle df6d928370 update spec file to require docker-engine-selinux policy
Signed-off-by: Jessica Frazelle <acidburn@docker.com>
2015-08-28 17:43:30 -07:00
Derek McGowan b1c1f42bcc Fix sanitize URL bug on layer upload
Update the distribution version to include sanitize URL fix

Fixes #15875

Signed-off-by: Derek McGowan <derek@mcgstyle.net> (github: dmcgowan)
2015-08-28 14:35:06 -07:00
Brian Goff 0b2cff35ba Merge pull request #15917 from srust/volume_create_dont_lock_around_volume_driver
Don't hold lock around volume driver for volume create.
2015-08-28 17:13:47 -04:00
Stephen Rust 0ef740a5bf Don't hold lock around volume driver for volume create.
Signed-off-by: Stephen Rust <srust@blockbridge.com>
2015-08-28 16:28:28 -04:00
unclejack f9df813a99 pkg/ioutils: lower bufReader reset timeout
Signed-off-by: Cristian Staretu <cristian.staretu@gmail.com>
2015-08-28 23:13:02 +03:00
Doug Davis 5e540bdc13 More httputil tests for the docker header
follow-on to #15911

Signed-off-by: Doug Davis <dug@us.ibm.com>
2015-08-28 12:16:37 -07:00
Vincent Demeester 672bae2dc0 Update shell completion on docker ps for ancestor
Signed-off-by: Vincent Demeester <vincent@sbr.pm>
2015-08-28 20:56:52 +02:00
Josh Hawn 111d2f3487 [daemon] Refactor image_delete.go
This file was not well documented and had very high cyclomatic complexity.
This patch completely rearranges this file and the ImageDelete method to
be easier to follow and more maintainable in the future.

Docker-DCO-1.1-Signed-off-by: Josh Hawn <josh.hawn@docker.com> (github: jlhawn)
2015-08-28 11:01:24 -07:00
Sebastiaan van Stijn b1cb1b1df4 Merge pull request #14570 from vdemeester/13365-ps-image-filter
Add docker ps ancestor filter for image
2015-08-28 19:47:43 +02:00
Sebastiaan van Stijn 279bbbedb2 Merge pull request #15872 from lyndaoleary/find-an-issue-style-updates
Style updates to find an issue page
2015-08-28 19:18:19 +02:00
Aaron Lehmann 317a5462e4 Make the broadcaster write messages to the observers in the same units they were written to the broadcaster
This means the writing to a WriteFlusher will flush in the same places
as it would if the broadcaster wasn't sitting in front of it.

Signed-off-by: Aaron Lehmann <aaron.lehmann@docker.com>
2015-08-28 10:09:00 -07:00
Shijiang Wei ea4a06740b abstract the string slice struct to stringutils package
Signed-off-by: Shijiang Wei <mountkin@gmail.com>
2015-08-29 01:08:40 +08:00
Alexander Morozov 50bcf17c39 Merge pull request #15902 from SvenDowideit/add-more-tests-for-parsehost
Exploring the parsehost using unit tests
2015-08-28 09:14:35 -07:00
David Calavera e6e210164e Merge pull request #15910 from mimoralea/patch-1
Typo fix then -> than
2015-08-28 18:09:26 +02:00
Alexander Morozov 2a66beef7f Merge pull request #15911 from calavera/carry_14296
[Carry 14296] Increased test coverage of pkg/httputils
2015-08-28 09:04:43 -07:00
Miguel Morales 95e3a4ca6d Typo fix then -> than
Signed-off-by: Miguel Morales <mimoralea@hp.com>
2015-08-28 10:44:39 -05:00
David Calavera 433956cc47 Merge pull request #15310 from MHBauer/demon-lint-squash
golint fixes for daemon/ package
2015-08-28 17:34:36 +02:00
Alexander Morozov 6caaa8a635 Merge pull request #15023 from hqhq/hq_add_status_in_inspect
Add status string to State field for inspect
2015-08-28 08:27:36 -07:00
David Calavera 243f98ff6d Fix server header parsing.
Signed-off-by: David Calavera <david.calavera@gmail.com>
2015-08-28 11:06:24 -04:00
Kristina Zabunova f753f6d597 unit test refactor in pkg/httputils as suggested by vdemeester; using pattern if x := …; x == nil {}
Signed-off-by: Kristina Zabunova <triara.xiii@gmail.com>
(cherry picked from commit c3f1b2a5bd4a4330bcbad401c316af90925b99ad)
2015-08-28 10:41:19 -04:00
Kristina Zabunova b3f999e863 Increased test coverage of httputils to 70 %
Signed-off-by: Kristina Zabunova <triara.xiii@gmail.com>
(cherry picked from commit d71817464e859cd323d6cdaf4dec5a9dd530f57e)
2015-08-28 10:41:19 -04:00
Sven Dowideit e48a222828 Exploring the code using unit tests - these 2 functions do not work consistently
Signed-off-by: Sven Dowideit <SvenDowideit@home.org.au>
2015-08-28 10:29:52 +00:00
Morgan Bauer abd72d4008 golint fixes for daemon/ package
- some method names were changed to have a 'Locking' suffix, as the
 downcased versions already existed, and the existing functions simply
 had locks around the already downcased version.
 - deleting unused functions
 - package comment
 - magic numbers replaced by golang constants
 - comments all over

Signed-off-by: Morgan Bauer <mbauer@us.ibm.com>
2015-08-27 22:07:42 -07:00
John Howard 5a5f9e93e9 Windows: Revendor HCSShim with godoc
Signed-off-by: John Howard <John.Howard@microsoft.com>
2015-08-27 15:46:00 -07:00
Lynda O'Leary 6f22cc9b5c Style updates to find an issue page
* Fixed exp/beginner label colour background
* Added thead element to label table
* Updated issue list screenshot (old one referenced old whitebelt label)
* Content tweaks as per style guide

Signed-off-by: Lynda O'Leary <lyndaoleary29@gmail.com>
2015-08-27 23:05:00 +01:00
Sebastiaan van Stijn fdc73cc3fc Merge pull request #15778 from dharmit/13595-update-docs-process-interaction-container
Added note about process interaction with container in detached mode
2015-08-27 22:39:20 +02:00
Aaron Lehmann 9b9d70ad27 Remove "...already being pulled" messages
These don't get seen, so they are unnecessary.

Signed-off-by: Aaron Lehmann <aaron.lehmann@docker.com>
2015-08-27 13:22:08 -07:00
Aaron Lehmann 26c9b58504 Clean up ProgressStatus
- Rename to Broadcaster

- Document exported types

- Change Wait function to just wait. Writing a message to the writer and
  adding the writer to the observers list are now handled by separate
  function calls.

- Avoid importing logrus (the condition where it was used should never
  happen, anyway).

- Make writes non-blocking

Signed-off-by: Aaron Lehmann <aaron.lehmann@docker.com>
2015-08-27 13:22:08 -07:00
Brian Goff ba019dc0d0 Merge pull request #15882 from vdemeester/14756-lint-opts-trust
Carry #14813 on linting package opts and trust
2015-08-27 15:58:13 -04:00
Alexander Morozov 0ca2c3abf5 Merge pull request #15893 from tonistiigi/fix-testsuite
Use DockerSuite for PullClientDisconnect test
2015-08-27 12:30:44 -07:00
Tonis Tiigi 9dd6c8822d Use DockerSuite for PullClientDisconnect test
Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
2015-08-27 11:22:54 -07:00
Aaron Lehmann 80513d85cf Change poolAdd to return a boolean instead of an error
Previously, its other return value was used even when it returned an
error. This is awkward and goes against the convention. It also could
have resulted in a nil pointer dereference when an error was returned
because of an unknown pool type. This changes the unknown pool type
error to a panic (since the pool types are hardcoded at call sites and
must always be "push" or "pull"), and returns a "found" boolean instead
of an error.

Signed-off-by: Aaron Lehmann <aaron.lehmann@docker.com>
2015-08-27 11:18:42 -07:00
Sam Abed 572f008e89 Show pull progress in terminal for inflight pull requests
Based on #12874 from Sam Abed <sam.abed@gmail.com>. His original commit
was brought up to date by manually porting the changes in pull.go into
the new code in pull_v1.go and pull_v2.go.

Fixes #8385

Signed-off-by: Aaron Lehmann <aaron.lehmann@docker.com>
2015-08-27 11:18:40 -07:00
moxiegirl 04b0fb6314 Merge pull request #15822 from vdemeester/docs-update-filtering-ps-and-images
Update filtering chapters on ps/images references
2015-08-27 10:39:20 -07:00
David Calavera 0634c653d5 Merge pull request #15646 from tonistiigi/15589-pull-cancellation
Fix pull on client disconnect
2015-08-27 17:54:08 +02:00
Vincent Demeester 0bd016b1c3 Finish linting opts and trust package.
Signed-off-by: Vincent Demeester <vincent@sbr.pm>
2015-08-27 17:36:11 +02:00
Brian Goff 38da43184d Fix docker volume invalid so it displays usage
Signed-off-by: Brian Goff <cpuguy83@gmail.com>
2015-08-27 09:46:05 -04:00
Sevki Hasirci 5572148477 golint: trust
contributes to #14756

Signed-off-by: Sevki Hasirci <s@sevki.org>
2015-08-27 11:40:27 +02:00
Sevki Hasirci 6eb03c53db Opts lint issues, ip and ulimit
Signed-off-by: Sevki Hasirci <s@sevki.org>
2015-08-27 11:40:27 +02:00
Tom Barlow b582977bc8 Updated to use correct cgroup paths
Signed-off-by: Tom Barlow <tomwbarlow@gmail.com>
2015-08-27 10:39:37 +01:00
David Calavera 4579d5ac78 Merge pull request #15878 from brahmaroutu/vendor_netns
Allow vendoring netns changes to build Docker on s390x
2015-08-27 10:02:25 +02:00
Vincent Demeester 61de442c49 Update filtering chapters on ps/images references
Signed-off-by: Vincent Demeester <vincent@sbr.pm>
2015-08-27 08:47:03 +02:00
Dharmit Shah 9f8891a855 Added note about process interaction with container in detached mode
Signed-off-by: Dharmit Shah <shahdharmit@gmail.com>

Added note about process interaction with container in detached mode

Signed-off-by: Dharmit Shah <shahdharmit@gmail.com>
2015-08-27 09:39:34 +05:30
Sebastiaan van Stijn 44ea7e91fb Merge pull request #15760 from mikebrow/9235-improve-documentation
Improvement to userguide/dockerrepos/ documentation
2015-08-27 01:21:12 +02:00
Mike Brown 5caccd27cd improvement to documentation
Signed-off-by: Mike Brown <brownwm@us.ibm.com>
2015-08-26 16:49:31 -05:00
moxiegirl 5e8038d0b0 Merge pull request #15773 from charleswhchan/patch-3
Fix #14572: Improve explaination for using `RUN` command inside Docke…
2015-08-26 14:19:44 -07:00
Alexander Morozov 459c2c66c3 Merge pull request #15801 from jfrazelle/btrfs-rm-subvolume-recursion
remove btrfs subvolumes when destroying containers (recursive)
2015-08-26 14:00:53 -07:00
Vincent Demeester c1af0ac082 Add 'ancestor' ps filter for image
Makes it possible to filter containers by image, using
--filter=ancestor=busybox and get all the container running busybox
image and image based on busybox (to the bottom).

Signed-off-by: Vincent Demeester <vincent@sbr.pm>
2015-08-26 22:59:48 +02:00
Alexander Morozov 7a74422724 Merge pull request #15826 from Microsoft/start-from-one
Builder counts from 1
2015-08-26 13:59:38 -07:00
Alexander Morozov 70a814c3f3 Merge pull request #15493 from stevvooe/no-buffer-on-push
Avoid buffering to tempfile when pushing with V2
2015-08-26 13:59:01 -07:00
moxiegirl ea65c38ac0 Merge pull request #15843 from MHBauer/version-order
reweight api doc for v1.21 to correct the order.
2015-08-26 13:51:06 -07:00
Morgan Bauer 31a52a31c6 reweight api doc for v1.21 to correct the order.
Signed-off-by: Morgan Bauer <mbauer@us.ibm.com>
2015-08-26 13:40:37 -07:00
Alexander Morozov 47cdae243a Merge pull request #15865 from Microsoft/10662-isabs
Windows: Fix use of IsAbs check
2015-08-26 13:29:24 -07:00
Sebastiaan van Stijn fa13f7cde8 Merge pull request #14242 from cpuguy83/add_volume_api
Add volume api
2015-08-26 21:57:12 +02:00
John Howard f11ba3135b Windows: Fix use of IsAbs check
Signed-off-by: John Howard <jhoward@microsoft.com>
2015-08-26 12:38:28 -07:00
Brian Goff b3b7eb2723 Add volume API/CLI
Signed-off-by: Brian Goff <cpuguy83@gmail.com>
2015-08-26 13:37:52 -04:00
Jessie Frazelle 5dadfa8b69 Merge pull request #15848 from calavera/revert_ipc_mounts
DO NOT MERGE: Check if these commits broke the builds.
2015-08-26 10:29:25 -07:00
John Howard 17d6c6c7e5 Builder counts from 1
Signed-off-by: John Howard <jhoward@microsoft.com>
2015-08-26 10:05:04 -07:00
David Calavera 7ef08f39ed Merge pull request #15850 from choleraehyq/15849-fixtypo
api/client/restart.go:Fix a typo in comment
2015-08-26 16:10:31 +02:00
Brian Goff 2cec06fbcd Merge pull request #13304 from coolljt0725/restart_daemon_with_paused_containers
Fix restart docker daemon with paused containers
2015-08-26 09:04:14 -04:00
Cholerae Hu d30990d7b1 api/client/restart.go:Fix a typo in comment
Signed-off-by: Yingqian Hu <choleraehyq@gmail.com>
2015-08-26 18:59:56 +08:00
David Calavera b857dadb33 Merge pull request #15711 from monitorjbl/import-commit-message
adding message option to the import subcommand
2015-08-26 11:42:10 +02:00
David Calavera 688dd8477e Revert "Add support for sharing /dev/shm/ and /dev/mqueue between containers"
This reverts commit d88fe447df.

Signed-off-by: David Calavera <david.calavera@gmail.com>
2015-08-26 05:23:00 -04:00
David Calavera a9378a0ab5 Revert "Modify test to include /dev/shm sharing"
This reverts commit 457aeaa2e1.

Signed-off-by: David Calavera <david.calavera@gmail.com>
2015-08-26 05:22:46 -04:00
Charles Chan b6621a1b6c Fix #14572: Improve explaination for usng RUN and apt-get inside Dockerfil.
Based on example provided by @thaJeztah and @moxiegirl:
  https://github.com/docker/docker/pull/15773

Signed-off-by: Charles Chan <charleswhchan@users.noreply.github.com>
2015-08-25 21:58:20 -07:00
Sven Dowideit 8720f71b52 Merge pull request #15836 from rsmitty/issue-15835
Resolves link to introduction to Docker
2015-08-26 12:06:29 +10:00
Sven Dowideit 3bc375c6e4 Merge pull request #15831 from yasker/master
Update plugins.md
2015-08-26 12:05:35 +10:00
Sven Dowideit a0f6ff7d58 Merge pull request #15838 from rsmitty/issue-15837
Updates link to the understanding-docker section
2015-08-26 11:53:58 +10:00
Spencer Smith 90be489f40 Updates link to the understanding-docker section
Signed-off-by: Spencer Smith <robertspencersmith@gmail.com>
2015-08-25 14:12:29 -07:00
Spencer Smith 9a71dd2b90 Resolves link to introduction to Docker
Signed-off-by: Spencer Smith <robertspencersmith@gmail.com>
2015-08-25 13:54:39 -07:00
Sebastiaan van Stijn bdba406492 Merge pull request #15821 from vbatts/tarsum_warning
tarsum: add a big fat warning
2015-08-25 22:53:04 +02:00
Vincent Batts 459451de8b tarsum: add a big fat warning
Signed-off-by: Vincent Batts <vbatts@redhat.com>
2015-08-25 16:50:08 -04:00
John Howard f950de5754 Windows: Fix docker cp
Signed-off-by: John Howard <jhoward@microsoft.com>
2015-08-25 13:26:49 -07:00
Jessica Frazelle bd06432ba3 cleanup and fix btrfs subvolume recursion deletion
Signed-off-by: Jessica Frazelle <acidburn@docker.com>
2015-08-25 13:00:41 -07:00
Sheng Yang 5f156d8c25 Update plugins.md
Add Convoy to Docker plugin list.

Signed-off-by: Sheng Yang <sheng.yang@rancher.com>
2015-08-25 12:01:31 -07:00
James Turnbull 7dbb5fafcd Merge pull request #15824 from Microsoft/10662-moredocs
Windows: Minor doc clarification
2015-08-25 13:30:54 -04:00
William Hubbs e3772538c0 Fix OpenRC init script
The shebang for OpenRC init scripts is now #!/sbin/openrc-run, and we
can also use the default start and stop functions built into OpenRC.

Signed-off-by: William Hubbs <w.d.hubbs@gmail.com>
2015-08-25 12:02:01 -05:00
William Hubbs 1c0c68b18f Drop execute bit from openrc init script
Signed-off-by: William Hubbs <w.d.hubbs@gmail.com>
2015-08-25 12:00:54 -05:00
Brian Goff e134ccada7 Merge pull request #14978 from gesellix/websocket-disable-check-origin
skip checkOrigin during websocket handshake
2015-08-25 12:56:30 -04:00
John Howard 759ed647fb Windows: Minor doc clarification
Signed-off-by: John Howard <jhoward@microsoft.com>
2015-08-25 09:36:51 -07:00
Alexander Morozov 78698855ce Merge pull request #15818 from calavera/fix_api_json_examples
Fix json examples in the api reference.
2015-08-25 09:22:38 -07:00
Srini Brahmaroutu eecf6cd48c Allow vendoring netns change to build Docker on s390x
Signed-off-by: Srini Brahmaroutu <srbrahma@us.ibm.com>
2015-08-25 15:07:17 +00:00
David Calavera 7296c845b7 Fix json examples in the api reference.
Signed-off-by: David Calavera <david.calavera@gmail.com>
2015-08-25 10:55:12 -04:00
David Calavera 6f8c4480e4 Merge pull request #14665 from coolljt0725/fix_build_with_resource_limit
Fix build with resource limit which system not support.
2015-08-25 16:42:13 +02:00
Sebastiaan van Stijn ee2c476f22 Merge pull request #15804 from epc/epc-2015236
Copy edits for typos
2015-08-25 08:04:53 +02:00
Ed Costello cefb72080d Copy edits for typos
Signed-off-by: Ed Costello <epc@epcostello.com>
2015-08-24 23:02:44 -04:00
Taylor Jones 936b2c6afe adding message option to the import subcommand
Signed-off-by: Taylor Jones <monitorjbl@gmail.com>
2015-08-25 02:55:04 +00:00
Lei Jitang 9a9724ad56 Fix docker daemon restart with paused container.
Signed-off-by: Lei Jitang <leijitang@huawei.com>
2015-08-25 09:42:58 +08:00
Stephen J Day 349aef06d5 Avoid buffering to tempfile when pushing with V2
The practice of buffering to a tempfile during a pushing contributes massively
to slow V2 push performance perception. The protocol was actually designed to
avoid precalculation, supporting cut-through data push. This means we can
assemble the layer, calculate its digest and push to the remote endpoint, all
at the same time.

This should increase performance massively on systems with slow disks or IO
bottlenecks.

Signed-off-by: Stephen J Day <stephen.day@docker.com>
2015-08-24 18:08:05 -07:00
Jessie Frazelle 903cd2b9e3 Merge pull request #12159 from mrunalp/feature/ipc_share_dev
ipc: Share /dev/shm and /dev/mqueue when --ipc container:<id/name> is used
2015-08-24 17:55:03 -07:00
Brian Goff 562cc6254f Merge pull request #15702 from LK4D4/fix_events_tests_15
Make events test more deterministic in go1.5
2015-08-24 20:15:09 -04:00
Ma Shimiao dea78fc2ce fix 9939: docker does not remove btrfs subvolumes when destroying container
Signed-off-by: Ma Shimiao <mashimiao.fnst@cn.fujitsu.com>
2015-08-24 14:52:07 -07:00
Jessie Frazelle 82e2dec06d Merge pull request #15393 from azurezk/exportImage-toplevel
change exportImage to top-level func
2015-08-24 14:35:55 -07:00
Jessie Frazelle 25f4f5588e Merge pull request #15756 from tonistiigi/15724-remove-nil-contexts
Remove nil contexts
2015-08-24 14:29:48 -07:00
Jessie Frazelle ebe27cb34c Merge pull request #14868 from jeffminard-ck/rhel-init-detect-failure
Allow RHEL init script to detect daemon start pid failure
2015-08-24 14:24:36 -07:00
moxiegirl 0ce37336b3 Merge pull request #15800 from moxiegirl/carry-14503
Closes PR #14503 with this carry
2015-08-24 13:22:19 -07:00
Casey Bisson 831747d59e Closes PR #14503 with this carry
- Refer to Joyent's blogs and docs rather than following from our end
- All of this information exists on Joyent's site
Updating with thaJeztah's comments

Signed-off-by: Mary Anthony <mary@docker.com>
2015-08-24 13:21:27 -07:00
Alexander Morozov 1269dd35dc Merge pull request #15728 from tonistiigi/parallel-pulls
Mitigate parallel pull issues
2015-08-24 12:56:21 -07:00
Tonis Tiigi b779bc3102 Mitigate parallel pull issues
Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
2015-08-24 11:41:45 -07:00
Alexander Morozov 137df3048c Merge pull request #15389 from aidanhs/aphs-simpler-pull-codepath
Remove unnecessary function parameter, add mirror endpoint test
2015-08-24 11:03:01 -07:00
Alexander Morozov 6b21e98432 Merge pull request #15766 from hqhq/hq_fix_device
Add mode check for device
2015-08-24 10:58:49 -07:00
Brian Goff fd8b25c802 Merge pull request #15348 from tonistiigi/11008-always-unless-stopped-restart-policy
Add always-unless-stopped restart policy
2015-08-24 13:48:56 -04:00
Alexander Morozov 1544c5edb6 Merge pull request #15735 from tonistiigi/graph-register-readcloser
Make graph.Register take in io.Reader
2015-08-24 10:40:04 -07:00
Jessie Frazelle 654b555d09 Merge pull request #15789 from calavera/add_cors_head_option
Allow HEAD requests to container archives via CORS.
2015-08-24 10:27:07 -07:00
Alexander Morozov 386aefb9fc Make events test more deterministic in go1.5
Now scheduler makes order of events pretty random, so I added little
sleeps to make order intact. Also I renamed to test so name better
describes its nature.

Signed-off-by: Alexander Morozov <lk4d4@docker.com>
2015-08-24 09:35:11 -07:00
Brian Goff c0a48a676d Merge pull request #15762 from mattrobenolt/trim
opts/envfile: trim all leading whitespace in a line
2015-08-24 12:32:27 -04:00
Brian Goff e14eaba784 Merge pull request #12918 from thieman/tnt-issue-12595
Use image ID in ps if tag has been updated
2015-08-24 12:24:42 -04:00
Sebastiaan van Stijn 37f58d266f Merge pull request #14564 from docteurklein/master
[experimental compose/swarm] explain how to make it work on awazon ec2.
2015-08-24 17:47:26 +02:00
David Calavera 88cacbf529 Merge pull request #15767 from hqhq/hq_fix_optional_comments
Change all optional unit to [unit]
2015-08-24 17:36:01 +02:00
Sebastiaan van Stijn 32053b965b Merge pull request #15791 from agonzalezro/broken-links-revert
Revert "Fix broken links at plugins documentation"
2015-08-24 15:27:40 +02:00
moxiegirl 02683dfa09 Merge pull request #15745 from Microsoft/readme
Update readme
2015-08-24 06:13:02 -07:00
Brian Goff e4147bcad4 Merge pull request #15776 from duglin/buildEnvTest
Add some builder getEnv tests
2015-08-24 08:57:41 -04:00
Brian Goff 2b174d3d9d Merge pull request #15444 from coolljt0725/add_test_require_for_test_blkio
Add test require for TestRunWithBlkioInvalidWeight and TestRunWithBlkio
2015-08-24 08:33:17 -04:00
Brian Goff 1ee53d4fb7 Merge pull request #15779 from mountkin/split-build-test
split build API tests to a separate file
2015-08-24 08:31:48 -04:00
Álex González 62ce5b6929 Revert "Fix broken links at plugins documentation"
This reverts commit 354147df01.

Signed-off-by: Álex González <agonzalezro@gmail.com>
2015-08-24 11:48:59 +01:00
David Calavera 354a2e105d Allow HEAD requests to container archives via CORS.
Add HEAD to Access-Control-Allow-Methods.

Signed-off-by: David Calavera <david.calavera@gmail.com>
2015-08-24 05:57:22 -04:00
Qiang Huang 429423624c Add mode check for device
This fixes two problems:
1. docker run --device /dev/sda:rw ubuntu bash doesn't work
2. --device /dev/zero:/dev/noro:ro doesn't show clear error message,
but fail when writing to cgroup file.

Signed-off-by: Qiang Huang <h.huangqiang@huawei.com>
2015-08-24 17:57:12 +08:00
David Calavera 888d1d0e20 Merge pull request #15787 from agonzalezro/patch-1
Fix broken links at plugins documentation
2015-08-24 11:49:55 +02:00
Alexandre González 354147df01 Fix broken links at plugins documentation
Signed-off-by: Álex González <agonzalezro@gmail.com>
2015-08-24 10:47:56 +01:00
Qiang Huang c99ed5ae5d Change return value for ValidateMountMode
1. rename it from ValidateMountMode to ValidMountMode
Because it's a function simply check mount mode is valid or not.
2. remove the rw check return value
It's not supposed to be combined into this function, and we already
have a function for that check.

Signed-off-by: Qiang Huang <h.huangqiang@huawei.com>
2015-08-24 17:28:19 +08:00
David Calavera 9bac520c12 Merge pull request #15571 from ewindisch/apparmor_denywproc
AppArmor: Deny w to /proc/* files
2015-08-24 11:03:41 +02:00
David Calavera cb00396f61 Merge pull request #15332 from pugnascotia/master
Make run and rmi bash completions configurable
2015-08-24 10:49:01 +02:00
Lei Jitang c340ca4f5d Add some missing cgroup test require and refactor the require check.
Signed-off-by: Lei Jitang <leijitang@huawei.com>
2015-08-24 11:37:11 +08:00
Travis Thieman 2167f40a76 Use image ID if tag has been updated
Fixes #12595

Signed-off-by: Travis Thieman <travis.thieman@gmail.com>
2015-08-23 12:11:24 -04:00
Shijiang Wei 96e37f671a split build API tests to a separate file
Signed-off-by: Shijiang Wei <mountkin@gmail.com>
2015-08-23 23:59:15 +08:00
Sebastiaan van Stijn 7ead74d903 Merge pull request #15774 from charleswhchan/patch-4
Revise Mac Docker instructions
2015-08-23 10:26:58 +02:00
Sven Dowideit 819166c16c Merge pull request #15769 from charleswhchan/patch-1
Revise Windows Docker instructions
2015-08-23 12:11:37 +10:00
Doug Davis eeeae2c235 Add some builder getEnv tests
In particular I want to make sure that calling getEnv() when the same
var name appears more than once in the env list that we only pick up
the first one.  PR #15182 counts on this

Signed-off-by: Doug Davis <dug@us.ibm.com>
2015-08-22 13:12:43 -07:00
Matt Robenolt f1988f046f opts/envfile: trim all leading whitespace in a line
Signed-off-by: Matt Robenolt <matt@ydekproductions.com>
2015-08-22 09:01:27 -07:00
Charles Chan 9572edc34a Revise Mac Docker instructions
* Clarify `default` VM
* Various minor changes

Signed-off-by: Charles Chan <charleswhchan@users.noreply.github.com>
2015-08-22 08:00:48 -07:00
Charles Chan 3faba5fbe2 Revise Windows Docker instructions
* Fix Windows 7 (not 7.1 ;p)
* Clarify virtualization technology section, add link to wiki
* Fix heading level for various ways of starting Docker container
* Clarify `default` VM
* Various minor changes

Signed-off-by: Charles Chan <charleswhchan@users.noreply.github.com>
2015-08-22 07:26:26 -07:00
Sebastiaan van Stijn efabc8ee1a Merge pull request #15764 from coolljt0725/docs_update_readme_in_daemon
Docs: remove networkdriver from README.md in daemon
2015-08-22 13:36:38 +02:00
Qiang Huang 76a5fdc3d4 Change all optional unit to [unit]
As suggested before, we should change every signal one.

Signed-off-by: Qiang Huang <h.huangqiang@huawei.com>
2015-08-21 21:29:52 -07:00
Tianon Gravi 5fd15da7da Merge pull request #15763 from tianon/dind-tmp
Update dind "/tmp" mounting to be optional
2015-08-21 21:14:35 -07:00
Lei Jitang ce5bbed858 Docs: remove networkdriver from README.md in daemon
Signed-off-by: Lei Jitang <leijitang@huawei.com>
2015-08-22 10:09:07 +08:00
Brian Goff 5929502b4e Merge pull request #15412 from vdemeester/dont-sleep-too-much
time.Sleep in integration tests — comment and waitRun/waitInspect
2015-08-21 20:43:55 -04:00
Jessie Frazelle 90801ab939 Merge pull request #15708 from Microsoft/sjw/graphdriver_missing_parent
Windows: Graphdriver should reject create of layer w/o parent
2015-08-21 16:34:03 -07:00
Jessie Frazelle fefc9a3a6a Merge pull request #15750 from mountkin/fix-exec-panic
fix a panic when the exec fails to start
2015-08-21 15:54:58 -07:00
Tianon Gravi b8bed8832b Update dind "/tmp" mounting to be optional
This allows someone running the image to use `-v` to mount a non-tmpfs `/tmp` into their image if they so require/desire.

Signed-off-by: Andrew "Tianon" Page <admwiggin@gmail.com>
2015-08-21 15:47:50 -07:00
Jessie Frazelle c5733e6a20 Merge pull request #15366 from rvesse/sysvinit-redhat-silent-fail
Fix silent failure in RedHat sysvinit script
2015-08-21 14:54:25 -07:00
Jessie Frazelle e5e6eaacee Merge pull request #15492 from vbatts/update-tar-split
vendor: update tar-split to v0.9.6
2015-08-21 14:45:19 -07:00
Sebastiaan van Stijn 9415db7e95 Merge pull request #15742 from Microsoft/addazure
Add Microsoft Azure
2015-08-21 23:41:36 +02:00
Jessie Frazelle 9bd8a9b66b Merge pull request #14006 from hqhq/hq_add_kmem_limit
Add support for kernel memory limit
2015-08-21 14:34:27 -07:00
Jessie Frazelle ecff4badcd Merge pull request #15125 from WeiZhang555/golint-stdcopy-system
fix golint warnings/errors on pkg/system and pkg/stdcopy
2015-08-21 14:27:59 -07:00
Jessie Frazelle 008a8ffdd2 Merge pull request #15218 from calavera/gender_unbiased_names
Add more amazing women to the names generator.
2015-08-21 14:24:49 -07:00
Jessie Frazelle 19f7bfcda9 Merge pull request #15507 from clintonskitson/patch_issue_15467
added check for bind on create to determine local volume driver
2015-08-21 14:23:44 -07:00
Jessie Frazelle 9b8cfb6c79 Merge pull request #15709 from Mashimiao/state-separate-part-of-SetRestarting
daemon/state: separate part of SetRestarting to setRestarting
2015-08-21 14:21:10 -07:00
Jessie Frazelle 9d22c7a2d5 Merge pull request #15596 from jfrazelle/hack-dind-its-been-fun
docker 1.8+ no longer needs dind
2015-08-21 13:51:41 -07:00
Jessie Frazelle 616950b030 Merge pull request #15687 from coolljt0725/add_blk_dev_throttling_to_check_config
Add CONFIG_BLK_DEV_THROTTLING to check-config.sh
2015-08-21 13:48:28 -07:00
Stefan J. Wernli a456f20b44 Windows: Graphdriver should reject create of layer w/o parent
Signed-off-by: Stefan J. Wernli <swernli@microsoft.com>
2015-08-21 13:23:04 -07:00
Jessie Frazelle e6be51a0f9 Merge pull request #15758 from jfrazelle/EOL-fedora-20
fedora 20 is EOL remove from rpm builder
2015-08-21 13:15:58 -07:00
moxiegirl 1425b185db Merge pull request #15746 from Microsoft/libcontainer-spec-location
Updated spec location for libcontainer
2015-08-21 11:15:28 -07:00
Jessica Frazelle c48ac77840 update hack/dind for 1.8 mounting of cgroups
Signed-off-by: Jessica Frazelle <acidburn@docker.com>
2015-08-21 11:13:33 -07:00
Jessica Frazelle ee1304a35e fedora 20 is EOL remove from rpm builder
Signed-off-by: Jessica Frazelle <acidburn@docker.com>
2015-08-21 11:01:18 -07:00
Tonis Tiigi 0c08913d52 Remove nil contexts
Causes daemon panic because loggers can’t be found.

Fixes #15724

Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
2015-08-21 10:31:27 -07:00
Shijiang Wei fcf9daad91 fix a panic when the exec fails to start
Signed-off-by: Shijiang Wei <mountkin@gmail.com>
2015-08-22 00:01:44 +08:00
Brian Goff eb7b2ed6bb Merge pull request #15748 from coolljt0725/fix_daemon_start_with_old_running_container
Fix docker daemon start with old running container which use thirdparty volume plugin
2015-08-21 11:07:02 -04:00
Brian Goff 85bef48bf5 Merge pull request #15754 from mountkin/fix-return
modify a return value in graph/tags.go to increase readability
2015-08-21 10:55:50 -04:00
Brian Goff 10c97a310a Merge pull request #15751 from nf/bcw
Use a slice instead of a map of io.WriteClosers in broadcastwriter
2015-08-21 10:51:07 -04:00
Shijiang Wei f11b7acc73 modify a return value in graph/tags.go to increase readability
Signed-off-by: Shijiang Wei <mountkin@gmail.com>
2015-08-21 21:36:30 +08:00
Andrew Gerrand 31cbf76d0c Use a slice instead of a map of io.WriteClosers in broadcastwriter
Maps rely on the keys being comparable.
Using an interface type as the map key is dangerous,
because some interface types are not comparable.
I talked about this in my "Stupid Gopher Tricks" talk:
	https://talks.golang.org/2015/tricks.slide

In this case, if the user-provided writer is backed by a slice
(such as io.MultiWriter) then the code will panic at run time.

Signed-off-by: Andrew Gerrand <adg@golang.org>
2015-08-21 14:08:04 +01:00
Sebastiaan van Stijn 5ceff3f191 Merge pull request #15718 from ZJU-SEL/rm-volume-action
specify `docker run --rm` action when it comes to volume
2015-08-21 08:50:18 +02:00
Tonis Tiigi 2d1158790d Make graph.Register take in io.Reader
Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
2015-08-20 20:37:11 -07:00
Lei Jitang c8a46cb0b2 Fix docker daemon start with old running container which user volume plugin. Fixes #15720
Signed-off-by: Lei Jitang <leijitang@huawei>
2015-08-21 11:29:53 +08:00
John Howard 011b4ca256 Updated spec location for libcontainer
Signed-off-by: John Howard <John.Howard@microsoft.com>
2015-08-20 20:04:04 -07:00
John Howard faf9e34067 Update readme
Signed-off-by: John Howard <John.Howard@microsoft.com>
2015-08-20 19:55:32 -07:00
John Howard 98f60aef13 Add Microsoft Azure
Signed-off-by: John Howard <john.howard@microsoft.com>
2015-08-20 18:35:21 -07:00
He Simei 76a559ccb2 specify the docker run --rm action
Signed-off-by: He Simei <hesimei@zju.edu.cn>
2015-08-21 08:52:06 +08:00
David Calavera d760947b2e Merge pull request #15716 from calavera/release_checklist_docs
Corrections in the release checklist.
2015-08-20 22:29:42 +01:00
Sebastiaan van Stijn 9ed5cf08a3 Merge pull request #15732 from moxiegirl/15731-fixes
Examples index has broken links
2015-08-20 22:56:45 +02:00
Mary Anthony 15c24db9a5 Examples index has broken links
Signed-off-by: Mary Anthony <mary@docker.com>
2015-08-20 13:40:03 -07:00
Sebastiaan van Stijn ec43113662 Merge pull request #15697 from sallyom/man-commit-fix
fix format man-commit
2015-08-20 21:33:46 +02:00
Sebastiaan van Stijn ba9496ae48 Merge pull request #15688 from Evalle/15564-fix-windows-doc
Fix a windows doc issue
2015-08-20 20:39:16 +02:00
evalle 3c61ede074 Fix a windows doc issue
Signed-off-by: evalle <shmarnev@gmail.com>
2015-08-20 14:14:48 +02:00
Sven Dowideit 272a3eef94 Merge pull request #15696 from sallyom/man-history-fixup
add -H to SYNOPSIS man-history
2015-08-20 22:11:50 +10:00
Brian Goff 44465098cb Merge pull request #15661 from coolljt0725/fix_docker_stats_show_read_blkio
Fix docker stats show blkio when there are multiple block device
2015-08-20 07:53:38 -04:00
David Calavera 1d0ee18d6b Corrections in the release checklist.
- Add a note about creating the release in GitHub.
- Fix docs release process.

Signed-off-by: David Calavera <david.calavera@gmail.com>
2015-08-20 11:52:56 +01:00
David Calavera d959739125 Merge pull request #15715 from aanand/fix-compose-1.2-changelog-link
Fix Compose 1.2 changelog link
2015-08-20 11:42:14 +01:00
Doug Davis 90ebc3b455 Merge pull request #14928 from brahmaroutu/lint_daemon_graphdriver
daemon/graphdriver fix lint errors/warnings
2015-08-20 03:25:00 -07:00
Aanand Prasad 23d3e4bb03 Fix Compose 1.2 changelog link
Hardcode the release tag, so that:

- it goes straight to the changes for 1.2, not whatever the current
  version is

- it still works now that we've renamed CHANGES.md to CHANGELOG.md

Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-08-20 11:09:10 +01:00
Clinton Kitson 6b8129d1fe added check for bind on create to determine local volume driver
Signed-off-by: Clinton Kitson <clintonskitson@gmail.com>
2015-08-20 01:40:04 -07:00
Lei Jitang 211449a1ca Fix docker stats show blkio when there are multiple block devices.
Signed-off-by: Lei Jiang <leijitang@huawei.com>
2015-08-20 11:46:21 +08:00
Ma Shimiao a6ed990593 daemon/state: separate part of SetRestarting to setRestarting
Signed-off-by: Ma Shimiao <mashimiao.fnst@cn.fujitsu.com>
2015-08-20 11:14:28 +08:00
Brian Goff 8acd006fd9 Merge pull request #15707 from icaroseara/fix_typo
Fix typo, "fil" -> "fill"
2015-08-19 21:25:43 -04:00
Icaro Seara 997ba4b0da Fix typo, "fil" -> "fill"
Signed-off-by: Icaro Seara <icaro.seara@gmail.com>
2015-08-19 21:50:54 -03:00
Christy Perez 6bf2440650 Allow branch name in vendor-helper script
With this, you can specify a branch name in the
vendor script instead of a commit ID. This makes it easier
to quickly test changes in dep'd repos outside of the DIND
environment.

Signed-off-by: Christy Perez <christy@linux.vnet.ibm.com>
2015-08-19 17:56:04 -05:00
Sebastiaan van Stijn 41ca7c0f13 Merge pull request #15675 from thaJeztah/carry-14625
[Carry #14625] run.md: --expose does NOT override Dockerfile EXPOSE
2015-08-20 00:49:16 +02:00
Sebastiaan van Stijn 35cbcc2fc1 Add gists provided by Mary
This adds the example gists, provided by Mary Anthony,
also fixes a link to the old /terms/

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2015-08-20 00:30:39 +02:00
Spencer Brown 6dd84ba2ab run.md: --expose does NOT override Dockerfile EXPOSE
run.md states that the operator can override all defaults set in the Dockerfile, and explicitly says that `--expose` overrides the `EXPOSE` instruction. Neither of these are true. An `EXPOSE` instruction cannot be overridden, `--expose` can only add additional exposed ports.

This change fixes the instructions, and also takes the liberty of crisping up the grammar and phrasing in a place or two.

Signed-off-by: Spencer Brown <spencer@spencerbrown.org>
2015-08-19 23:57:35 +02:00
moxiegirl 286afb9a77 Merge pull request #15682 from MHBauer/cliorder
add weight to daemon page so it renders in order
2015-08-19 14:24:51 -07:00
Morgan Bauer 2a84157352 add weight to daemon page so it renders in order
Signed-off-by: Morgan Bauer <mbauer@us.ibm.com>
2015-08-19 10:26:19 -07:00
Sebastiaan van Stijn f848f34da2 Merge pull request #15694 from liubin/fixtypo
add missing instruction
2015-08-19 19:05:41 +02:00
Brian Goff 7f46dc03d5 Merge pull request #15684 from ibuildthecloud/dont-sync
Don't globally lock on driver initialization
2015-08-19 12:48:14 -04:00
Mrunal Patel 457aeaa2e1 Modify test to include /dev/shm sharing
Signed-off-by: Mrunal Patel <mrunalp@gmail.com>
2015-08-19 12:36:57 -04:00
Mrunal Patel d88fe447df Add support for sharing /dev/shm/ and /dev/mqueue between containers
This changeset creates /dev/shm and /dev/mqueue mounts for each container under
/var/lib/containers/<id>/ and bind mounts them into the container. When --ipc:container<id/name>
is used, then the /dev/shm and /dev/mqueue of the ipc container are used instead of creating
new ones for the container.

Signed-off-by: Mrunal Patel <mrunalp@gmail.com>
Docker-DCO-1.1-Signed-off-by: Dan Walsh <dwalsh@redhat.com> (github: rhatdan)
2015-08-19 12:36:52 -04:00
Doug Davis ca79576585 Merge pull request #15664 from skatsuta/fix-parse-null
builder: avoid parsing null- string to nil slice (issue #15634)
2015-08-19 09:06:20 -07:00
Qiang Huang b6f1b4ad35 Add support for kernel memory limit
Signed-off-by: Qiang Huang <h.huangqiang@huawei.com>
2015-08-19 23:56:55 +08:00
Qiang Huang 87959dbfac Add CheckKernelVersion so we can check any specific version
Signed-off-by: Qiang Huang <h.huangqiang@huawei.com>
2015-08-19 23:49:52 +08:00
Sebastiaan van Stijn 7ec7173b76 Merge pull request #15482 from hqhq/hq_fix_run_doc
Add format description in run doc
2015-08-19 17:13:00 +02:00
Doug Davis 09cdd0524e Merge pull request #15691 from skatsuta/fix-printf-wrong-type
integration-cli: fix printf verbs of wrong types
2015-08-19 08:12:45 -07:00
Phil Estes 70c4b6e619 Merge pull request #15695 from lmesz/deviceset_warn_fix
deviceset.go: fixed link in warning about udex sync is not supported
2015-08-19 08:05:27 -07:00
Sebastiaan van Stijn 59e49e1db0 Merge pull request #12927 from lindenlab/custom-host-port-ranges
Proposal: Change --publish=SPEC to allow binding to custom host port ranges
2015-08-19 17:04:23 +02:00
moxiegirl 43763805fb Merge pull request #15690 from hacfi/docs-status-fix
Small fix in dev env docs
2015-08-19 07:12:39 -07:00
Brian Goff b8c319996f Merge pull request #15683 from skatsuta/cli-exec-test-printf-int
integration-cli: modify %s to %d in formatting an int
2015-08-19 10:10:17 -04:00
Sally O'Malley ab9e71b616 fix format man-commit
Signed-off-by: Sally O'Malley <somalley@redhat.com>
2015-08-19 10:07:32 -04:00
Sally O'Malley 898114a6d0 add -H to SYNOPSIS man-history
Signed-off-by: Sally O'Malley <somalley@redhat.com>
2015-08-19 09:35:52 -04:00
Laszlo Meszaros 78676f19c1 deviceset.go: fixed link in warning about udex sync is not supported
Signed-off-by: Laszlo Meszaros <lacienator@gmail.com>
2015-08-19 14:16:40 +02:00
bin liu 1988064ef2 add missing instruction
Signed-off-by: bin liu <liubin0329@gmail.com>
2015-08-19 18:43:19 +08:00
Philipp Wahala fbc0ea32e8 Small fix in dev env docs
Signed-off-by: Philipp Wahala <philipp.wahala@gmail.com>
2015-08-19 10:53:55 +02:00
Soshi Katsuta 5759b95e7e integration-cli: fix printf verbs of wrong types
Signed-off-by: Soshi Katsuta <katsuta_soshi@cyberagent.co.jp>
2015-08-19 17:47:33 +09:00
Lei Jitang cbb69531a8 Add CONFIG_BLK_DEV_THROTTLING to check-config.sh
Signed-off-by: Lei Jitang <leijitang@huawei.com>
2015-08-19 15:11:04 +08:00
Soshi Katsuta a41f431d11 integration-cli: use c.Assert(err, check.IsNil) instead of if err != nil
Signed-off-by: Soshi Katsuta <katsuta_soshi@cyberagent.co.jp>
2015-08-19 15:23:11 +09:00
Darren Shepherd 164208fde5 Don't globally lock on driver initialization
This patch makes it such that plugin initialization is synchronized
based on the plugin name and not globally

Signed-off-by: Darren Shepherd <darren@rancher.com>
2015-08-18 22:25:30 -07:00
Jessie Frazelle 3dc30d47e1 Merge pull request #15417 from icecrime/update_windows_registry_endpoint
Update Windows TP3 registry endpoints
2015-08-18 20:35:02 -07:00
Soshi Katsuta 5b870d7fa6 integration-cli: modify %s to %d in formatting an int
Signed-off-by: Soshi Katsuta <katsuta_soshi@cyberagent.co.jp>
2015-08-19 12:06:05 +09:00
Soshi Katsuta d45fcc6c80 integration-cli: add a integration test to avoid parsing null string in ADD, COPY and VOLUME to nil slice
Signed-off-by: Soshi Katsuta <katsuta_soshi@cyberagent.co.jp>
2015-08-19 11:11:46 +09:00
Qiang Huang 2a468ed7e4 Add format description in run doc
And only set false to --oom-kill-disable, we just need the default
value to show.

Signed-off-by: Qiang Huang <h.huangqiang@huawei.com>
2015-08-19 10:11:08 +08:00
moxiegirl aacb47d628 Merge pull request #15671 from tonistiigi/fix-volume-userguide
Update volumes userguide
2015-08-18 18:57:24 -07:00
moxiegirl 5fccbd1243 Merge pull request #15676 from thaJeztah/fix-anchor-link
docs: fix anchor link on Ubuntu installation page  Merging for @thaJeztah ....da ddadad dadada 🎼
2015-08-18 18:55:56 -07:00
moxiegirl 9f1e324b53 Merge pull request #15660 from sallyom/man-create-typo
fix SYNOPSIS alphabetical order man-create
2015-08-18 18:40:39 -07:00
Sebastiaan van Stijn d997351e97 Merge pull request #15677 from moxiegirl/carry-14714-changes
remove references to 'source repository'
2015-08-19 00:56:41 +02:00
Morgan Bauer b143c05d64 remove references to 'source repository'
- rewrite intro to Dockerfile reference usage section to remove
   references to 'source repository'
- Closes #14714
- Fixes:  #8648
- Updating with Seb's comments

Signed-off-by: Mary Anthony <mary@docker.com>
2015-08-18 15:50:42 -07:00
Sebastiaan van Stijn 5dd28c1f9d docs: fix anchor link on Ubuntu installation page
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2015-08-18 23:41:00 +02:00
Sebastiaan van Stijn 7e3088c43b Merge pull request #15672 from moxiegirl/cli-reference-cleanup
Updating hashcode links to commands
2015-08-18 21:45:06 +02:00
Mary Anthony 85c2c77188 Updating hashcode links to commands
Signed-off-by: Mary Anthony <mary@docker.com>
2015-08-18 12:25:59 -07:00
Tonis Tiigi cc2aab7816 Update volumes userguide
Fixes #15644

Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
2015-08-18 12:17:45 -07:00
David Calavera 215a1136f7 Merge pull request #15662 from cpuguy83/noisy_blkio_warning
Quiet sysinfo warnings on container create/start
2015-08-18 11:47:17 -07:00
Tonis Tiigi 10305dc5e8 Add unless-stopped restart policy
Fixes #11008

Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
2015-08-18 11:39:06 -07:00
Vincent Demeester 799d9605d6 Remove/Comment time.Sleep in integration tests
Remove what seems unnecessary time.Sleep (1 second even) and comment the
ones that seemed necessary.

Signed-off-by: Vincent Demeester <vincent@sbr.pm>
2015-08-18 20:36:08 +02:00
David Calavera 8aa520b8c0 Merge pull request #15649 from LK4D4/syslog_validation
Syslog validation
2015-08-18 11:14:31 -07:00
moxiegirl bba2551847 Merge pull request #15510 from kblin/issue-14795
reference/run: Clarify the use of numeric UIDs
2015-08-18 09:43:16 -07:00
moxiegirl 7ae6a505f2 Merge pull request #15337 from phemmer/doc-builder-volume
add documentation clarifying behavior of VOLUME instruction
2015-08-18 09:42:00 -07:00
Tonis Tiigi 8eeafa058c Fix pull on client disconnect
Fixes #15589

Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
2015-08-18 09:41:37 -07:00
Brian Goff 135f5324b1 Merge pull request #15653 from albers/completion-log-opt-fix
[Fix 15246] bash completion fails on systems with bash 3.2
2015-08-18 12:37:56 -04:00
David Calavera 9f1e8eea8f Merge pull request #15316 from icecrime/release_process
Documenting Docker release process
2015-08-18 09:33:44 -07:00
Sebastiaan van Stijn d7ac3fa863 Merge pull request #15605 from dharmit/15530-remove-the-terms-folder
Fixing docs to remove references to links under terms/
2015-08-18 18:27:28 +02:00
Sebastiaan van Stijn 3ce11c1587 Merge pull request #15656 from SvenDowideit/rename-public-hub
use the Docker Hub as the product name
2015-08-18 17:59:34 +02:00
Sebastiaan van Stijn 6947fbc2b0 Merge pull request #15657 from sallyom/man-inspect-typo
typo man-inspect
2015-08-18 17:37:58 +02:00
Brian Goff 9f8881b810 Merge pull request #15230 from azurezk/fix--rm-when-create-failure
--rm delete container when create failed
2015-08-18 11:32:33 -04:00
Sally O'Malley df11b10680 typo man-inspect
Signed-off-by: Sally O'Malley <somalley@redhat.com>
2015-08-18 11:19:57 -04:00
Brian Goff e9d8e38c47 Quiet sysinfo warnings on container create/start
This was making logrus warn on each container create and start.
These warnings are not needed as the code below already warns when these
various cgroup settings aren't supported but have been set.
Warnings were originally introduced by #15381, which appear to be a
side-effect of that change and not the intention.

Signed-off-by: Brian Goff <cpuguy83@gmail.com>
2015-08-18 10:01:52 -04:00
Sally O'Malley 8b8413266c fix SYNOPSIS alphabetical order man-create
Signed-off-by: Sally O'Malley <somalley@redhat.com>
2015-08-18 08:16:57 -04:00
Soshi Katsuta 2d6952e8a5 builder: avoid decoding "null" string in ADD, COPY and VOLUME step to nil slice
Signed-off-by: Soshi Katsuta <katsuta_soshi@cyberagent.co.jp>
2015-08-18 21:15:57 +09:00
Sven Dowideit 30cde97e5c use the Docker Hub as the product name
Signed-off-by: Sven Dowideit <SvenDowideit@home.org.au>
2015-08-18 21:13:57 +10:00
Harald Albers 18381faee6 Fix bash completion for log driver options
This option was incorrectly ported to the new `daemon` subcommand
structure.

Beside the obvious effect that completion of `docker daemon --log-opt`
did not work, this also caused completion of `docker` and `docker xxx`
to fail on macs with

> bash: words: bad array subscript

Signed-off-by: Harald Albers <github@albersweb.de>
2015-08-18 09:17:29 +02:00
Kai Blin ba29d31c9c reference/run: Some editorial changes
Based on the suggestions from @moxiegirl, some changes to make the wording more clear.

Signed-off-by: Kai Blin <kai@samba.org>
2015-08-18 08:56:56 +02:00
Lei Jitang 770daa15f3 Fix build with resource limit which system is not support.
Signed-off-by: Lei Jitang <leijitang@huawei.com>
2015-08-18 11:54:00 +08:00
Zhang Kun 1ed15550f5 fix in daemon side
Signed-off-by: Zhang Kun <zkazure@gmail.com>

goformat

Signed-off-by: Zhang Kun <zkazure@gmail.com>

fix small

Signed-off-by: Zhang Kun <zkazure@gmail.com>

change to rm

Signed-off-by: Zhang Kun <zkazure@gmail.com>

handler other error

Signed-off-by: Zhang Kun <zkazure@gmail.com>

unique ERR

Signed-off-by: Zhang Kun <zkazure@gmail.com>

setHostConfig_fail_test

Signed-off-by: Zhang Kun <zkazure@gmail.com>

format

Signed-off-by: Zhang Kun <zkazure@gmail.com>

err handle and modify test

Signed-off-by: Zhang Kun <zkazure@gmail.com>

golint error

Signed-off-by: Zhang Kun <zkazure@gmail.com>
2015-08-18 10:06:36 +08:00
moxiegirl 66112a7ae5 Merge pull request #15613 from mgrauer/update_docs_installation_mac_docker_machine_name
Update dev machine name to default in mac installation docs
2015-08-17 19:05:34 -07:00
Alexandre Beslic f1da5edc8b Merge pull request #15380 from calavera/remove_sys_info_pointers
Remove pointers from the SysInfo struct.
2015-08-17 18:40:54 -07:00
moxiegirl 5ab6883b92 Merge pull request #15430 from charleswhchan/patch-2
Cleanup "Working with containers" page.
2015-08-17 17:46:05 -07:00
Brian Goff fd2e945d15 Merge pull request #15650 from LK4D4/fix_max_file_error
Fix error message in max-file validation
2015-08-17 20:27:12 -04:00
Brian Goff 1c916dbd83 Merge pull request #15632 from mountkin/fix-15626
a quick fix to #15626
2015-08-17 20:26:47 -04:00
Doug Davis 29ced5d0c4 Merge pull request #15599 from calavera/ps_format_q
Fix ignore `-q` flag in `docker ps` when there is a default format.
2015-08-17 15:44:28 -07:00
Alexander Morozov cde607108b Fix error message in max-file validation
Signed-off-by: Alexander Morozov <lk4d4@docker.com>
2015-08-17 15:34:39 -07:00
Alexander Morozov 3f61002b05 Fix LogConfig.Config in inspect
Also add test for daemon-wide log-opt.

Signed-off-by: Alexander Morozov <lk4d4@docker.com>
2015-08-17 15:27:44 -07:00
Alexander Morozov 960791ba60 Check syslog config on daemon start
Signed-off-by: Alexander Morozov <lk4d4@docker.com>
2015-08-17 14:29:45 -07:00
Brian Goff 5c88a6fdca Merge pull request #15292 from mountkin/fix-exec-test
move the assertions outside of the goroutine
2015-08-17 17:24:58 -04:00
Alexander Morozov b7a6d14bdc Do not allow corrupted syslog-address
Signed-off-by: Alexander Morozov <lk4d4@docker.com>
2015-08-17 14:19:06 -07:00
Alexander Morozov aef15ffc5d Merge pull request #15611 from mariussturm/master
Initialize LogConfig in daemon mode
2015-08-17 14:17:54 -07:00
David Calavera 436fca704f Merge pull request #15356 from Microsoft/10662-uncpathonbuild
Windows: Allow UNC paths on build
2015-08-17 13:34:27 -07:00
Srini Brahmaroutu 9e1a41aae5 daemon/graphdriver fix lint errors/warnings
Addresses #14756

Signed-off-by: Srini Brahmaroutu <srbrahma@us.ibm.com>
2015-08-17 19:27:36 +00:00
John Howard df7ab6f3db Windows: Allow UNC paths on build
Signed-off-by: John Howard <jhoward@microsoft.com>
Signed-off-by: Stefan J. Wernli <swernli@microsoft.com>
2015-08-17 11:03:54 -07:00
Alexander Morozov 5aeb48af77 Merge pull request #15635 from cpuguy83/15633_allow_logconfig_empty_driver
Fix `inspect` output when no log driver specified
2015-08-17 11:03:37 -07:00
David Calavera df46bfdd4d Fix ignore -q flag in docker ps when there is a default format.
Docker ps default format should not take precedence over cli flags.
This happens effectively for other flags except `-q`.
We need to let the cli to set the format as table to print the
expected output with `-q`.

Signed-off-by: David Calavera <david.calavera@gmail.com>
2015-08-17 10:48:04 -07:00
David Calavera 2e7b088164 Merge pull request #15579 from Microsoft/10662-graph
Windows: Graph remove custom interface, add central store
2015-08-17 10:45:48 -07:00
Brian Goff 2f2779b6a5 Fix inspect output when no log driver specified
Config options were being ignored in the inspect output when no driver
was specified.

Signed-off-by: Brian Goff <cpuguy83@gmail.com>
2015-08-17 11:35:34 -04:00
Shijiang Wei 3977f30869 a quick fix to #15626
Signed-off-by: Shijiang Wei <mountkin@gmail.com>
2015-08-17 21:35:57 +08:00
Sebastiaan van Stijn bba762b192 Merge pull request #15237 from charleswhchan/patch-3
Reformat /containers/(id)/resize to make it consistent with other sections.
2015-08-16 10:59:16 +02:00
Charles Chan 6cd2d89469 Reformat /containers/(id)/resize to make it consistent with "Exec Resize" section.
Signed-off-by: Charles Chan <charleswhchan@users.noreply.github.com>
2015-08-15 19:47:01 -07:00
Sebastiaan van Stijn e1f3a5ad0a Merge pull request #14113 from dit4c/10348-exec-privileged
Remerge of `docker exec --privileged` with better tests
2015-08-16 00:20:41 +02:00
Michael Grauer f26045a534 Update dev machine name to default in mac installation docs
Signed-off-by: Michael Grauer <michael.grauer@kitware.com>
2015-08-15 15:56:41 -04:00
Marius Sturm e904cbec03 Initialize LogConfig in daemon mode
Signed-off-by: Marius Sturm <marius@graylog.com>
2015-08-15 18:06:03 +02:00
Charles Chan 2fcae333e8 Cleanup "Working with containers" page.
* Cleanup introduction
* Update output of `docker version`
* Cleanup explaination of `docker inspect`
* Change 'deleting' to 'removing' for consistency

Signed-off-by: Charles Chan <charleswhchan@users.noreply.github.com>
2015-08-15 08:44:56 -07:00
Dharmit Shah 0a925d07a8 Fixing docs to remove references to links under terms/
Removed terms/ directory

Signed-off-by: Dharmit Shah <shahdharmit@gmail.com>
2015-08-15 13:09:29 +05:30
Stefan J. Wernli dfbb5520e3 Windows: Graph remove custom interface and add central store
Signed-off-by: Stefan J. Wernli <swernli@microsoft.com>

Windows: add support for images stored in alternate location.

Signed-off-by: Stefan J. Wernli <swernli@microsoft.com>
2015-08-14 23:45:53 -07:00
Brian Goff a6e0a6852d Merge pull request #15602 from Microsoft/10662-blockfromscratch
Windows: Block 'FROM scratch'
2015-08-14 21:12:15 -07:00
Arnaud Porterie 167783eb13 Merge pull request #15601 from mrjana/vendor18
Vendoring in vishvananda/netlink
2015-08-14 20:22:54 -07:00
Arnaud Porterie bd9cc788d0 Merge pull request #15598 from cpuguy83/15570_fix_exec_tty
Fix issue with exec TTY caused by 15446
2015-08-14 19:43:04 -07:00
Don Kjer 47272f9cc5 Adding support to publish on custom host port ranges
Signed-off-by: Don Kjer <don.kjer@gmail.com>

Changing vendor/src/github.com/docker/libnetwork to match lindenlab/libnetwork custom-host-port-ranges-1.7 branch
2015-08-15 02:41:29 +00:00
John Howard 6df6e2e405 Windows: Block 'FROM scratch'
Signed-off-by: John Howard <jhoward@microsoft.com>
2015-08-14 18:17:19 -07:00
Jana Radhakrishnan 7948b755c7 Vendoring in vishvananda/netlink
Updating netlink package to 4b5dce31de6d42af5bb9811c6d265472199e0fec
to fix certain wierd netlink issues seen.

Signed-off-by: Jana Radhakrishnan <mrjana@docker.com>
2015-08-14 18:02:58 -07:00
Sebastiaan van Stijn 837a66e79b Merge pull request #15595 from estesp/build-experimental
Add info on how to build experimental binaries
2015-08-15 01:32:10 +02:00
Brian Goff 5ffcecf130 Fix issue with exec TTY caused by 15446
The bool logic around setting up the TTY ended up getting flipped
accidentally.
Also added a test for exec with TTY.

Signed-off-by: Brian Goff <cpuguy83@gmail.com>
2015-08-14 14:55:26 -07:00
moxiegirl aedd45346a Merge pull request #15428 from charleswhchan/patch-1
Improve/fix "Dockerizing Applications" page.
2015-08-14 14:03:11 -07:00
David Calavera 313b37129a Merge pull request #15525 from albers/completion-option-updates
Updates to bash completion for docker run and docker daemon.
2015-08-14 13:55:11 -07:00
Phil Estes 3f8d60ac2f Add info on how to build experimental binaries
..also update the text that says "TO.BE.DETERMINED" to the actual URL
where the experimental nightlies are published.

Docker-DCO-1.1-Signed-off-by: Phil Estes <estesp@linux.vnet.ibm.com>
2015-08-14 16:45:38 -04:00
Jessie Frazelle 424fa59859 Merge pull request #15568 from Microsoft/10662-commitrunning
Windows: Stop commit on running container
2015-08-14 13:13:42 -07:00
Tibor Vass 3e523ae015 Merge pull request #14530 from Microsoft/10662-serversidevalidation
Windows: [TP3] Move netmode validation to server
2015-08-14 16:05:59 -04:00
John Howard f6ed590596 Move netmode validation to server
Signed-off-by: John Howard <jhoward@microsoft.com>
2015-08-14 12:17:41 -07:00
Tianon Gravi 53b1f993ab Merge pull request #15580 from hqhq/hq_fix_NETPRIO_check
Adapt CONFIG_NETPRIO_CGROUP in check-config.sh
2015-08-14 12:03:03 -07:00
Alexander Morozov d1fada4bf7 Merge pull request #15584 from mavenugo/ln-vendor-in
Vendoring in libnetwork 22dc04d06067b40a9e7ef575aee6d1bb69d4dcc3
2015-08-14 11:56:47 -07:00
Sebastiaan van Stijn f39323c1e3 Merge pull request #15519 from albers/changelog-dangling
[Fix 15518] wrong feature description in changelog
2015-08-14 20:48:48 +02:00
Sebastiaan van Stijn 575a104b3f Merge pull request #15524 from veggiemonk/patch-README
update README.md
2015-08-14 20:45:40 +02:00
Sebastiaan van Stijn d1585f1d66 Merge pull request #15542 from MHBauer/rundoclink
fix link
2015-08-14 20:35:51 +02:00
moxiegirl 424702b91a Merge pull request #15574 from diogomonica/fixing-race-on-key-backup
Fixing race condition on private key backup how-to
2015-08-14 11:26:56 -07:00
moxiegirl ff155ce6ee Merge pull request #15576 from estesp/hows-about-a-minor-typo
Correct readability of --userland-proxy para.
2015-08-14 11:26:21 -07:00
Arnaud Porterie 28a17c8a03 Merge pull request #15491 from Microsoft/10662-fixtar
Windows: [TP3] Fixing Tar functions to support long paths.
2015-08-14 09:41:42 -07:00
Madhu Venugopal 703e2264ba Vendoring in libnetwork 22dc04d06067b40a9e7ef575aee6d1bb69d4dcc3
Notable changes include :
- #285 : Fix required for https://github.com/docker/docker/pull/12927
- #283 : Code re-architecture/tech-debt in bridge driver
- Upgraded to latest Netlink library
- Fixed certain race-conditions

Signed-off-by: Madhu Venugopal <madhu@docker.com>
2015-08-14 05:57:47 -07:00
Rory Hunter 60d97a4a63 Make run and rmi bash completions configurable
Allow the user to configure how Docker's bash completion works for the
"events", "history", "inspect", "run", "rmi" and "save" commands through the
following environment variables:

DOCKER_COMPLETION_SHOW_IMAGE_IDS
  "none" - Show names only (default)
  "non-intermediate" - Show names and ids, but omit intermediate image IDs
  "all" - Show names and ids, including intermediate image IDs

DOCKER_COMPLETION_SHOW_TAGS
  "yes" - include tags in completion options (default)
  "no"  - don't include tags in completion options

Fixes #9474.

Signed-off-by: Rory Hunter <roryhunter2@gmail.com>
2015-08-14 11:29:29 +01:00
Qiang Huang 6c4d4c70c6 Adapt CONFIG_NETPRIO_CGROUP in check-config.sh
Fixes: #15572

Signed-off-by: Qiang Huang <h.huangqiang@huawei.com>
2015-08-14 14:38:48 +08:00
Arnaud Porterie 693ff58cd2 Merge pull request #14758 from Microsoft/10662-pipestohcs
Windows: [TP3] new hcsshim stdin/out/err handling
2015-08-13 22:52:48 -07:00
John Howard 4b933dd2ea Windows: Stop commit on running container
Signed-off-by: John Howard <jhoward@microsoft.com>
2015-08-13 22:17:03 -07:00
Phil Estes 4e53e80934 Correct readability of --userland-proxy para
Was reading this to explain it to someone and noticed the missing "s"
which makes it not so great for nice English readability..

Docker-DCO-1.1-Signed-off-by: Phil Estes <estesp@linux.vnet.ibm.com>
2015-08-13 23:56:42 -04:00
Diogo Monica fbb268c12a Fixing race condition on private key backup how-to
Signed-off-by: Diogo Monica <diogo@docker.com>
2015-08-13 19:16:00 -07:00
David Calavera 54b50479af Merge pull request #15065 from calavera/new_release_branch_workflow
Make the release process more atomic between major releases.
2015-08-13 16:10:11 -07:00
Jessie Frazelle b93d99b25d Merge pull request #15545 from LK4D4/refactor_pullv2
Refactoring of pullV2Tag
2015-08-13 15:52:14 -07:00
Jessie Frazelle 46d9fd6a11 Merge pull request #15367 from hqhq/hq_update_rpm_deb_desc
Tiny fix for rpm and deb descriptions
2015-08-13 15:04:50 -07:00
John Starks ec5a73d18e Windows: new hcsshim stdin/out/err handling
Signed-off-by: John Howard <jhoward@microsoft.com>
2015-08-13 13:09:42 -07:00
Vincent Batts 4ce24eb73a vendor: update tar-split to v0.9.6
Fixes rare edge case of handling GNU LongLink and LongName entries.
Perf improvements. /dev/null writes were taking CPU time during docker
push. Thanks @LK4D4
Various cleanup too.

Signed-off-by: Vincent Batts <vbatts@redhat.com>
2015-08-13 15:42:01 -04:00
Eric Windisch 7342d59114 AppArmor: Deny w to /proc/* files
Introduce a write denial for files at the root of /proc.

This prohibits root users from performing a chmod of those
files. The rules for denials in proc are also cleaned up,
making the rules better match their targets.

Locally tested on:
- Ubuntu precise (12.04) with AppArmor 2.7
- Ubuntu trusty (14.04) with AppArmor 2.8.95

Signed-off-by: Eric Windisch <eric@windisch.us>
2015-08-13 15:39:25 -04:00
Sebastiaan van Stijn c6c195a465 Merge pull request #13501 from vdemeester/8048-image-repository-tag
Fix #8048 : make `docker images repository:tag` work
2015-08-13 21:36:21 +02:00
Alexander Morozov 9b2426c606 Refactoring of pullV2Tag
* use downloadInfo pointers everywhere
* use downloads slice only for things that we really download
* cleanup tmp files in all cases

Signed-off-by: Alexander Morozov <lk4d4@docker.com>
2015-08-13 11:50:19 -07:00
Sebastiaan van Stijn 599b76000d Merge pull request #15560 from docker/patch-bad-formatting
Fixing bad formatting reported by David via email
2015-08-13 20:26:05 +02:00
Jessie Frazelle 355f640d4d Merge pull request #15559 from liusdu/liusdu-type
fix a typo in graph/graph.go
2015-08-13 09:33:00 -07:00
Jessie Frazelle 53812e51f4 Merge pull request #15563 from ankushagarwal/changelog
Add 1.8.1 CHANGELOG
2015-08-13 09:28:31 -07:00
Ankush Agarwal 4ac8fd98b3 Add 1.8.1 CHANGELOG
Signed-off-by: Ankush Agarwal <ankushagarwal11@gmail.com>
2015-08-13 09:02:04 -07:00
Sebastiaan van Stijn 6b1b1ad31c Merge pull request #15451 from liubin/liubin/fix-broken-link
fix broken link to wiki
2015-08-13 17:03:41 +02:00
moxiegirl 68a4beeba4 Merge pull request #15554 from HuKeping/docs-notary
Docs: some fix about notarysandbox
2015-08-13 07:47:35 -07:00
bin liu f6753cd963 fix broken link to glossary page.
Signed-off-by: bin liu <liubin0329@gmail.com>
2015-08-13 22:40:20 +08:00
moxiegirl ef453f7118 Fixing bad formatting reported by David via email
Fixed and tested

Signed-off-by: Mary Anthony <mary@docker.com>
2015-08-13 06:42:26 -07:00
Liu Hua 883fcfe425 fix a typo in graph/graph.go
Signed-off-by: Liu Hua <sdu.liu@huawei.com>
2015-08-13 20:01:43 +08:00
Zhang Wei 7e420ad850 fix golint warnings/errors on pkg/system and pkg/stdcopy
Signed-off-by: Zhang Wei <zhangwei555@huawei.com>
2015-08-13 18:47:13 +08:00
Hu Keping 79aac6584d Docs: some fix about notarysandbox
Signed-off-by: Hu Keping <hukeping@huawei.com>
2015-08-13 16:53:05 +08:00
Vincent Demeester 4fb88d2e11 Fix #8048 : make docker images repository:tag work
Make command like "docker images ubuntu:14.04" work and filter out the
image with the given tag.

Closes #8048.

Signed-off-by: Vincent Demeester <vincent@sbr.pm>
2015-08-13 08:50:09 +02:00
Tim Dettrick 90326939c8 Updated test to check for exec --privileged side-effects
Also improving documentation for same feature as part of
docker/docker#14113 docs review.

Signed-off-by: Tim Dettrick <t.dettrick@uq.edu.au>
2015-08-13 16:37:20 +10:00
Tim Dettrick 03f65b3d0d Revert "Revert "Add docker exec run a command in privileged mode""
This reverts commit 40b71adee3.

Original commit (for which this is effectively a rebased version) is
72a500e9e5 and was provided by Lei Jitang
<leijitang@huawei.com>.

Signed-off-by: Tim Dettrick <t.dettrick@uq.edu.au>
2015-08-13 16:36:44 +10:00
Kai Blin 8a61e2b151 reference/run: Add some articles
Signed-off-by: Kai Blin <kai@samba.org>
2015-08-13 06:35:48 +02:00
Kai Blin 4d89910820 reference/run: Add a paragraph break
Signed-off-by: Kai Blin <kai@samba.org>
2015-08-13 06:34:57 +02:00
moxiegirl 650feb29f1 Merge pull request #15541 from thaJeztah/hashtag-space
docs: fix fedora prerequisites heading
2015-08-12 19:33:38 -07:00
Jessie Frazelle 30cf473f26 Merge pull request #15543 from icecrime/15536_partial_manifest
Fix partial manifest push
2015-08-12 19:19:07 -07:00
Arnaud Porterie 72e55cb0ec Merge pull request #15399 from Microsoft/10662-portmapping
Windows: [TP3] Enable NAT port mapping
2015-08-12 19:07:14 -07:00
Arnaud Porterie 697cdb8e2f Update regression test
Signed-off-by: Arnaud Porterie <arnaud.porterie@docker.com>
2015-08-12 18:46:55 -07:00
Arnaud Porterie 4f3b0d0f4a Revert #14884
This reverts commit 810d3b2642.

Signed-off-by: Arnaud Porterie <arnaud.porterie@docker.com>
2015-08-12 18:46:48 -07:00
Morgan Bauer c50e78e799 fix link
Signed-off-by: Morgan Bauer <mbauer@us.ibm.com>
2015-08-12 17:20:20 -07:00
Sebastiaan van Stijn e26ee9a317 Merge pull request #15521 from albers/changelog-rollover
[Fix 15520] wrong feature description (rollover) in changelog
2015-08-13 02:17:42 +02:00
David Calavera d50881e446 Merge pull request #15449 from albers/completion-help
Remove -h flag from completion and daemon reference
2015-08-12 17:09:51 -07:00
Sebastiaan van Stijn 2c18e1cd05 docs: fix fedora prerequisites heading
Fixes the prerequisites heading not being
rendered properly, because of a missing space.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2015-08-13 01:29:10 +02:00
John Howard 4393be7100 Windows: Enable NAT port mapping
Signed-off-by: John Howard <jhoward@microsoft.com>
2015-08-12 13:17:27 -07:00
Alexander Morozov d50d56b352 Merge pull request #15531 from Microsoft/10662-buildercommands
Windows: Error on unsupported builder command
2015-08-12 13:13:03 -07:00
Alexander Morozov d8ff9ef2b5 Merge pull request #15504 from kolyshkin/zfs-nitpicks
zfs nitpicks
2015-08-12 11:54:35 -07:00
Jessie Frazelle d3198fa8c4 Merge pull request #15446 from cpuguy83/better_err_on_exec_err
Return better errors from exec
2015-08-12 11:13:29 -07:00
John Howard 394ccfac07 Windows: Error on unsupported builder command
Signed-off-by: John Howard <jhoward@microsoft.com>
2015-08-12 10:02:23 -07:00
moxiegirl 8a0efadee1 Merge pull request #15450 from liubin/liubin/change-port-number-through-example
change port number through example context
2015-08-12 09:49:50 -07:00
Jessie Frazelle e82358586d Merge pull request #15183 from jfrazelle/test-install-script
add file to test install script
2015-08-12 09:49:35 -07:00
Harald Albers e4d8a8e1ca Add storage options to bash completion
Signed-off-by: Harald Albers <github@albersweb.de>
2015-08-12 06:13:24 -07:00
Julien Bisconti c7ab9b4a5c update README.md
Add Awesome-docker list to docker resources.

Signed-off-by: Julien Bisconti <julien.bisconti@gmail.com>
2015-08-12 15:10:29 +02:00
Harald Albers 5c1ad6f90c Add options for the json-file logging driver to bash completion
Signed-off-by: Harald Albers <github@albersweb.de>
2015-08-12 04:39:29 -07:00
Harald Albers 644c158837 Update bash completion for docker run
Also fixed sort order of options using `sort -d`

Signed-off-by: Harald Albers <github@albersweb.de>
2015-08-12 04:38:55 -07:00
Harald Albers 967c50cfe9 Fix wrong feature description (rollover) in changelog
Signed-off-by: Harald Albers <github@albersweb.de>
2015-08-12 04:20:16 -07:00
Harald Albers b4a89489ae Fix wrong feature description in changelog
See https://github.com/docker/docker/issues/15518

Signed-off-by: Harald Albers <github@albersweb.de>
2015-08-12 03:25:37 -07:00
Arnaud Porterie dc945f5559 Merge pull request #15512 from moxiegirl/fix-links-checker
Fixes after release
2015-08-11 23:15:04 -07:00
Mary Anthony 8b09f8a302 Fixes after release
Adding in a link about the deprecated material
Fixing bad link to staging

Signed-off-by: Mary Anthony <mary@docker.com>
2015-08-11 23:13:14 -07:00
Kai Blin a7cfb098d4 reference/run: Clarify the use of numeric UIDs
it is possible to pass an UID that has not been created inside the container, clarify this in the docs.
This should fix issue #14795

Signed-off-by: Kai Blin <kai@samba.org>
2015-08-12 06:34:37 +02:00
Kir Kolyshkin 15a232fd06 graphdriver/zfs: fix GetMetadata() comment
Commit e27c904 added a wrong and misleading comment
to GetMetadata(). Fix it using the wording from
commit 407a626 which introduced GetMetadata().

Signed-off-by: Kir Kolyshkin <kir@openvz.org>
2015-08-11 18:16:11 -07:00
Kir Kolyshkin f5f7fee2ec graphdriver/zfs: privatize mountPath and zfsPath
These functions are not part of the graphdriver.Driver
interface and should therefore be private.

Also, remove comments added by commit e27c904 as they are
* pretty obvious
* no longer required by golint

Signed-off-by: Kir Kolyshkin <kir@openvz.org>
2015-08-11 18:16:08 -07:00
Alexander Morozov f5e2c6f14b Merge pull request #15502 from mrunalp/fixup_comment
Fix incorrect comment
2015-08-11 16:53:23 -07:00
Mrunal Patel d626f77e36 Fix incorrect comment
Signed-off-by: Mrunal Patel <mrunalp@gmail.com>
2015-08-11 19:45:23 -04:00
Jessie Frazelle 13873e6841 Merge pull request #15377 from jfrazelle/do-not-keep-old-experimental-debs
do not keep old debs for experimental
2015-08-11 16:35:55 -07:00
Jessica Frazelle 0eade329dc fix oracle linux install
Signed-off-by: Jessica Frazelle <acidburn@docker.com>
2015-08-11 16:33:14 -07:00
Jessica Frazelle 83416f68de add file to test install script
Signed-off-by: Jessica Frazelle <acidburn@docker.com>
2015-08-11 16:31:58 -07:00
Stefan J. Wernli 230cfc6ed2 Fixing Tar functions to support Windows long paths.
Signed-off-by: Stefan J. Wernli <swernli@microsoft.com>
2015-08-11 16:07:36 -07:00
Tobias Gesellchen 9bde19e72a skip checkOrigin during websocket handshake
Signed-off-by: Tobias Gesellchen <tobias@gesellix.de>
2015-08-12 00:05:59 +02:00
David Calavera 0e3674d7d0 Merge pull request #15485 from calavera/merge_release_v1.8.0
Bump version to 1.8.0 in master
2015-08-11 13:38:57 -05:00
David Calavera a09ba62d18 Bump dev version to 1.9.0-dev
Signed-off-by: David Calavera <david.calavera@gmail.com>
2015-08-11 10:21:12 -05:00
David Calavera e873686017 Bump version to 1.8.0
Signed-off-by: David Calavera <david.calavera@gmail.com>
2015-08-11 10:20:47 -05:00
David Calavera bca8159174 Make the release process more atomic between major releases.
Rather than keeping a branch named "release" where we merge every release,
we want to keep "disposable" release branches for each release.

This will make much easier to create new major releases, since we always
want to start these releases from what we have in master. We create a
disposable release branch from master that we'll only use during the lifecycle
of the major release.

Once the release branch is created, the release captain will use a "bump" branch
in her own fork to cherry pick changes that will need to be applied to this
release. We'll track those changes in a pull request between the disposable release
branch and the bump branch.

Signed-off-by: David Calavera <david.calavera@gmail.com>
2015-08-11 10:09:25 -05:00
David Calavera 3e596da9ea Merge pull request #15474 from tonistiigi/network-ui-endpoints-windows
Mark network ui endpoints unix-only
2015-08-11 09:32:09 -05:00
Harald Albers ceb11d9660 Remove -h flag from completion and daemon reference
All docker subcommands support `-h` as an alias for `--help`
unless they have `-h` aliased to something else like `docker run`,
which uses `-h` for `--hostname`.

`-h` is not included in the help messages of the commands, though.

It ist visible in
* reference: only in `docker daemon` reference,
  see output of `grep -Rse --help=false docs`
* man pages: only in `docker` man page
  see output of `grep -RF '**-h**' man`

For consistency reasons, this commit removes `-h` as an alias for
`--help` from the reference page, man page and the bash completion.

Signed-off-by: Harald Albers <github@albersweb.de>
2015-08-11 07:30:58 -07:00
Jessie Frazelle beab255cc0 Merge pull request #15473 from jfrazelle/minor-cosmetic-change
minor cosmetic change to client output on pull
2015-08-10 23:20:05 -07:00
Jessica Frazelle 8bd6322760 minor cosmetic change to client output on pull
Signed-off-by: Jessica Frazelle <acidburn@docker.com>
2015-08-10 21:54:03 -07:00
Tonis Tiigi 6e3740450d Mark network ui endpoints unix-only
Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
2015-08-10 21:49:27 -07:00
Jessie Frazelle ca8f24679e Merge pull request #15459 from jfrazelle/make-windows-cross-compile-static-daemon-work
make windows cross compile static daemon work
2015-08-10 17:53:09 -07:00
moxiegirl c4cb55b84f Merge pull request #15458 from moxiegirl/remove-registry-v1-14616
Removing references to registry 1.0
2015-08-10 17:44:32 -07:00
Mary Anthony d550d729e1 Initial work
Removing references to regsitry 1.0, pointing to distribution
Updating links and title
Adding in comments

Signed-off-by: Mary Anthony <mary@docker.com>
2015-08-10 17:43:41 -07:00
moxiegirl 1eb1083066 Merge pull request #15396 from moxiegirl/my-trust-changes
Docker content trust documentation
2015-08-10 17:24:06 -07:00
Diogo Monica 753bf40f15 Docker content trust documentation
- started from Diogo's work
- updated after discussions with team
- Updating with new key names
- fixing weight
- adding in sandbox
- adding in gliffy for images
- backing out to old names for now
- Copy edit pass
- Entering comments from the content trust team
- Update name of branch and image name
- Removing the last diogo reference
- Updating with Seb's comments

Signed-off-by: Mary Anthony <mary@docker.com>
2015-08-10 17:22:11 -07:00
Jessica Frazelle e62745922f make windows cross compile static daemon work
Signed-off-by: Jessica Frazelle <acidburn@docker.com>
2015-08-10 16:16:58 -07:00
moxiegirl 4bfbeb80a6 Merge pull request #15462 from moxiegirl/add-migrate-windows-15454
Updating new vm name, add migrate, and Windows 10 limitation
2015-08-10 15:13:08 -07:00
Mary Anthony e5c160e1d6 Updating new vm and with migrate
Signed-off-by: Mary Anthony <mary@docker.com>
2015-08-10 13:29:08 -07:00
Alexander Morozov 0bfad28b86 Merge pull request #15422 from kolyshkin/graphtest-fix
graphtest: filter out lost+found dir entry
2015-08-10 12:21:21 -07:00
Tibor Vass 4293861c1e Merge pull request #15452 from albers/completion-storage-driver
Add missing storage drivers to bash completion
2015-08-10 13:25:45 -04:00
Alexander Morozov 6f89a8ee1b Merge pull request #15404 from vbatts/vbatts-dm-zero-sized-field
devicemapper: fix zero-sized field access
2015-08-10 09:16:11 -07:00
Harald Albers 5cee7e8116 Add missing storage drivers to bash completion
Signed-off-by: Harald Albers <github@albersweb.de>
2015-08-10 08:49:40 -07:00
bin liu b0a65f93a5 change port number through example context
Signed-off-by: bin liu <liubin0329@gmail.com>
2015-08-10 23:12:03 +08:00
Vincent Batts f83d05c3be devicemapper: fix zero-sized field access
Fixes: #15279

Due to
https://github.com/golang/go/commit/7904946eeb35faece61bbf6f5b3cc8be2f519c17
the devices field is dropped.

This solution works on go1.4 and go1.5

Signed-off-by: Vincent Batts <vbatts@redhat.com>
2015-08-10 11:11:58 -04:00
Brian Goff 51249a3aa0 Merge pull request #15445 from hqhq/hq_use_docker_daemon
Change all docker -d to docker daemon
2015-08-10 10:35:19 -04:00
Brian Goff 2231c5161e Merge pull request #15447 from albers/completion-ps-format
Add `docker ps --format` to bash completion
2015-08-10 10:31:49 -04:00
Kun Zhang a7c00bc1a2 change exportImage to top-level func
Signed-off-by: Kun Zhang <zkazure@gmail.com>

remove useless FIXME

Signed-off-by: Kun Zhang <zkazure@gmail.com>

fix

Signed-off-by: Kun Zhang <zkazure@gmail.com>
2015-08-10 22:18:57 +08:00
Brian Goff f078f75bf2 Return better errors from exec
Also cleans up some of the API side of exec.
Was writing the header twice (two different headers).

Signed-off-by: Brian Goff <cpuguy83@gmail.com>
2015-08-10 09:53:19 -04:00
Harald Albers c465ba7bde Add docker ps --format to bash completion
Signed-off-by: Harald Albers <github@albersweb.de>
2015-08-10 06:51:14 -07:00
David Calavera ba0eba6960 Merge pull request #15426 from BenHall/15425-set-e-install-script-fix
Fix install.sh to handle non-zero exit codes when checking lsb_release
2015-08-10 08:47:19 -05:00
David Calavera 650d5d5d7a Merge pull request #15437 from calavera/remove_wrong_doc
Remove doc that doesn't apply to Journald.
2015-08-10 08:44:08 -05:00
David Calavera 5d54f50751 Merge pull request #15441 from summershrimp/master
fix typo mistake
2015-08-10 08:18:09 -05:00
Qiang Huang 81cc8ebc93 Change all docker -d to docker daemon
Signed-off-by: Qiang Huang <h.huangqiang@huawei.com>
2015-08-10 20:48:08 +08:00
Yibai Zhang fa9e54fbf1 fix typo mistake
Signed-off-by: Yibai Zhang <xm1994@gmail.com>
2015-08-10 16:30:48 +08:00
David Calavera f1412f2942 Remove doc that doesn't apply to Journald.
Signed-off-by: David Calavera <david.calavera@gmail.com>
2015-08-09 22:12:42 -05:00
Qiang Huang ff97bc79cb Tiny fix for rpm and deb descriptions
Signed-off-by: Qiang Huang <h.huangqiang@huawei.com>
2015-08-10 09:34:10 +08:00
moxiegirl b173314cca Merge pull request #15400 from vincentbernat/doc/memory-cgroup-overhead
doc: add a notice about memory accounting overhead
2015-08-09 16:38:41 -07:00
Sebastiaan van Stijn 8e05a3e30f Merge pull request #15411 from moxiegirl/fix-links-15349
Fixes #15349 too many apis
2015-08-09 20:52:49 +02:00
Kir Kolyshkin 158c536267 graphtest: filter out lost+found dir entry
Ploop graph driver provides its own ext4 filesystem to every
container. It so happens that ext4 root comes with lost+found
directory, causing failures from DriverTestCreateEmpty() and
DriverTestCreateBase() tests on ploop.

While I am not yet ready to submit ploop graph driver for review,
this change looks simple enough to push.

Note that filtering is done without any additional allocations,
as described in https://github.com/golang/go/wiki/SliceTricks.

[v2: added a comment about lost+found]

Signed-off-by: Kir Kolyshkin <kir@openvz.org>
2015-08-09 10:23:36 -07:00
moxiegirl 98ec623a8b Merge pull request #15431 from charleswhchan/patch-4
Cleanup "Automatically start containers" page.
2015-08-09 10:10:42 -07:00
Charles Chan ad3df49958 Cleanup "Automatically start containers" page.
* Remove old information for Docker 1.2. (See PR #15408)

Signed-off-by: Charles Chan <charleswhchan@users.noreply.github.com>
2015-08-08 17:28:21 -07:00
Charles Chan 316eb2979e Improve/fix "Dockerizing Applications" page.
* Try to update the wording for the notes.

Signed-off-by: Charles Chan <charleswhchan@users.noreply.github.com>
2015-08-08 16:13:23 -07:00
Doug Davis 34a17a5de1 Merge pull request #15427 from calavera/fix_overlay_typo
Fix typo in Overlay documentation.
2015-08-08 18:14:38 -04:00
David Calavera f1f6738d97 Fix typo in Overlay documentation.
Signed-off-by: David Calavera <david.calavera@gmail.com>
2015-08-08 15:11:09 -07:00
moxiegirl 00843d18d8 Merge pull request #15312 from yyekhlef/fedora_22_doc
Fedora 22 manual network configuration and ip forwarding
2015-08-08 12:59:11 -07:00
moxiegirl 030df72279 Merge pull request #15408 from ankushagarwal/env-var-docs
Make Environment replacement note less kludgy
2015-08-08 12:56:19 -07:00
moxiegirl 22d539866c Merge pull request #15409 from ankushagarwal/wgetcurl
Make official install instructions use curl instead of wget
2015-08-08 12:51:48 -07:00
Brian Goff cc73fc03e8 Merge pull request #15421 from maaquib/15418-ps-image-id-too-wide
Truncating image id is docker ps to a length of 12
2015-08-08 07:48:16 -04:00
Brian Goff 764aa1a583 Merge pull request #15074 from coolljt0725/14756_enable_golint_2
Enable golint in pkg/jsonlog and pkg/jsonmessage part of #14756
2015-08-08 07:14:53 -04:00
Ben Hall 3b28bada0a Fix install.sh to handle non-zero exit codes when checking lsb_release
Signed-off-by: Ben Hall <ben@benhall.me.uk>
2015-08-08 11:44:52 +01:00
Arnaud Porterie bf892dcfcc Merge pull request #15420 from vlajos/typofixes-vlajos-20150807
typofix - https://github.com/vlajos/misspell_fixer
2015-08-08 01:08:49 -07:00
Arnaud Porterie 46f40c34d2 Merge pull request #15424 from coolljt0725/typo_remove_useless_period
Typo: remove unconsistent period in docker info
2015-08-08 01:04:38 -07:00
Lei Jitang dc2a7ab750 Typo: remove unconsistent period in docker info
Signed-off-by: Lei Jitang <leijitang@huawei.com>
2015-08-08 13:06:59 +08:00
Alexander Morozov 03f969d0b3 Merge pull request #15423 from HuKeping/if-else
Remove useless if-else
2015-08-07 21:54:30 -07:00
Hu Keping c536cec5ea Remove useless if-else
It is better to use simple form without else.

Signed-off-by: Hu Keping <hukeping@huawei.com>
2015-08-08 20:02:44 +08:00
Lei Jitang 5220f3b535 Enable golint in pkg/jsonlog and pkg/jsonmessage.
Signed-off-by: Lei Jitang <leijitang@huawei.com>
2015-08-08 11:28:22 +08:00
David Calavera 196aa6d62d Merge pull request #14965 from stefanberger/nohidevols2
Have network files mounted read-only when -v parameter has 'ro' passed
2015-08-07 19:10:59 -07:00
Mohammed Aaqib Ansari 1a2ccf59ee Truncating image id to 12 in docker ps
Signed-off-by: Mohammed Aaqib Ansari <maaquib@gmail.com>
2015-08-07 20:53:48 -04:00
Veres Lajos 5146232723 typofix - https://github.com/vlajos/misspell_fixer
Signed-off-by: Veres Lajos <vlajos@gmail.com>
2015-08-07 23:25:49 +01:00
David Calavera 1e2765dabb Merge pull request #15109 from kevishi/new-config-reader
Added support for creating a cliconfig.ConfigFile via io.Reader
2015-08-07 14:43:55 -07:00
Arnaud Porterie 4f349cdd4b Merge pull request #14719 from icecrime/14662_update_issue_triage
Update issue triaging process
2015-08-07 14:37:31 -07:00
Ankush Agarwal 89ec5399af Remove note from docker version 1.3 on Env variables
Fixes #14734

Signed-off-by: Ankush Agarwal <ankushagarwal11@gmail.com>
2015-08-07 14:36:06 -07:00
Alexander Morozov 7ac357c795 Merge pull request #15416 from vdemeester/lint-remove-pkgsystemd
Remove pkg/systemd from validate-lint
2015-08-07 14:31:12 -07:00
Arnaud Porterie c7e1f91a9e Update Windows TP3 registry endpoints
Signed-off-by: Arnaud Porterie <arnaud.porterie@docker.com>
2015-08-07 14:03:46 -07:00
Kevin Shi 34679e568a Added support for creating a cliconfig.ConfigFile via io.Reader
Signed-off-by: Kevin Shi <kshi@andrew.cmu.edu>
2015-08-07 14:02:03 -07:00
Vincent Demeester b8559991dc Remove pkg/systemd from validate-lint
Following #15330, pkg/systemd doesn't exists anymore.

Signed-off-by: Vincent Demeester <vincent@sbr.pm>
2015-08-07 22:26:45 +02:00
David Calavera 5110095310 Merge pull request #15014 from brahmaroutu/lint_daemon_graphdriver_overlay
daemon/graphdriver/overlay/ fix lint errors/warnings
2015-08-07 13:06:56 -07:00
David Calavera 0262d40ba7 Merge pull request #15370 from cpuguy83/better_error_on_client_connect
Better/more specific error messages on connect
2015-08-07 13:00:44 -07:00
Mary Anthony 1d5f479e01 Fixes #15349 too many apis
Signed-off-by: Mary Anthony <mary@docker.com>
2015-08-07 11:37:05 -07:00
Srini Brahmaroutu de3944219f daemon/graphdriver/overlay/ fix lint errors/warnings
Addresses #14756
Signed-off-by: Srini Brahmaroutu <srbrahma@us.ibm.com>
2015-08-07 18:34:59 +00:00
David Calavera 0a0e9701f7 Merge pull request #14897 from WeiZhang555/golint-api-types
fix golint warnings/errors on package api/types/
2015-08-07 10:51:27 -07:00
David Calavera b1009d1fdd Merge pull request #14828 from brahmaroutu/lint_graph_tags
/graph/tag fix lint errors/warnings
2015-08-07 10:49:26 -07:00
David Calavera 70cae97ee2 Merge pull request #14811 from devx/refactor-clientRequestAttemptLogin
Cleanup: Factor cmdAttempt out of cli.clientRequestAttemptLogin
2015-08-07 10:47:18 -07:00
Brian Goff 510ecbf371 Merge pull request #15407 from calavera/daemon_supported_flag
Add platformSupported flag to enable daemon mode by platform.
2015-08-07 13:45:10 -04:00
Ankush Agarwal c76fef1791 Make official install instructions use curl instead of wget
YOU GO CURL

Fixes #14650

Signed-off-by: Ankush Agarwal <ankushagarwal11@gmail.com>
2015-08-07 10:16:09 -07:00
David Calavera 10d30c6457 Add platformSupported flag to enable daemon mode by platform.
Signed-off-by: David Calavera <david.calavera@gmail.com>
2015-08-07 09:45:24 -07:00
Doug Davis 38e5764132 Merge pull request #15371 from ankushagarwal/flags
Add test to check if subcommands are sorted
2015-08-07 12:21:00 -04:00
Arnaud Porterie 27fd64c67f Merge pull request #15392 from Microsoft/js/vendor_ansiterm
Update vendored go-ansiterm for Windows console
2015-08-07 09:01:31 -07:00
Arnaud Porterie a8026239fc Merge pull request #15385 from jfrazelle/gpg-passphrase-rpm-sign-fix
Gpg passphrase rpm sign fix
2015-08-07 08:53:51 -07:00
Brian Goff 81c679acae Merge pull request #15405 from duglin/BFlagDoc
Just add some code doc around the use of AddXXX func to avoid any confusion
2015-08-07 11:47:18 -04:00
Doug Davis 592908c0f5 Just add some code doc around the use of AddXXX func to avoid any confusion
Signed-off-by: Doug Davis <dug@us.ibm.com>
2015-08-07 08:07:27 -07:00
Vincent Bernat 56b33e9f27 doc: add a notice about memory accounting overhead
The documentation for Debian and Ubuntu explains how to enable memory
and swap accounting but doesn't explain why it is disabled in the first
place. The problem with those subsystems is that they incurs a
performance hit even when not used at all. Add this explanation.

The provided figure are quite vague. The memory overhead is easily
verifiable. It is for example cited in [RedHat documentation][]. For the
performance hit, maybe the performance is better now, but a few years
ago, it was said to be [between 6 and 15%][].

The goal is that people don't just enable memory accounting if they
don't have a use for it.

[RedHat documentation]: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Resource_Management_Guide/sec-memory.html
[between 6 and 15%]: https://lwn.net/Articles/517562/

Signed-off-by: Vincent Bernat <vincent@bernat.im>
2015-08-07 14:31:33 +02:00
Ankush Agarwal 4d212f7853 Add test to check if subcommands are sorted
Signed-off-by: Ankush Agarwal <ankushagarwal11@gmail.com>
2015-08-07 01:34:21 -07:00
root ecf528fcb6 Update vendored go-ansiterm for Windows console
This update fixes Windows client console bugs and increases VT100
compatibility. With this change, nano and emacs become usable, and bash
works better.

Signed-off-by: John Starks <jostarks@microsoft.com>
2015-08-06 20:48:02 -07:00
David Calavera b9094633f3 Merge pull request #15386 from jfrazelle/remove-docker-unconfined-profile
remove docker-unconfined profile we were not using it
2015-08-06 20:06:33 -07:00
Zhang Wei 3d6617ffe7 fix golint warnings/errors on package api/types/
Signed-off-by: Zhang Wei <zhangwei555@huawei.com>
2015-08-07 09:43:43 +08:00
Aidan Hobson Sayers c016d2defd Remove unnecessary func parameter, add mirror endpoint test
Signed-off-by: Aidan Hobson Sayers <aidanhs@cantab.net>
2015-08-07 02:25:41 +01:00
Stefan Berger 38295d4b48 Have network files mounted read-only when -v parameter has 'ro' passed
Have network files mounted read-only when mounted using the -v
open and -v parameter has 'ro' passed.

Signed-off-by: Stefan Berger <stefanb@us.ibm.com>
Signed-off-by: Brian Goff <cpuguy83@gmail.com>
2015-08-06 20:37:28 -04:00
Sven Dowideit 818190b1ff Merge pull request #15351 from SvenDowideit/remove-hub-v1-documentation
Removing Hub v1 documentation, Hub v2 documentation will come from th…
2015-08-07 10:33:15 +10:00
Arnaud Porterie 04cd81401a Merge pull request #15141 from Microsoft/10662-cp
Windows [TP3] - make docker cp functional
2015-08-06 17:15:09 -07:00
Jessica Frazelle e542238f2a remove docker-unconfined profile we were not using it and it breaks apparmor on wheezy
Signed-off-by: Jessica Frazelle <acidburn@docker.com>
2015-08-06 16:51:01 -07:00
David Calavera 6168a992c7 Merge pull request #15381 from calavera/carry_15275
[Carry 15275] Runtime sysinfo check
2015-08-06 16:48:22 -07:00
Sven Dowideit 9f530aba7f remove unused images
Signed-off-by: Sven Dowideit <SvenDowideit@home.org.au>
2015-08-06 23:34:29 +00:00
Jessica Frazelle 203776a40c fix rpm signing so it does not open a tty w question
Signed-off-by: Jessica Frazelle <acidburn@docker.com>
2015-08-06 16:18:40 -07:00
Sven Dowideit 70092b3ee0 Removing Hub v1 documentation, Hub v2 documentation will come from that repository
Signed-off-by: Sven Dowideit <SvenDowideit@home.org.au>
2015-08-06 23:00:49 +00:00
David Calavera c2bc637a03 Remove pointers from the SysInfo struct.
Because they can just be values.

Signed-off-by: David Calavera <david.calavera@gmail.com>
2015-08-06 15:57:21 -07:00
Antonio Murdaca 4177b0bae0 Add hostConfig check before starting a container
It may happen that host system settings are changed while the daemon is running.
This will cause errors at libcontainer level when starting a container with a
particular hostConfig (e.g. hostConfig with memory swappiness but the memory
cgroup was umounted).
This patch adds an hostConfig check on container start to prevent the daemon
from even calling libcontainer with the wrong configuration as we're already
doing on container's creation).

Signed-off-by: Antonio Murdaca <runcom@linux.com>
(cherry picked from commit 0d2628cdf19783106ae8723f51fae0a7c7f361c6)
2015-08-06 15:46:10 -07:00
Antonio Murdaca b2d06b6fba Move sysinfo out of daemon struct
sysinfo struct was initialized at daemon startup to make sure
kernel configs such as device cgroup are present and error out if not.
The struct was embedded in daemon struct making impossible to detect
if some system config is changed at daemon runtime (i.e. someone
umount the memory cgroup). This leads to container's starts failure if
some config is changed at daemon runtime.
This patch moves sysinfo out of daemon and initilize and check it when
needed (daemon startup, containers creation, contaienrs startup for
now).

Signed-off-by: Antonio Murdaca <runcom@linux.com>
(cherry picked from commit 472b6f66e03f9a85fe8d23098dac6f55a87456d8)
2015-08-06 15:46:09 -07:00
David Calavera 6b341f2b9d Merge pull request #15378 from tiborvass/dont-push-to-mirror
registry: Do not push to mirrors
2015-08-06 15:30:06 -07:00
David Calavera fe6c0e44be Merge pull request #15376 from aboch/ep
Vendoring libnetwork bd3eecc96f3c05a4acef1bedcf74397bc6850d22
2015-08-06 15:14:01 -07:00
Jessica Frazelle aadb3407d3 to not keep old debs for experimental
Signed-off-by: Jessica Frazelle <acidburn@docker.com>
2015-08-06 14:49:05 -07:00
Tibor Vass b899977ee2 registry: Do not push to mirrors
This patch splits LookupEndpoints into LookupPullEndpoints and
LookupPushEndpoints so that mirrors added with --registry-mirror are
skipped in the list returned by LookupPushEndpoints.

Fixes https://github.com/docker/distribution/issues/823

Signed-off-by: Tibor Vass <tibor@docker.com>
2015-08-06 17:41:59 -04:00
David Calavera 9ce0a20c01 Merge pull request #15320 from hqhq/hq_add_cgroup_check
Check sysinfo for Cpuset cpu.shares and blkio
2015-08-06 14:23:37 -07:00
Alessandro Boch e35a5ae463 Vendoring libnetwork bd3eecc96f3c05a4acef1bedcf74397bc6850d22
Signed-off-by: Alessandro Boch <aboch@docker.com>
2015-08-06 14:23:25 -07:00
David Calavera 287e8167f2 Merge pull request #15350 from jfrazelle/revert-apparmor-stuff
revert apparmor changes back to how it was in 1.7.1
2015-08-06 13:57:55 -07:00
Brian Goff 9994a35b5d Better/more specific error messages on connect
Closes #15309

Signed-off-by: Brian Goff <cpuguy83@gmail.com>
2015-08-06 16:41:37 -04:00
Jessica Frazelle ed248207d7 revert apparmor changes back to how it was in 1.7.1, but keep tests
Signed-off-by: Jessica Frazelle <acidburn@docker.com>
2015-08-06 12:49:25 -07:00
Arnaud Porterie 612a1fb4ab Documenting Docker release process
Signed-off-by: Arnaud Porterie <arnaud.porterie@docker.com>
2015-08-06 11:42:27 -07:00
John Howard 2a237615c0 Windows - make docker cp functional
Signed-off-by: John Howard <jhoward@microsoft.com>

Conflicts:
	pkg/archive/copy.go

Make it compile

Signed-off-by: John Howard <jhoward@microsoft.com>
2015-08-06 11:22:38 -07:00
Jessie Frazelle c471b7aba5 Merge pull request #15361 from hqhq/hq_use_docker_daemon
Use docker daemon for intergation test daemon start
2015-08-06 10:40:49 -07:00
David Calavera 33ed76b0f7 Merge pull request #15369 from coolljt0725/adapt_container_settings_after_verify
Adapt container settings after verify platform container settings.
2015-08-06 10:16:54 -07:00
Brian Goff 4640c4abe8 Merge pull request #15240 from vdemeester/cliconfig-test-coverage
Add unit test (coverage) to package cliconfig
2015-08-06 13:16:04 -04:00
Alexander Morozov f6106fc3ce Merge pull request #15330 from runcom/refactor-pkg-systemd
Vendor go-systemd daemon and refactor pkg systemd
2015-08-06 10:02:04 -07:00
Vincent Demeester 73ad1b2674 Add unit test to pkg cliconfig (and thus coverage)
Signed-off-by: Vincent Demeester <vincent@sbr.pm>
2015-08-06 18:02:25 +02:00
Tibor Vass 57c8f4244b Merge pull request #15213 from Microsoft/10662-cliwindowsdaemon
Windows: Test infrastructure plumbing
2015-08-06 11:25:22 -04:00
Antonio Murdaca 931645c460 Remove pkg/systemd
Signed-off-by: Antonio Murdaca <runcom@linux.com>
2015-08-06 14:35:00 +02:00
Antonio Murdaca 61c9f4db41 Vendor coreos/go-systemd/daemon
Signed-off-by: Antonio Murdaca <runcom@linux.com>
2015-08-06 14:34:40 +02:00
Lei Jitang 08b3dc8d9f Adapt container settings after verify platform container settings.
Signed-off-by: Lei Jitang <leijitang@huawei.com>
2015-08-06 19:56:51 +08:00
Rob Vesse f8387f6904 Fix silent failure in RedHat sysvinit script
The docker script in contrib/init/sysvinit-redhat will fail silently on
a start if Docker is not installed in the default /usr/bin/ location.
While a non-zero exit code is returned the user will receive no visible
indication (i.e. error message) as to why Docker was not started.

This commit changes the logic so that in the case that the docker
executable is not found in the expected location or the user does not
have execute permissions on the executable appropriate error messages
are now shown to the user as well as exiting with a non-zero exit code

Signed-off-by: Rob Vesse <rvesse@dotnetrdf.org>
2015-08-06 12:07:38 +01:00
Qiang Huang b8a8ac9b58 Use docker daemon for intergation test daemon start
Signed-off-by: Qiang Huang <h.huangqiang@huawei.com>
2015-08-06 16:20:57 +08:00
Sebastiaan van Stijn ad5355151c Merge pull request #15335 from moxiegirl/boot2docker-remove-refs
Boot2Docker Cleanup
2015-08-06 08:48:57 +02:00
Brian Goff 5b289cd1aa Merge pull request #15313 from Microsoft/10662-fixcertdir
Windows: [TP3] Fix certificate directory for registry
2015-08-05 22:59:51 -04:00
Mary Anthony cc375a1e48 - Remove references to sudo in basics.md; see sudo instructions top of file
- Removing references to Boot2Docker replacing with Docker Machine
- Removing sudo warnings in instances where appropriate (no sudo in file)
- Updating with comments

Signed-off-by: Mary Anthony <mary@docker.com>
2015-08-05 19:45:43 -07:00
Tibor Vass 3273209a9c Merge pull request #15075 from hqhq/hq_move_cpushare_change
Cleanup: Merge adjustCpuShares to adoptContainerSettings
2015-08-05 21:53:58 -04:00
Alexander Morozov 263220fa30 Merge pull request #15354 from coolljt0725/remove_redundant_ip_forward_check
Remove redundant ip_forward check
2015-08-05 18:52:44 -07:00
Alexander Morozov af9dc3050b Merge pull request #15353 from jlhawn/fixing-concurrency-trust
[graph] Use a pipe for downloads to write progress
2015-08-05 18:52:27 -07:00
Antonio Murdaca 6805241fe2 Merge pull request #15352 from icecrime/fix_pause_tests
Use busybox in 'pause' tests
2015-08-06 03:14:44 +02:00
Josh Hawn d80c4244d3 [graph] Use a pipe for downloads to write progress
The process of pulling an image spawns a new goroutine for each layer in the
image manifest. If any of these downloads fail we would stop everything and
return the error, even though other goroutines would still be running and
writing output through a progress reader which is attached to an http response
writer. Since the request handler had already returned from the first error,
the http server panics when one of these download goroutines makes a write to
the response writer buffer.

This patch prevents this crash in the daemon http server by waiting for all of
the download goroutines to complete, even if one of them fails. Only then does
it return, terminating the request handler.

Docker-DCO-1.1-Signed-off-by: Josh Hawn <josh.hawn@docker.com> (github: jlhawn)
2015-08-05 18:13:39 -07:00
Lei 6a0050d0f0 Remove redundant ip_forward check
Signed-off-by: Lei Jitang <leijitang@huawei.com>
2015-08-06 09:06:31 +08:00
Jessie Frazelle efe4f0dfa9 Merge pull request #15119 from xnox/sdnotify
systemd: set service type to notify.
2015-08-05 17:42:58 -07:00
Arnaud Porterie 3529e3dac7 Use busybox in 'pause' tests
Don't assume that any random image will have 'top' and explicitely use
the busybox image for testing.

Signed-off-by: Arnaud Porterie <arnaud.porterie@docker.com>
2015-08-05 17:35:20 -07:00
Qiang Huang e0af23dc18 Cleanup: Merge adjustCPUShares to adoptContainerSettings
Signed-off-by: Qiang Huang <h.huangqiang@huawei.com>
2015-08-06 08:15:14 +08:00
Antonio Murdaca 044c4e00a0 Merge pull request #15334 from Mashimiao/change-name-check-for-image-delete
image_delete: move name check first
2015-08-06 02:07:34 +02:00
Tibor Vass 8534090476 Merge pull request #15252 from coolljt0725/14765_enable_golint_3
Enable golint in pkg/archive
2015-08-05 19:27:48 -04:00
Tibor Vass d93eca2250 Merge pull request #15345 from calavera/fix_ps_format_error
Fail fail when the ps format template is invalid.
2015-08-05 19:19:33 -04:00
Jessie Frazelle a8e67849b9 Merge pull request #15001 from fmoliveira/master
Adding support for elementary OS distro in install script.
2015-08-05 16:14:47 -07:00
John Howard da44d0fccb Windows: Test infrastructure plumbing
Signed-off-by: John Howard <jhoward@microsoft.com>
2015-08-05 14:34:32 -07:00
Sebastiaan van Stijn 565535073f Merge pull request #15346 from Microsoft/minortypo
Minor typo in test-and-docs.md
2015-08-05 22:27:18 +02:00
John Howard 831b00303f Windows: Fix certificate directory for registry
Signed-off-by: John Howard <jhoward@microsoft.com>
2015-08-05 13:25:41 -07:00
John Howard b5eea8f33b Minor typo in test-and-docs.md
Signed-off-by: John Howard <jhoward@microsoft.com>
2015-08-05 13:22:39 -07:00
David Calavera 3d3db0d4af Fail fail when the ps format template is invalid.
Fixes error continuing execution when the parsing fails.

Signed-off-by: David Calavera <david.calavera@gmail.com>
2015-08-05 13:22:24 -07:00
Alexander Morozov aec46ac0b2 Merge pull request #15336 from Microsoft/fixwindowsci
Windows: Fix for CI
2015-08-05 13:11:59 -07:00
John Howard ac120567e8 Windows: Workaround for CI
Signed-off-by: John Howard <jhoward@microsoft.com>
2015-08-05 11:20:30 -07:00
Srini Brahmaroutu d9b261221a /graph/tag fix lint errors/warnings
Addresses #14756
Signed-off-by: Srini Brahmaroutu <srbrahma@us.ibm.com>
2015-08-05 17:46:41 +00:00
Patrick Hemmer 08a867b82f add documentation clarifying behavior of VOLUME instruction
Signed-off-by: Patrick Hemmer <patrick.hemmer@gmail.com>
2015-08-05 12:34:31 -04:00
Ma Shimiao cb2def9f90 image_delete: move name check first
Signed-off-by: Ma Shimiao <mashimiao.fnst@cn.fujitsu.com>
2015-08-06 00:27:45 +08:00
moxiegirl 6206cbe193 Merge pull request #15305 from vdemeester/contribution-docs-updates
Update some contributions documentations
2015-08-05 08:46:53 -07:00
Qiang Huang b7599d58cb Check sysinfo for Cpuset cpu.shares and blkio
Carried: #14015

If kernel is compiled with CONFIG_FAIR_GROUP_SCHED disabled cpu.shares
doesn't exist.
If kernel is compiled with CONFIG_CFQ_GROUP_IOSCHED disabled blkio.weight
doesn't exist.
If kernel is compiled with CONFIG_CPUSETS disabled cpuset won't be
supported.

We need to handle these conditions by checking sysinfo and verifying them.

Signed-off-by: Zefan Li <lizefan@huawei.com>
Signed-off-by: Qiang Huang <h.huangqiang@huawei.com>
2015-08-05 22:35:18 +08:00
Doug Davis a15b676ee1 Merge pull request #15318 from Microsoft/10662-fixmasteragain
Windows: Fix docker/master daemon compile again
2015-08-05 08:32:12 -04:00
Shijiang Wei bb161b7789 move the assertions outside of the goroutine
Signed-off-by: Shijiang Wei <mountkin@gmail.com>
2015-08-05 13:59:31 +08:00
John Howard 67e670b79f Windows: Fix docker/master daemon compile again
Signed-off-by: John Howard <jhoward@microsoft.com>
2015-08-04 19:32:05 -07:00
Arnaud Porterie c9a28b4951 Update issue triaging process
Signed-off-by: Arnaud Porterie <arnaud.porterie@docker.com>
2015-08-04 19:27:25 -07:00
Arnaud Porterie 7374852be9 Merge pull request #14921 from aaronlehmann/int64
Fix uses of "int" where "int64" should be used instead
2015-08-04 19:16:13 -07:00
Arnaud Porterie b985dca578 Merge pull request #15241 from vdemeester/api-test-coverage
Add more unit tests (coverage) to package api
2015-08-04 18:41:35 -07:00
Arnaud Porterie 2c3cd949c8 Merge pull request #15269 from brahmaroutu/lint_daemon_graphdriver_zfs
daemon/graphdriver/zfs fix lint errrors/warnings
2015-08-04 18:41:02 -07:00
Arnaud Porterie 7b077c16d6 Merge pull request #15302 from LK4D4/update_libcontainer
Update runc to v0.0.3
2015-08-04 18:40:32 -07:00
Filipe Oliveira f618de1543 Adding support to forked distributions in installer script.
Signed-off-by: Filipe Oliveira <contato@fmoliveira.com.br>
2015-08-04 21:33:48 -03:00
Youcef YEKHLEF 35aebdc803 Add fedora 22 install docs warning about systemd-network
With systemd in version 219 IP forwarding should be forced in the interface configuration file.

Signed-off-by: yyekhlef <yyekhlef@gmail.com>
2015-08-05 01:33:13 +02:00
Youcef YEKHLEF f224a9f3d6 Add fedora 22 install docs warning about systemd-network
Following @cles commit #6bd15a68c for Arch

Signed-off-by: yyekhlef <yyekhlef@gmail.com>
2015-08-05 01:32:33 +02:00
David Calavera 58121c59ff Merge pull request #15304 from jfrazelle/only-sign-files-changes-within-last-2-hours
only sign the files that were changed in the last 2 hours
2015-08-04 14:16:20 -07:00
Tibor Vass 63940145a4 Merge pull request #15303 from Microsoft/10662-fixdaemonbuild
Windows: Daemon compile was broken
2015-08-04 16:48:11 -04:00
Jessica Frazelle efd47654dd only sign the files that were changed in the last 2 hours
Signed-off-by: Jessica Frazelle <acidburn@docker.com>
2015-08-04 13:16:57 -07:00
Sebastiaan van Stijn d4d3504122 Merge pull request #15301 from jfrazelle/fix-systemd-docs
update systemd article to reference dropin file
2015-08-04 22:12:36 +02:00
Vincent Demeester b304920021 Update some contributions documentations
- Add a golint entry to coding-style.md

Signed-off-by: Vincent Demeester <vincent@sbr.pm>
2015-08-04 22:04:11 +02:00
John Howard fe8cfc5b39 Windows: Daemon compile was broken
Signed-off-by: John Howard <jhoward@microsoft.com>
2015-08-04 12:42:41 -07:00
Antonio Murdaca 23dab01ed2 Merge pull request #14840 from HuKeping/golint-pkg-sysinfo
Fix golint warning on pkg/sysinfo
2015-08-04 20:57:39 +02:00
Srini Brahmaroutu e27c904b99 daemon/graphdriver/zfs fix lint errrors/warnings
Addresses #14756
Signed-off-by: Srini Brahmaroutu <srbrahma@us.ibm.com>
2015-08-04 18:30:55 +00:00
Jessica Frazelle 35e7a7c3e2 update systemd article to reference dropin file
Signed-off-by: Jessica Frazelle <acidburn@docker.com>
2015-08-04 11:03:43 -07:00
Vincent Demeester f7e43d45b3 Add more unit tests (thus coverage) to pkg api
Signed-off-by: Vincent Demeester <vincent@sbr.pm>
2015-08-04 19:51:02 +02:00
Alexander Morozov a4ddf0e362 Update runc to v0.0.3
This fixes criu behavior with mounted cgroups.
It includes also update of go-systemd dependecy.

Signed-off-by: Alexander Morozov <lk4d4@docker.com>
2015-08-04 10:47:59 -07:00
Sebastiaan van Stijn 0f49141150 Merge pull request #15300 from l0rd/test-and-docs-fix
Removed `docs-test` from Makefile rules list
2015-08-04 19:41:48 +02:00
Jessie Frazelle c4b9884ab5 Merge pull request #15260 from albers/completion-config
Add `--config` to bash completion
2015-08-04 10:14:15 -07:00
Arnaud Porterie 2c6fa8375b Merge pull request #15291 from duglin/FixInspectExecId
Another try to fix InspectExecID
2015-08-04 10:13:42 -07:00
Doug Davis fe6a7c8e57 Another try to fix InspectExecID
Signed-off-by: Doug Davis <dug@us.ibm.com>
2015-08-04 09:21:41 -07:00
moxiegirl c5e0ea02f7 Merge pull request #15297 from lerignoux/15296-updating-docs-README-new-md-file
Removing deprecated notice to update mkdocs.yml in docs README
2015-08-04 09:04:21 -07:00
Mario Loriedo 5237670b5b Removed docs-test from Makefile rules list
Signed-off-by: Mario Loriedo <mario.loriedo@gmail.com>
2015-08-04 15:57:42 +00:00
moxiegirl be07c53d2d Merge pull request #15259 from sallyom/manFixes
make man/docker.1.md consistent with docker --help
2015-08-04 08:34:52 -07:00
Laurent Erignoux ac1794d3e2 Removing deprecated notice to update mkdocs.yml in docs README
Signed-off-by: Laurent Erignoux <lerignoux@gmail.com>
2015-08-04 15:15:46 +02:00
Sven Dowideit bc12094251 Merge pull request #15236 from charleswhchan/patch-1
Fix #15212: Add "Label" key to output of /containers/json
2015-08-04 21:48:39 +10:00
Sebastiaan van Stijn c26c1eb8ba Merge pull request #15278 from campoy/14558-break-long-command
Break long command to avoid cropping
2015-08-04 08:27:55 +02:00
Lei Jitang ba332b7d12 Enable golint in pkg/arcive
Signed-off-by: Lei Jitang <leijitang@huawei.com>
2015-08-04 09:52:54 +08:00
Francesc Campoy 16b5b6e49f Break long command to avoid cropping
Fixes docker/docker#14558

Signed-off-by: Francesc Campoy <campoy@google.com>
2015-08-03 18:36:32 -07:00
Charles Chan b245bcd458 Fix #15212: Add "Labels" key to output of /containers/json
Applied retroactively from API v1.18 - v1.21.

Signed-off-by: Charles Chan <charleswhchan@users.noreply.github.com>
2015-08-03 18:11:33 -07:00
Jessie Frazelle dff25c9e46 Merge pull request #15277 from calavera/check_apparmor_docker_contrib
Include apparmor/docker only when it exists.
2015-08-03 17:36:23 -07:00
David Calavera 408cffac94 Include apparmor/docker only when it exists.
Signed-off-by: David Calavera <david.calavera@gmail.com>
2015-08-03 17:34:04 -07:00
David Calavera d7c2fe0f20 Merge pull request #15276 from aboch/24
Fix preallocated bridge networks
2015-08-03 17:21:03 -07:00
David Calavera 85a0f56fe7 Add more amazing women to the names generator.
Signed-off-by: David Calavera <david.calavera@gmail.com>
2015-08-03 17:19:36 -07:00
Alessandro Boch dab0447ae0 Fix preallocated bridge networks
- Because of a bug, all the statically preallocated
  bridge networks have /24 as network mask.

Signed-off-by: Alessandro Boch <aboch@docker.com>
2015-08-03 16:37:01 -07:00
Arnaud Porterie ff3adb135d Merge pull request #15114 from hqhq/hq_exedriver_win_lint
Fix golint warnings for daemon/execdriver/windows
2015-08-03 16:28:47 -07:00
Jessie Frazelle 8d3bc4b98c Merge pull request #15261 from LK4D4/fix_fluentd_vendor
Fix vendoring for fluent-logger-golang
2015-08-03 16:13:05 -07:00
David Calavera 40bd10dc95 Merge pull request #15273 from calavera/remove_new_key_path_on_error
Remove key file when migration fails.
2015-08-03 16:07:22 -07:00
David Calavera dfb63b0425 Merge pull request #15255 from crosbymichael/lxc-dep
Add LXC built in support deprecation notice
2015-08-03 15:36:43 -07:00
David Calavera 07c45e499d Remove key file when migration fails.
Signed-off-by: David Calavera <david.calavera@gmail.com>
2015-08-03 15:29:54 -07:00
Michael Crosby 06f6c0c7e5 Add LXC built in support deprecation notice
Signed-off-by: Michael Crosby <crosbymichael@gmail.com>
2015-08-03 14:54:42 -07:00
David Calavera e84a938f2e Merge pull request #15222 from jlhawn/error_on_v2pull_hash_mismatch
[Re]Enforce manifest/layer digest verification
2015-08-03 13:02:52 -07:00
Sally O'Malley f3bea61c80 make man/docker.1.md consistent with docker --help
"Options:" listed when you run "docker --help" and "docker daemon
--help" do not match the options listed in "man/docker.1.md".  This PR
makes 'docker --help', 'docker daemon --help' and 'man docker' consistent.
Also 2 typo fixes.

Signed-off-by: Sally O'Malley <somalley@redhat.com>
2015-08-03 15:12:33 -04:00
David Calavera 00c1874b8e Merge pull request #15092 from brahmaroutu/lint_daemon_graphdriver_vfs
daemon/graphdriver/vfs fix lint errors/warnings
2015-08-03 11:50:05 -07:00
Josh Hawn de52a3bcaa [graph] Enforce manifest/layer digest verification
We noticed a regression since the 1.7.1 patch after some refactoring. This
patch corrects the behavior and adds integration tests for modified manifest
and rootfs layer blobs.

Docker-DCO-1.1-Signed-off-by: Josh Hawn <josh.hawn@docker.com> (github: jlhawn)
2015-08-03 11:41:23 -07:00
Tibor Vass 102724700b Merge pull request #13698 from cpuguy83/split_api_routes_from_setup
Move api handlers to separate file
2015-08-03 14:03:15 -04:00
Srini Brahmaroutu 3e7f9c636a daemon/graphdriver/vfs fix lint errors/warnings
Addresses #14756
Signed-off-by: Srini Brahmaroutu <srbrahma@us.ibm.com>
2015-08-03 17:46:42 +00:00
Alexander Morozov ef7bb7242f Fix vendoring for fluent-logger-golang
Signed-off-by: Alexander Morozov <lk4d4@docker.com>
2015-08-03 10:23:50 -07:00
Harald Albers b898111d3a Add --config to bash completion
The custom configuration will also be used in docker invocations made
by the completion script itself, just like `-H`.

Signed-off-by: Harald Albers <github@albersweb.de>
2015-08-03 19:03:43 +02:00
Brian Goff b9aaf8c758 Merge pull request #15257 from sallyom/manTypo
Typo fix: man/docker-tag.1.md
2015-08-03 12:53:04 -04:00
Sally O'Malley 70ac38025c Typo fix: man/docker-tag.1.md
Signed-off-by: Sally O'Malley <somalley@redhat.com>
2015-08-03 12:51:10 -04:00
David Calavera 637cf3a4b7 Merge pull request #15233 from srust/add_blockbridge_volume_plugin
Docs: Add Blockbridge volume plugin
2015-08-03 09:46:33 -07:00
David Calavera 137995cb94 Merge pull request #15229 from albers/completion-inspect-filter-by-type
Filter completions of `docker inspect` by `--type`
2015-08-03 09:45:21 -07:00
Arnaud Porterie 67bca8ab8a Merge pull request #15215 from dmcgowan/notary-update
Notary updates
2015-08-03 09:06:09 -07:00
moxiegirl 1367bb41fc Merge pull request #15249 from Evalle/15198-fix-path-to-routing-menu
Fix wrong path to YaST's 'Routing' menu for openSUSE Tumbleweed
2015-08-03 09:04:10 -07:00
moxiegirl cc5cd65e6d Merge pull request #15248 from vdemeester/userguide-fixes
Fix "Getting started" link in userguide
2015-08-03 09:00:18 -07:00
moxiegirl d136f5e027 Merge pull request #15102 from moxiegirl/fix-run-headings
Several fixes in formatting
2015-08-03 08:46:15 -07:00
Mary Anthony 70aa63b92a Several fixes in formatting
- fixing headings in run.md
- creating a table for readability
- adding index for logging
- moving logging overview into logging
- Updating with Seb's comments

Signed-off-by: Mary Anthony <mary@docker.com>
2015-08-03 08:45:25 -07:00
Alexander Morozov 69f3def58d Merge pull request #15225 from runcom/add-restart-always-test-on-daemon-restart
test: daemon restart with containers running with restart always policy manually stopped
2015-08-03 08:40:44 -07:00
Alexander Morozov 3f23ae663b Merge pull request #15244 from hqhq/hq_remove_closeOnce
Remove unused variable
2015-08-03 08:39:43 -07:00
Brian Goff 1a77580030 Split API handlers into domain specific files
Signed-off-by: Brian Goff <cpuguy83@gmail.com>
2015-08-03 11:12:44 -04:00
evalle 5f1593c7b8 Fix wrong path to YaST's 'Routing' menu for openSUSE Tumbleweed
Signed-off-by: evalle <shmarnev@gmail.com>
2015-08-03 12:01:25 +02:00
Vincent Demeester 5d57f56362 Fix "Getting started" link in userguide
Signed-off-by: Vincent Demeester <vincent@sbr.pm>
2015-08-03 11:48:59 +02:00
Brian Goff dce1488ae5 Merge pull request #15013 from coolljt0725/14756_enbale_golint_1
Enable golint, part of #14756
2015-08-02 22:14:18 -04:00
Qiang Huang f9b5eb0cac Fix golint warnings for daemon/execdriver/windows
Addresses: #14756

Signed-off-by: Qiang Huang <h.huangqiang@huawei.com>
2015-08-03 09:54:02 +08:00
Stephen Rust 8b15b7958a Docs: Add Blockbridge volume plugin
Signed-off-by: Stephen Rust <srust@blockbridge.com>
2015-08-02 21:48:46 -04:00
Lei Jitang 27a8f9937e Enable golint part of #14756
pkg/broadcastwriter
pkg/graphdb
pkg/httputils
pkg/ioutils

Signed-off-by: Lei Jitang <leijitang@huawei.com>
2015-08-03 09:45:05 +08:00
Qiang Huang f5557f4f43 Remove unused variable
Introduced by #15209 unintentionally.

Signed-off-by: Qiang Huang <h.huangqiang@huawei.com>
2015-08-03 09:14:52 +08:00
Sebastiaan van Stijn 05529ab584 Merge pull request #15235 from charleswhchan/patch-1
Update docker_remote_api.md
2015-08-02 19:17:22 +02:00
Charles Chan 084d464081 Update docker_remote_api.md
Minor fixes:
* v1.19: GET /containers/(id)/logs - add missing '/'
* v1.18: Break up POST /containers/create and POST /containers/(id)/start into separate lines.

Signed-off-by: Charles Chan <charleswhchan@users.noreply.github.com>
2015-08-02 10:11:18 -07:00
Brian Goff ef24b8e485 Merge pull request #15181 from Microsoft/10662-registermountpoints
Windows: Tidy/godoc volume*.go
2015-08-02 13:04:48 -04:00
Antonio Murdaca af59c80b4a test: daemon restart with containers running with restart always policy
manually stopped

If a container is running with a restart policy of always and it's
manually stopped, then on daemon restart it will be running.

Signed-off-by: Antonio Murdaca <runcom@linux.com>
2015-08-02 11:14:01 +02:00
Tibor Vass bf384a3e4f Merge pull request #15226 from vdemeester/3745-remote-TEST-env-test-from-daemon
Remove daemon check for TEST
2015-08-01 13:10:02 -04:00
moxiegirl 7feb176233 Merge pull request #14539 from nhocki/improve-docs-for-execstart
Adding information about ExecStart configuration for systemd
2015-08-01 09:23:59 -07:00
Alexander Morozov d080d262b3 Merge pull request #15209 from cpuguy83/15199_fix_tailing_more_than_available
Ensure reader position is at the end after tailing
2015-08-01 09:02:44 -07:00
Harald Albers 69cde5a302 Filter completions of docker inspect by --type
Completion now filters the images and containers by given
`--type`.

Signed-off-by: Harald Albers <github@albersweb.de>
2015-08-01 08:36:00 -07:00
Vincent Demeester 9af6b57a5d Remove daemon check for TEST
Closes #3745

I think DEBUG is still used (might be wrong though) and according to
https://github.com/docker/docker/issues/3745#issuecomment-76035979 there
is now nothing in integration (all has been migrated to integration-cli)

Signed-off-by: Vincent Demeester <vincent@sbr.pm>
2015-08-01 15:13:38 +02:00
Brian Goff f9a2b3650b Merge pull request #15220 from maaquib/15217-skip-TestRunCapAddSYSTIME-on-lxc
Skipping test TestRunCapAddSYSTIME on lxc
2015-08-01 09:04:16 -04:00
Brian Goff c57faa91e2 Ensure reader position is at the end after tailing
After tailing a file, if the number of lines requested is > the number
of lines in the file, this would cause a json unmarshalling error to
occur when we later try to go follow the file.
So brute force set it to the end if any tailing occurred.

There is potential that there could be some missing log messages if logs
are being written very quickly, however I was not able to make this
happen even with `while true; do echo hello; done`, so this is probably
acceptable.

While testing this I also found a panic in LogWatcher.Close can be
called twice due to a race. Fix channel close to only close when there
has been no signal to the channel.

Signed-off-by: Brian Goff <cpuguy83@gmail.com>
2015-08-01 08:00:28 -04:00
Hu Keping 7390cc5300 Fix golint warning on pkg/sysinfo
Signed-off-by: Hu Keping <hukeping@huawei.com>
2015-08-01 18:24:49 +08:00
Nicolás Hock Isaza 6b44c05205 Adding information about ExecStart configuration for systemsd
Closes #14491

Signed-off-by: Nicolás Hock Isaza <nhocki@gmail.com>
2015-07-31 21:28:30 -05:00
Mohammed Aaqib Ansari 84c9a6684f skipping test TestRunCapAddSYSTIME on lxc
Signed-off-by: Mohammed Aaqib Ansari <maaquib@gmail.com>
2015-07-31 22:07:40 -04:00
Derek McGowan 6ce76cd9ed Updated to use latest version of notary
Update UX to use aliases for root, snapshot, and target key

Signed-off-by: Derek McGowan <derek@mcgstyle.net> (github: dmcgowan)
2015-07-31 17:32:35 -07:00
Derek McGowan d594c6fcd8 Vendor latest notary
Use updated notary to pick up updates from security review

Signed-off-by: Derek McGowan <derek@mcgstyle.net> (github: dmcgowan)
2015-07-31 17:32:35 -07:00
Aaron Lehmann 1f61084d83 Fix uses of "int" where "int64" should be used instead
Some structures use int for sizes and UNIX timestamps. On some
platforms, int is 32 bits, so this can lead to the year 2038 issues and
overflows when dealing with large containers or layers.

Consistently use int64 to store sizes and UNIX timestamps in
api/types/types.go. Update related to code accordingly (i.e.
strconv.FormatInt instead of strconv.Itoa).

Use int64 in progressreader package to avoid integer overflow when
dealing with large quantities. Update related code accordingly.

Signed-off-by: Aaron Lehmann <aaron.lehmann@docker.com>
2015-07-31 16:31:40 -07:00
David Calavera 8f2dca5386 Merge pull request #15144 from aaronlehmann/graph-cleanup
Documentation improvements and code cleanups for graph package
2015-07-31 15:11:34 -07:00
Sebastiaan van Stijn bb2039c925 Merge pull request #14960 from MHBauer/faq-links
Fix FAQ links
2015-08-01 00:05:53 +02:00
David Calavera 3e0b0c59e6 Merge pull request #15207 from calavera/fix_index_locking
Remove read index that causes dead lock.
2015-07-31 14:55:00 -07:00
Alexander Morozov 6fbacc6edb Merge pull request #15005 from WeiZhang555/stats-block
Docker stats: display Block IO stats
2015-07-31 13:59:55 -07:00
David Calavera 5ed84009b3 Remove read index that causes dead lock.
Let the iterator to lock the index when it needs it.

Signed-off-by: David Calavera <david.calavera@gmail.com>
2015-07-31 13:53:17 -07:00
John Howard 72c04ab87c Tidy volume*.go
Signed-off-by: John Howard <jhoward@microsoft.com>
2015-07-31 13:13:40 -07:00
Tianon Gravi ce99a462f8 Merge pull request #15208 from albers/daemon-completion-fixes
Fixes to bash completion for docker daemon
2015-07-31 11:56:11 -07:00
Harald Albers aab82c5c22 Fix completion of commands after a global option with arg
Without this fix, `docker -l info ` would not complete the commands.

Signed-off-by: Harald Albers <github@albersweb.de>
2015-07-31 20:16:33 +02:00
Harald Albers e0dad9a153 Add completion of global options to docker daemon
It's a bit confusing: the "global options" are valid as "global options"
for all client commands (i.e. all but daemon).
Example: `docker --log-level info run`

For `docker daemon`, these "global options" are only valid as "command
options".
Example: `docker daemon --log-level info`

As command completion cannot tell which command the user is going to
type next, completion for the daemon command has to allow illegal
syntaxes like
`docker --log-level info daemon --log-level info`

Signed-off-by: Harald Albers <github@albersweb.de>
2015-07-31 20:06:45 +02:00
Michael Crosby 0659ceb0d0 Merge pull request #15201 from moul/names-generator-bin
pkg/namesgenerator: add a 'names-generator' binary
2015-07-31 13:09:02 -04:00
David Calavera 9e9f3aa36b Merge pull request #15185 from aboch/vnd_lbn_1.8
Vendoring libnetwork 31139cdb513aea5ad1ed08b60d4350a68b4c96db
2015-07-31 08:58:41 -07:00
Brian Goff 5276655b69 Merge pull request #14463 from sunyuan3/TestRunCapAddSYSTIME
Add TestRunCapAddSYSTIME test case.
2015-07-31 09:40:12 -04:00
Zhang Wei 6a4ac63aaa Docker stats: display Block IO stats
Signed-off-by: Zhang Wei <zhangwei555@huawei.com>
2015-07-31 21:26:32 +08:00
Tibor Vass 1032202b88 Merge pull request #15193 from jfrazelle/fix-lxc
fix lxc test machine
2015-07-31 09:13:52 -04:00
Brian Goff 468bc7d819 Merge pull request #15191 from duglin/TlsTest
Add a test to make sure that --tlsverify=false turns on tls in daemon
2015-07-31 08:54:35 -04:00
Manfred Touron 0800650665 pkg/namesgenerator: add a 'names-generator' binary
Signed-off-by: Manfred Touron <m@42.am>
2015-07-31 13:07:40 +02:00
Yuan Sun a5e2fa2b2e Add TestRunCapAddSYSTIME test case.
Signed-off-by: Yuan Sun <sunyuan3@huawei.com>
2015-07-31 12:53:46 +08:00
Jessica Frazelle f12e18d7ef fix lxc test machine
Signed-off-by: Jessica Frazelle <acidburn@docker.com>
2015-07-30 21:30:47 -07:00
Doug Davis 5ced3ab323 Add a test to make sure that --tlsverify=false turn on tls in daemon
Signed-off-by: Doug Davis <dug@us.ibm.com>
2015-07-30 21:21:24 -07:00
Tibor Vass 500a314713 Merge pull request #15179 from Microsoft/10662-yetmoretodos
Windows: Tidy verifyContainerSettings
2015-07-30 23:58:16 -04:00
Tibor Vass b48d744b07 Merge pull request #15175 from MHBauer/cliconfig-lint
additional lint fix and enable linter for cliconfig package
2015-07-30 23:07:19 -04:00
Tibor Vass ad96fc310b Merge pull request #14970 from tiborvass/windows-registry-endpoint
registry: Change default endpoint on windows to a windows-specific one
2015-07-30 22:41:34 -04:00
Tibor Vass 9a9a12b351 Merge pull request #15123 from ewindisch/seed-pkgrand-cryptorand
Prefer crypto rand seed for pkg/rand
2015-07-30 22:41:17 -04:00
Tibor Vass 8d2739df98 Merge pull request #15146 from kolyshkin/mkdirall
Simplify and fix MkdirAll usage
2015-07-30 22:40:57 -04:00
Tibor Vass 0b089bc7d5 Merge pull request #15186 from brahmaroutu/btrfs_test_failure
fix unit test breakage due to lint changes
2015-07-30 22:39:40 -04:00
Stephen Day e49ab10556 Merge pull request #15190 from tiborvass/bump-distrib
Update distribution to fix uuid.Loggerf initialization logic
2015-07-30 19:19:36 -07:00
Tibor Vass e496d40107 Merge pull request #15189 from jrabbit/fix-restart-policy-link
Docs: Actually link to restart policy information
2015-07-30 21:44:16 -04:00
Tibor Vass 3face3c521 Use default no-op uuid.Loggerf for client cli
Signed-off-by: Tibor Vass <tibor@docker.com>
2015-07-30 21:19:51 -04:00
Tibor Vass 084af30f39 Add missing LICENSE files for docker/notary
Signed-off-by: Tibor Vass <tibor@docker.com>
2015-07-30 21:19:18 -04:00
jrabbit d2cd142ce1 Actually link to the information
Signed-off-by: jrabbit <jackjrabbit@gmail.com>
2015-07-30 21:16:45 -04:00
Tibor Vass 0cce1fb37f Vendor docker/distribution to 7dc8d4a26b689bd4892f2f2322dbce0b7119d686
Signed-off-by: Tibor Vass <tibor@docker.com>
2015-07-30 21:14:39 -04:00
Alessandro Boch 4964ab0821 Add test code to cover issue #14859
Signed-off-by: Alessandro Boch <aboch@docker.com>
2015-07-30 17:37:11 -07:00
Alessandro Boch 91274625ba Vendoring libnetwork 31139cdb513aea5ad1ed08b60d4350a68b4c96db
Signed-off-by: Alessandro Boch <aboch@docker.com>
2015-07-30 17:28:40 -07:00
Srini Brahmaroutu 22873eae31 fix unit test breakage due to lint changes
Addresses #14756

Signed-off-by: Srini Brahmaroutu <srbrahma@us.ibm.com>
2015-07-31 00:22:28 +00:00
David Calavera ffeec2bdd1 Merge pull request #15184 from jfrazelle/fix-install
fix regression
2015-07-30 16:59:13 -07:00
Tibor Vass e2b2c2ae81 Merge pull request #15180 from tiborvass/fix-v1-mirror-fallback
registry: allow fallback on unknown errors
2015-07-30 19:54:48 -04:00
Phil Estes 044b56e94f Merge pull request #15174 from Microsoft/10662-top
Windows: Top (non-)implementation
2015-07-30 19:49:15 -04:00
Jessica Frazelle b0af811272 fix regression
Signed-off-by: Jessica Frazelle <acidburn@docker.com>
2015-07-30 16:38:51 -07:00
Eric Windisch f8f4deb0b2 Merge pull request #15154 from stefanberger/apparmor-engine
contrib: Extend engine apparmor profile for tools needed by devicemapper
2015-07-30 19:22:28 -04:00
Jessie Frazelle 5b65284649 Merge pull request #15103 from Djelibeybi/fix14924
Seperate lsb_dist detection from dist_version detection
2015-07-30 16:21:35 -07:00
Tibor Vass a21ba12f4e registry: allow fallback on unknown errors
This patch fixes a bug where a user specifies a v1 mirror for
--registry-mirror and pull an image from the Hub.

It used to not fallback because of an unexpected error returned when
trying to JSON marshal nginx output.

We now ensure that any unexpected error falls back to the next endpoint
in the list.

Signed-off-by: Tibor Vass <tibor@docker.com>
2015-07-30 19:03:38 -04:00
John Howard 3fea79bfd8 Windows: Address more todos
Signed-off-by: John Howard <jhoward@microsoft.com>
2015-07-30 15:28:11 -07:00
David Calavera c1e2e4d9c6 Merge pull request #15176 from Microsoft/10662-removesometodos
Windows: Remove some TODOs
2015-07-30 15:26:06 -07:00
David Calavera 86a6e4914f Merge pull request #14922 from rhatdan/netlabel
Label /etc/resolv.conf, /etc/hosts ... correctly in shared network co…
2015-07-30 15:03:49 -07:00
John Howard f50b916ca6 Windows: Remove some TODOs
Signed-off-by: John Howard <jhoward@microsoft.com>
2015-07-30 14:46:51 -07:00
Morgan Bauer e809919e26 lint fix and enable linter for cliconfig package
Signed-off-by: Morgan Bauer <mbauer@us.ibm.com>
2015-07-30 14:37:37 -07:00
Tibor Vass 5c9e5bfb0f Merge pull request #15106 from jgkamat/links
Fix a couple broken links
2015-07-30 17:28:11 -04:00
Aaron Lehmann d4836cd7ec Documentation improvements and code cleanups for graph package
Expand the godoc documentation for the graph package.

Centralize DefaultTag in the graphs/tag package instead of defining it
twice.

Remove some unnecessary "config" structs that are only used to pass
a few parameters to a function.

Simplify the GetParentsSize function - there's no reason for it to take
an accumulator argument.

Unexport some functions that aren't needed outside the package.

Signed-off-by: Aaron Lehmann <aaron.lehmann@docker.com>
2015-07-30 14:27:10 -07:00
John Howard 0a9ec21818 Windows: Top (non-)implementation
Signed-off-by: John Howard <jhoward@microsoft.com>
2015-07-30 14:25:15 -07:00
Tibor Vass 41d9270a40 Merge pull request #15170 from runcom/i-like-cleaning
Remove HostConfig,SetHostConfig from daemon.container
2015-07-30 17:23:58 -04:00
Alexander Morozov 8505183252 Merge pull request #14950 from ottok/master
Multiple fixes to 'docker stats' output
2015-07-30 14:02:35 -07:00
David Calavera 030f61df3d Merge pull request #14885 from jlhawn/fix_cp_symlink
Fix copying of symlinks in containers
2015-07-30 13:42:40 -07:00
Alexander Morozov 9431acbc0a Merge pull request #15169 from Microsoft/10662-tidydiff
Tidy platform common bits in diff
2015-07-30 13:42:27 -07:00
Antonio Murdaca f95333010e Remove HostConfig,SetHostConfig from daemon.container
Signed-off-by: Antonio Murdaca <runcom@linux.com>
2015-07-30 22:25:31 +02:00
John Howard 5ab9654bc4 Tidy platform common bits in diff
Signed-off-by: John Howard <jhoward@microsoft.com>
2015-07-30 13:04:49 -07:00
Tibor Vass 2f1a7c903f Merge pull request #14844 from WeiZhang555/golint-api
fix golint errors/warnings of pkg api/
2015-07-30 16:02:06 -04:00
Alexander Morozov 75c082c4b2 Merge pull request #15168 from Microsoft/10662-daemonconfiglocation
Windows: [TP3] Move daemon config directory
2015-07-30 12:56:52 -07:00
Tibor Vass 2d730c93b4 Merge pull request #15148 from hqhq/hq_golint_native
Add back golint for daemon/execdriver/native
2015-07-30 15:51:06 -04:00
John Howard 9ed4400baf Windows: Move daemon config directory
Signed-off-by: John Howard <jhoward@microsoft.com>
2015-07-30 12:39:19 -07:00
Josh Hawn 75f6929b44 Fix docker cp Behavior With Symlinks
[pkg/archive] Update archive/copy path handling

  - Remove unused TarOptions.Name field.
  - Add new TarOptions.RebaseNames field.
  - Update some of the logic around path dir/base splitting.
  - Update some of the logic behind archive entry name rebasing.

[api/types] Add LinkTarget field to PathStat

[daemon] Fix stat, archive, extract of symlinks

  These operations *should* resolve symlinks that are in the path but if the
  resource itself is a symlink then it *should not* be resolved. This patch
  puts this logic into a common function `resolvePath` which resolves symlinks
  of the path's dir in scope of the container rootfs but does not resolve the
  final element of the path. Now archive, extract, and stat operations will
  return symlinks if the path is indeed a symlink.

[api/client] Update cp path hanling

[docs/reference/api] Update description of stat

  Add the linkTarget field to the header of the archive endpoint.
  Remove path field.

[integration-cli] Fix/Add cp symlink test cases

  Copying a symlink should do just that: copy the symlink NOT
  copy the target of the symlink. Also, the resulting file from
  the copy should have the name of the symlink NOT the name of
  the target file.

  Copying to a symlink should copy to the symlink target and not
  modify the symlink itself.

Docker-DCO-1.1-Signed-off-by: Josh Hawn <josh.hawn@docker.com> (github: jlhawn)
2015-07-30 12:14:28 -07:00
Tibor Vass a687448c4d Merge pull request #15163 from crosbymichael/proc-ro
Don't mount /proc as ro
2015-07-30 15:12:29 -04:00
Tibor Vass 5fa26e3df8 Merge pull request #15161 from ewindisch/fix-netns
Only explicitly deny ptrace for container-originated procs
2015-07-30 15:11:12 -04:00
Brian Goff b149d9d0d9 Merge pull request #15156 from duglin/AddErrTruncIndex
Add missing typed error in truncindex
2015-07-30 14:55:40 -04:00
Tibor Vass 4a92b8a0ef registry: Change default endpoint on windows to a windows-specific one
Signed-off-by: Tibor Vass <tibor@docker.com>
2015-07-30 14:52:41 -04:00
Tibor Vass 06668de15e Merge pull request #15167 from tiborvass/better-tlsconf-error-msg
tlsconfig: better format for error message in tlsconfig
2015-07-30 14:51:35 -04:00
Kir Kolyshkin a83a769347 Simplify and fix os.MkdirAll() usage
TL;DR: check for IsExist(err) after a failed MkdirAll() is both
redundant and wrong -- so two reasons to remove it.

Quoting MkdirAll documentation:

> MkdirAll creates a directory named path, along with any necessary
> parents, and returns nil, or else returns an error. If path
> is already a directory, MkdirAll does nothing and returns nil.

This means two things:

1. If a directory to be created already exists, no error is returned.

2. If the error returned is IsExist (EEXIST), it means there exists
a non-directory with the same name as MkdirAll need to use for
directory. Example: we want to MkdirAll("a/b"), but file "a"
(or "a/b") already exists, so MkdirAll fails.

The above is a theory, based on quoted documentation and my UNIX
knowledge.

3. In practice, though, current MkdirAll implementation [1] returns
ENOTDIR in most of cases described in #2, with the exception when
there is a race between MkdirAll and someone else creating the
last component of MkdirAll argument as a file. In this very case
MkdirAll() will indeed return EEXIST.

Because of #1, IsExist check after MkdirAll is not needed.

Because of #2 and #3, ignoring IsExist error is just plain wrong,
as directory we require is not created. It's cleaner to report
the error now.

Note this error is all over the tree, I guess due to copy-paste,
or trying to follow the same usage pattern as for Mkdir(),
or some not quite correct examples on the Internet.

[v2: a separate aufs commit is merged into this one]

[1] https://github.com/golang/go/blob/f9ed2f75/src/os/path.go

Signed-off-by: Kir Kolyshkin <kir@openvz.org>
2015-07-30 11:48:08 -07:00
Morgan Bauer 3754ad5737 Fix FAQ links
- don't use relative references '..'
 - registry-index-spec became hub-registry-spec
 - reference new 'glossary' instead of old 'terms'

Signed-off-by: Morgan Bauer <mbauer@us.ibm.com>
2015-07-30 11:46:39 -07:00
Eric Windisch f5c388b35a Only explicitly deny ptrace for container-originated procs
The 'deny ptrace' statement was supposed to only ignore
ptrace failures in the AUDIT log. However, ptrace was implicitly
allowed from unconfined processes (such as the docker daemon and
its integration tests) due to the abstractions/base include.

This rule narrows the definition such that it will only ignore
the failures originating inside of the container and will not
cause denials when the daemon or its tests ptrace inside processes.

Introduces positive and negative tests for ptrace /w apparmor.

Signed-off-by: Eric Windisch <eric@windisch.us>
2015-07-30 14:40:28 -04:00
David Calavera 868f85b271 Merge pull request #15166 from tiborvass/carry-13934
Carry 13934: Add `docker daemon` to bash completion
2015-07-30 11:30:31 -07:00
Tibor Vass c7a04fda2a tlsconfig: better format for error message in tlsconfig
Signed-off-by: Tibor Vass <tibor@docker.com>
2015-07-30 14:15:41 -04:00
Harald Albers 8cc8ee9254 Add docker daemon to bash completion
Signed-off-by: Harald Albers <github@albersweb.de>
Signed-off-by: Tibor Vass <tibor@docker.com>
2015-07-30 14:08:55 -04:00
Michael Crosby bfc51cf660 Don't mount /proc as ro
This caused a regression with LSM labeling.

Signed-off-by: Michael Crosby <crosbymichael@gmail.com>
2015-07-30 10:57:50 -07:00
Tibor Vass bfccd328be Merge pull request #15100 from calavera/fix_reader_timeout
Fix reset timeout for buffer readers.
2015-07-30 13:18:06 -04:00
Doug Davis 18b1381335 Add missing typed error in truncindex
Signed-off-by: Doug Davis <dug@us.ibm.com>
2015-07-30 07:52:34 -07:00
Stefan Berger 9dbc36b441 contrib: Extend engine apparmor profile for tools needed by devicemapper
Add tools to the apparmor profile that are needed when -s devicemapper is
in the docker daemon's command line.

Signed-off-by: Stefan Berger <stefanb@us.ibm.com>
2015-07-30 06:45:57 -04:00
Otto Kekäläinen b619220ce1 Multiple fixes to 'docker stats' output:
* Add space between values in docker stats output for easier parsing

  Old output could not be parsed easily because there were columns
  that did not have any separator. Also values that are together
  without any space is difficult to read even for humans.

* Update unit.HumanSize comment to match what the does actually does

Signed-off-by: Otto Kekäläinen <otto@seravo.fi>
2015-07-30 10:14:57 +03:00
Arnaud Porterie f39987afe8 Merge pull request #15149 from Microsoft/10662-fixwindowscompile
[Blocking] Windows: Daemon build is currently broken
2015-07-29 22:46:11 -07:00
Sven Dowideit 26ff3bd2e9 Merge pull request #15066 from dwcramer/fix-broken-link
[#15027] Fix broken link and edit link text to match section heads
2015-07-30 13:37:29 +10:00
Sven Dowideit cc45e027f1 Merge pull request #15071 from epc/epc-2015209
Docs: Copy edits for typos
2015-07-30 13:36:23 +10:00
John Howard b43dc0d93c Windows: Daemon build is broken
Signed-off-by: John Howard <jhoward@microsoft.com>
2015-07-29 20:08:51 -07:00
root cfeab585c0 fix golint errors/warnings of pkg api/
Signed-off-by: Zhang Wei <zhangwei555@huawei.com>
2015-07-30 09:46:25 +08:00
Qiang Huang e34f562a77 Add back golint for daemon/execdriver/native
It's broken by #15099 Fix it.

Signed-off-by: Qiang Huang <h.huangqiang@huawei.com>
2015-07-30 08:58:54 +08:00
Arnaud Porterie 4c7cf30260 Merge pull request #15126 from LK4D4/global_rand
Use global random *rand.Rand instance in pkg
2015-07-29 17:36:25 -07:00
Arnaud Porterie b71cf69380 Merge pull request #15132 from LK4D4/improve_test
Fix message and add additional check to test
2015-07-29 17:36:11 -07:00
Tibor Vass 6adb64e113 Merge pull request #14773 from runcom/cleanup-links
Cleanup links top level pkg
2015-07-29 20:17:44 -04:00
Arnaud Porterie d94aeb2876 Merge pull request #14980 from jlhawn/build_tag_resolved_digests
[api/client] Tag resolved digest from Dockerfile
2015-07-29 16:52:14 -07:00
Michael Crosby 887882c2b6 Merge pull request #15142 from calavera/add_field_comment_back
Add MemorySwappiness comment back.
2015-07-29 16:51:49 -07:00
Arnaud Porterie 8724e8953d Merge pull request #15040 from vbatts/vbatts-double-decompress-fix
archive, graphdriver: double decompress fix
2015-07-29 16:48:02 -07:00
Arnaud Porterie 4a71323ec3 Merge pull request #15098 from calavera/backwards_compat_kill_error
Keep backwards compatibility in kill api.
2015-07-29 16:42:36 -07:00
Arnaud Porterie 3f5ea1bb80 Merge pull request #15090 from dmcgowan/fix-login-tls-config
Fix login and search TLS configuration
2015-07-29 16:42:13 -07:00
David Calavera f41f62b6cc Add MemorySwappiness comment back.
Signed-off-by: David Calavera <david.calavera@gmail.com>
2015-07-29 16:41:46 -07:00
Arnaud Porterie de50082000 Merge pull request #15134 from calavera/swappiness_big_int
Use pointer for MemorySwappiness.
2015-07-29 16:31:15 -07:00
Jessie Frazelle 2ae174e491 Merge pull request #15138 from ewindisch/apparmor-fix-test-plus-unconfined
Fix the proc integration test & include missing AA profile
2015-07-29 15:32:13 -07:00
Tibor Vass 28ac78c02f Merge pull request #15139 from tiborvass/fix-uuid-loggerf
Set uuid.Loggerf to nop on client and to logrus.Warnf on daemon
2015-07-29 18:17:54 -04:00
Jessie Frazelle 75f8bdd970 Merge pull request #13542 from kvasdopil/freebsd-work
Make docker build on FreeBSD
2015-07-29 15:15:37 -07:00
Tibor Vass 6a274e48dc Merge pull request #14843 from MHBauer/demonlogger-lint
golint fixes for daemon/logger/*
2015-07-29 18:09:46 -04:00
Tibor Vass 28b79e4a84 Merge pull request #14827 from brahmaroutu/lint_graph
/graph fix lint errors/warnings
2015-07-29 18:08:09 -04:00
Tibor Vass 7841d6ab9a Set uuid.Loggerf to nop on client and to logrus.Warnf on daemon
Signed-off-by: Tibor Vass <tibor@docker.com>
2015-07-29 17:49:59 -04:00
Eric Windisch 0f4e5f7149 Remove container AA profile from packaging
Signed-off-by: Eric Windisch <eric@windisch.us>
2015-07-29 17:47:38 -04:00
Antonio Murdaca 0e0c7e521c Cleanup links top level pkg
- Move top level pkg links under daemon
- Refactor code accordingly
- golint pkg

Signed-off-by: Antonio Murdaca <runcom@linux.com>
2015-07-29 23:39:18 +02:00
Avi Miller 5c6446f335 Fix for #14924. Seperates lsb_dist detection from dist_version detection
so that the latter can be distro specific.

Signed-off-by: Avi Miller <avi.miller@oracle.com>
2015-07-30 07:30:51 +10:00
David Calavera 4e25d2982b Use *int64 for MemorySwappiness.
So we marshal/unmarshal its value properly when it's empty.

Signed-off-by: David Calavera <david.calavera@gmail.com>
2015-07-29 14:14:04 -07:00
Eric Windisch 5832715052 Fix the proc integration test & include missing AA profile
Integration tests were failing due to proc filter behavior
changes with new apparmor policies.

Also include the missing docker-unconfined policy resolving
potential startup errors. This policy is complain-only so
it should behave identically to the standard unconfined policy,
but will not apply system path-based policies within containers.

Signed-off-by: Eric Windisch <eric@windisch.us>
2015-07-29 17:08:51 -04:00
Srini Brahmaroutu 1d6e443119 /graph fix lin errors/warnings
Addresses #14756
Signed-off-by: Srini Brahmaroutu <srbrahma@us.ibm.com>
2015-07-29 20:59:36 +00:00
Morgan Bauer ccbe539e86 golint fixes for daemon/logger/*
- downcase and privatize exported variables that were unused
 - make accurate an error message
 - added package comments
 - remove unused var ReadLogsNotSupported
 - enable linter
 - some spelling corrections

Signed-off-by: Morgan Bauer <mbauer@us.ibm.com>
2015-07-29 13:09:39 -07:00
Alexander Morozov 0f85fadb4e Merge pull request #15133 from dmcgowan/notary-fix-test-date
Skip notary tests which update system clock
2015-07-29 12:51:05 -07:00
Derek McGowan bf3c1e6a3a Skip notary tests which update system clock
Currently some notary tests change the system clock to check for expiration.
Skip these tests until the code can be refactored to not rely on updating the system clock.

Signed-off-by: Derek McGowan <derek@mcgstyle.net> (github: dmcgowan)
2015-07-29 12:09:40 -07:00
Tibor Vass 0bab97fcba Merge pull request #15076 from hqhq/hq_merge_daemon_test
Merge daemon_unit_test.go to daemon_test.go
2015-07-29 14:53:34 -04:00
Tibor Vass c09c497c71 Merge pull request #15111 from Microsoft/fix-archive-copy-log
Fix log to logrus
2015-07-29 14:48:19 -04:00
Alexander Morozov 0d09439ace Fix message and add additional check to TestBuildContainerWithCgroupParent
Signed-off-by: Alexander Morozov <lk4d4@docker.com>
2015-07-29 11:46:33 -07:00
Tibor Vass 2a593bea12 Merge pull request #15116 from ibuildthecloud/devices
Revert change to make ParseDevice unexported
2015-07-29 14:42:30 -04:00
Alexey Guskov 26c03d561a make docker compile on freebsd
Signed-off-by: Alexey Guskov <lexag@mail.ru>
2015-07-29 21:25:56 +03:00
Tibor Vass 0a2ec227f8 Merge pull request #15128 from ankushagarwal/logging
Doc fixes in daemon/logger, update NewCopier method
2015-07-29 14:20:34 -04:00
Tibor Vass e77ea5aa7a Merge pull request #14784 from brahmaroutu/lint_api_client
fix golint errors/warnings
2015-07-29 14:04:45 -04:00
David Calavera 1cfae07a6e Merge pull request #15015 from runcom/14911-fix-install-script-debian81
Fix install script to handle debian 8.1 apt repo string
2015-07-29 10:45:50 -07:00
Tibor Vass dfcdde4d98 Merge pull request #14930 from brahmaroutu/lint_daemon_graphdriver_devmapper
daemon/graphdriver/devmapper/ fix lint errors/warnings
2015-07-29 13:29:57 -04:00
root 929f2c2f40 api/client fix golint errors/warnings
Addresses #14756

Signed-off-by: Srini Brahmaroutu <srbrahma@us.ibm.com>
2015-07-29 17:20:54 +00:00
Tibor Vass 2cd058ce4f Merge pull request #14785 from brahmaroutu/lint_api_server
fix golint errors/warnings
2015-07-29 13:09:31 -04:00
David Calavera 8a8de53d3d Merge pull request #15129 from jfrazelle/golint
fix linnt
2015-07-29 10:07:25 -07:00
Ankush Agarwal 41d85c014d Doc fixes in logger, update NewCopier method
Signed-off-by: Ankush Agarwal <ankushagarwal11@gmail.com>
2015-07-29 10:05:46 -07:00
Jessica Frazelle c2c9e99d84 fix linnt
Signed-off-by: Jessica Frazelle <acidburn@docker.com>
2015-07-29 10:05:30 -07:00
John Howard 2bf73c4b1a Fix log to logrus
Signed-off-by: John Howard <jhoward@microsoft.com>
2015-07-29 09:58:07 -07:00
Eric Windisch 4742a3964f Prefer crypto rand seed for pkg/rand
Crypto rand is a much better seed for math/rand than
time. In the event we use math/rand where we should not,
this will make it a safer source of random numbers.

Although potentially dangerous, this will still fallback
to time should crypto/rand for any reason fail.

Signed-off-by: Eric Windisch <eric@windisch.us>
2015-07-29 12:55:57 -04:00
Dan Walsh 90b8cebda6 Labels on network content need to be shared if shared network namespace
If I run two containers with the same network they share the same /etc/resolv.conf.
The current code changes the labels of the /etc/resolv.conf currently to the
private label which causes it to be unusable in the first container.

This patch changes the labels to a shared label if more then one container
will use the content.

Docker-DCO-1.1-Signed-off-by: Dan Walsh dwalsh@redhat.com (github: rhatdan)

Docker-DCO-1.1-Signed-off-by: Dan Walsh <dwalsh@redhat.com> (github: rhatdan)
2015-07-29 12:42:28 -04:00
Jessie Frazelle d7661cb48b Merge pull request #15099 from ewindisch/apparmor-restore-en
Restore AppArmor generation + fixes
2015-07-29 09:36:59 -07:00
Alexander Morozov 51cdcf3c9d Use global random *rand.Rand instance in pkg
Signed-off-by: Alexander Morozov <lk4d4@docker.com>
2015-07-29 09:30:48 -07:00
Tibor Vass 9d3ad6d892 Merge pull request #15107 from LK4D4/unsafe_random
Use non-crypto version of random to generate ids.
2015-07-29 11:47:38 -04:00
Tibor Vass 0c330a7823 Merge pull request #15064 from jfrazelle/14590-fix-sudo
sh -c the cat repo for yum
2015-07-29 10:02:27 -04:00
Dimitri John Ledkov d3e5179c29 systemd: set service type to notify.
Currently the service type is 'simple', the default, meaning that
docker.service is considered to be started straight after
spawning. This is incorrect as there is significant amount of time
between spawning and docker ready to accept connections on the passed
sockets. Docker does implement systemd socket activate and
notification protocol, and send the ready signal to systemd, once it
is ready. However for systemd to take those notifications into
account, the service file type should be set to notify.

Signed-off-by: Dimitri John Ledkov <dimitri.j.ledkov@intel.com>
2015-07-29 14:02:12 +01:00
Sebastiaan van Stijn 60ed0a7f77 Merge pull request #15117 from ChanderG/master
Fix minor formatting error in security article docs
2015-07-29 13:41:19 +02:00
Chander G 6cf0e27ee0 Fix minor formatting error in security article docs
Signed-off-by: Chander G <chandergovind@gmail.com>
2015-07-30 01:06:04 +05:30
Darren Shepherd 421786e925 Make ParseDevice public
This reverts the change in 5170a2c096 that made ParseDevice private

Signed-off-by: Darren Shepherd <darren@rancher.com>
2015-07-29 02:12:35 -07:00
Alexander Morozov 6bca8ec3c9 Replace GenerateRandomID with GenerateNonCryptoID
This allow us to avoid entropy usage in non-crypto critical places.

Signed-off-by: Alexander Morozov <lk4d4@docker.com>
2015-07-28 22:31:01 -07:00
Alexander Morozov 4553b6af4b Add GenerateNonCryptoID function to avoid entropy exhaustion
Signed-off-by: Alexander Morozov <lk4d4@docker.com>
2015-07-28 22:31:01 -07:00
Alexander Morozov 6963b9c716 Add global instance of *(math/rand).Rand and Reader
You can read random bytes from Reader without exhausting entropy.

Signed-off-by: Alexander Morozov <lk4d4@docker.com>
2015-07-28 22:30:57 -07:00
Jessica Frazelle 93d134c61f sh -c the cat repo for yum
Signed-off-by: Jessica Frazelle <princess@docker.com>
2015-07-28 20:25:26 -07:00
Srini Brahmaroutu 972a94b449 daemon/graphdriver/devmapper/ fix lint errors/warnings
Addresses #14756
Signed-off-by: Srini Brahmaroutu <srbrahma@us.ibm.com>
2015-07-29 01:43:34 +00:00
Tibor Vass c19a00d4cb Merge pull request #15060 from jlhawn/fix_build_renamed_dockerfile
[api/client] update check Dockerfile in Context
2015-07-28 21:30:19 -04:00
moxiegirl ed1d9d022d Merge pull request #14565 from moxiegirl/14561-mac-rewrite
Docker Toolbox Updates fixes #14561
2015-07-28 18:20:26 -07:00
Mary Anthony 6ca22add18 Docker Toolbox Updates fixes #14561
- Tested Mac/iterated with Jeff on fixes
- Waiting on formal uninstall;manual now
- 4 hour work
- Fixe #14562 converting Windows to Mac
- Found errors in installer need fixes/another iteration
- Updated as far as possible with limited installation
- 3 Hours work
- Entering comments from PR review
- New screen captures and migration material
- Entering Sven's comment
- Testing with powershell, Seb's comments
- Fix link in upgrade
- Minor tweaks to http and typos
- Adding deprecation note

Signed-off-by: Mary Anthony <mary@docker.com>
2015-07-28 18:17:24 -07:00
Josh Hawn bb2e6c72d2 [api/client] Tag resolved digest from Dockerfile
Builds where the base images have been resolved to trusted digest
references will now be tagged with the original tag reference from
the Dockerfile on a successful build.

Docker-DCO-1.1-Signed-off-by: Josh Hawn <josh.hawn@docker.com> (github: jlhawn)
2015-07-28 17:54:48 -07:00
Tibor Vass cc6138d946 Merge pull request #15063 from jfrazelle/only-write-distributions-file-if-dne
only write distributions file if dne
2015-07-28 20:45:04 -04:00
Jay Kamat 4ca0aad855 Fix a couple broken links
Signed-off-by: Jay Kamat <github@jgkamat.33mail.com>
2015-07-28 16:37:52 -07:00
root 351f6b8ec0 api/server fix golint errors/warnings.
Addresses #14756
Signed-off-by: Srini Brahmaroutu <srbrahma@us.ibm.com>
2015-07-28 22:44:39 +00:00
Eric Windisch 6c887be769 Mark engine AA policy as complain-only
The engine policy will now only complain
as a temporary measure to ensure we do not
cause breakages while users exercise this
policy.

This is NOT the policy for containers, but
for the newly-introduced policy for the
daemon itself.

Signed-off-by: Eric Windisch <eric@windisch.us>
2015-07-28 17:45:53 -04:00
Eric Windisch 8b2fcddcd2 AA: Eliminate 'file' permission
Implements the policies for the remaining binaries
called by the Docker engine and eliminates the
giant whitelisted 'all files' permission in favor
of granular whitelisting and child-specific policies.

It should be possible now to remove the 'file' permission,
but for the sake of keeping Docker unbroken, we'll try
to gradually tighten the policy.

Signed-off-by: Eric Windisch <eric@windisch.us>
2015-07-28 17:45:53 -04:00
Eric Windisch 3edc88f76d Restore AppArmor profile generation
Will attempt to load profiles automatically. If loading fails
but the profiles are already loaded, execution will continue.

A hard failure will only occur if Docker cannot load
the profiles *and* they have not already been loaded via
some other means.

Also introduces documentation for AppArmor.

Signed-off-by: Eric Windisch <eric@windisch.us>
2015-07-28 17:45:51 -04:00
David Calavera 40ea67a596 Fix reset timeout for buffer readers.
Use our goroutine-safe random source.

Signed-off-by: David Calavera <david.calavera@gmail.com>
2015-07-28 14:30:18 -07:00
Alexander Morozov f809037128 Merge pull request #14848 from hqhq/hq_golint_execdriver
Fix golint warnings for daemon/execdriver/*
2015-07-28 14:23:22 -07:00
Alexander Morozov 2c162292b7 Merge pull request #14824 from fcantournet/lint_pkg_mflag
Fix golint for pkg/mflag
2015-07-28 13:51:09 -07:00
Alexander Morozov 9cfc223cc0 Merge pull request #14818 from MHBauer/volume-lint
lint for volume/*
2015-07-28 13:42:18 -07:00
Vincent Batts 273f50c741 graphdriver/*: expect uncompressed tar for ApplyDiff
The `ApplyDiff` function takes a tar archive stream that is
automagically decompressed later. This was causing a double
decompression, and when the layer was empty, that causes an early EOF.

Signed-off-by: Vincent Batts <vbatts@redhat.com>
2015-07-28 16:36:39 -04:00
Vincent Batts 56bf275e32 archive, chrootarchive: split out decompression
In `ApplyLayer` and `Untar`, the stream is magically decompressed. Since
this is not able to be toggled, rather than break this ./pkg/ API, add
an `ApplyUncompressedLayer` and `UntarUncompressed` that does not
magically decompress the layer stream.

Signed-off-by: Vincent Batts <vbatts@redhat.com>
2015-07-28 16:36:38 -04:00
Sebastiaan van Stijn bfbac726c7 Merge pull request #15082 from ChanderG/master
Add link to Systemd article in Debian Jessie docs, fix typo
2015-07-28 22:35:48 +02:00
Chander G b9e6be25d1 Add link to Systemd article, fix typo
Signed-off-by: Chander G <chandergovind@gmail.com>
2015-07-29 01:54:44 +05:30
David Calavera 621e3d8587 Keep backwards compatibility in kill api.
Return an error when the container is stopped only in api versions
equal or greater than 1.20 (docker 1.8).

Signed-off-by: David Calavera <david.calavera@gmail.com>
2015-07-28 12:25:36 -07:00
Jessie Frazelle e06df594f5 Merge pull request #14863 from brahmaroutu/lint_daemon_graphdriver_aufs
daemon/graphdriver/aufs fix lint errors/warnings
2015-07-28 11:46:40 -07:00
Jessie Frazelle be60047b43 Merge pull request #14932 from brahmaroutu/lint_daemon_graphdriver_graphtest
daemon/graphdriver/graphtest/ fix lint errors/warnings
2015-07-28 11:20:33 -07:00
Sebastiaan van Stijn f989d68014 Merge pull request #15096 from kolyshkin/doc-fixes-2
daemon.md: do fix placement of exec driver heading
2015-07-28 20:10:11 +02:00
Kir Kolyshkin f52514a038 daemon.md: do fix placement of exec driver heading
Options for zfs storage driver were incorrectly placed
under 'exec driver options' header. Move the header to
the correct place.

Now, this is the second time I am fixing this. First time
it was commit 68efb27, but the following commit 9af7afb
screwed it up again, so the header appears twice now.

Get rid of the the wrong one.

Cc: David Calavera <david.calavera@gmail.com>
Signed-off-by: Kir Kolyshkin <kir@openvz.org>
2015-07-28 10:58:17 -07:00
Morgan Bauer 9af963aba0 lint fixes for volume/*
- comments on exported values
 - constant string replaced by constant reference
 - unexport implementation details of VolumeDriver 'local'
 - add fixed packages to linter list

Signed-off-by: Morgan Bauer <mbauer@us.ibm.com>
2015-07-28 10:40:44 -07:00
Derek McGowan e863a07b89 Fix login and search TLS configuration
Currently login and search do not load per registry certificates.
This is a regression caused by the last refactor since this was recently fixed.

Signed-off-by: Derek McGowan <derek@mcgstyle.net> (github: dmcgowan)
2015-07-28 10:36:57 -07:00
David Calavera c473ae14fd Merge pull request #15094 from Microsoft/10662-fixvendorhelper
Windows: Fix vendor-helpers.sh
2015-07-28 10:17:30 -07:00
John Howard 663d50464e Windows: Fix vendor-helpers.sh
Signed-off-by: John Howard <jhoward@microsoft.com>
2015-07-28 10:13:33 -07:00
Félix Cantournet 8e6ad2171a Fix golint for pkg/mflag
Signed-off-by: Félix Cantournet <felix.cantournet@cloudwatt.com>
2015-07-28 15:32:42 +02:00
moxiegirl 3a7b4230b2 Merge pull request #14713 from moxiegirl/remove-boot2docker-14563
Remove references to boot2docker replace with docker-machine
2015-07-28 06:05:29 -07:00
Ed Costello fb396a71d5 Copy edits for typos
Signed-off-by: Ed Costello <epc@epcostello.com>
2015-07-28 08:51:01 -04:00
Qiang Huang ada852aa70 Merge daemon_unit_test.go to daemon_test.go
daemon_test.go supposted to be unit test for daemon, so
don't see reason why we need another daemon_unit_test.go.

Signed-off-by: Qiang Huang <h.huangqiang@huawei.com>
2015-07-28 15:36:29 +08:00
Srini Brahmaroutu 55885daa56 daemon/graphdriver/aufs fix lint errors/warnings
Addresses #14756
Signed-off-by: Srini Brahmaroutu <srbrahma@us.ibm.com>
2015-07-28 06:17:05 +00:00
Srini Brahmaroutu 12460f41a4 daemon/graphdriver/graphtest/ fix lint errors/warnings
Addresses #14756

Signed-off-by: Srini Brahmaroutu <srbrahma@us.ibm.com>
2015-07-28 06:01:00 +00:00
Mary Anthony 1825e06944 Remove references to boot2docker replace with docker-machine
- boot2docker is deprecated in the 1.8.0
- docker-machine replaces it
- this fixes #14563
- Updating with thaJetzah comments

Signed-off-by: Mary Anthony <mary@docker.com>
2015-07-27 18:25:50 -07:00
Jessie Frazelle 4ed3e3a5b2 Merge pull request #14694 from Microsoft/10662-apparmorprofile
Windows: Factoring out unused fields
2015-07-27 18:18:54 -07:00
Qiang Huang fed85c3296 Add status string to State field for inspect
Fixes: #13579

Signed-off-by: Qiang Huang <h.huangqiang@huawei.com>
2015-07-28 08:48:27 +08:00
John Howard 47c56e4353 Windows: Factoring out unused fields
Signed-off-by: John Howard <jhoward@microsoft.com>
2015-07-27 17:44:18 -07:00
Qiang Huang 4862d723a4 Add daemon/execdriver/* to validate-lint
Signed-off-by: Qiang Huang <h.huangqiang@huawei.com>
2015-07-28 08:44:12 +08:00
Qiang Huang 3d17c3bb66 Fix golint warnings for daemon/execdriver/*
Addresses: #14756

Signed-off-by: Qiang Huang <h.huangqiang@huawei.com>
2015-07-28 08:43:22 +08:00
Tibor Vass 8ad1d3fec6 Merge pull request #15067 from aaronlehmann/term-windows-golint
Fix golint nit in term_windows.go
2015-07-27 20:43:18 -04:00
Aaron Lehmann 35e498beca Fix golint nit in term_windows.go
Signed-off-by: Aaron Lehmann <aaron.lehmann@docker.com>
2015-07-27 17:40:49 -07:00
Jessie Frazelle 33358f80e5 Merge pull request #14838 from Microsoft/10662-ansirewrite
Windows: CLI Improvement (TP3)
2015-07-27 17:30:14 -07:00
Jessie Frazelle f32cab874c Merge pull request #15034 from aaronlehmann/update-vendored-distribution
Update vendored distribution repo to new version
2015-07-27 17:24:35 -07:00
Jessie Frazelle f3c23fc463 Merge pull request #15062 from chrisseto/master
Skip DockerSuite.TestExecResizeImmediatelyAfterExecStart on lxc
2015-07-27 17:20:20 -07:00
David Cramer 00f7ced864 [#15027] Fix broken link and edit link text to match section heads
Signed-off-by: David Cramer <davcrame@cisco.com>
2015-07-27 19:12:04 -05:00
Jessica Frazelle 2eee192366 only write distributions file if dne
Signed-off-by: Jessica Frazelle <princess@docker.com>
2015-07-27 16:26:35 -07:00
Chris Seto 83cb288575 Skip DockerSuite.TestExecResizeImmediatelyAfterExecStart on lxc
Signed-off-by: Chris Seto <chriskseto@gmail.com>
2015-07-27 19:20:15 -04:00
Josh Hawn af06d289e4 [api/client] update check Dockerfile in Context
Actually determine the relative path of the Dockerfile to the context
directory. Error out if the relative path starts with "../".

Docker-DCO-1.1-Signed-off-by: Josh Hawn <josh.hawn@docker.com> (github: jlhawn)
2015-07-27 16:11:36 -07:00
Jessie Frazelle 7886056d74 Merge pull request #15059 from calavera/fix_overlay_comments_typo
Fix typo in overlay's create godoc.
2015-07-27 15:40:22 -07:00
David Calavera 5bac5302e5 Fix typo in overlay's create godoc.
Signed-off-by: David Calavera <david.calavera@gmail.com>
2015-07-27 15:37:26 -07:00
Jessie Frazelle 25c42cc0d0 Merge pull request #14759 from vdemeester/pkg-golint
golint on some pkg/* packages
2015-07-27 15:19:46 -07:00
Michael Crosby bdc55be9b4 Merge pull request #15039 from jlhawn/fix_build_context_is_symlink
[api/client] Fix build when context dir is symlink
2015-07-27 15:11:36 -07:00
Jessie Frazelle 72afd792fd Merge pull request #15055 from calavera/log_release_steps
Log each release step.
2015-07-27 15:03:29 -07:00
Jessie Frazelle 0fe564cbb6 Merge pull request #15051 from LK4D4/32bit_const
Use math.MaxInt32 instead of math.MaxUint32
2015-07-27 15:02:40 -07:00
Jessie Frazelle 542de786c2 Merge pull request #14751 from vdemeester/runconfig-lint
golint fixes on runconfig
2015-07-27 15:01:08 -07:00
David Calavera 776600fabb Log each release step.
Signed-off-by: David Calavera <david.calavera@gmail.com>
2015-07-27 14:28:05 -07:00
Sebastiaan van Stijn e5af7a0e86 Merge pull request #14963 from MHBauer/plugins-links
Fix Plugins links
2015-07-27 23:25:48 +02:00
Jessie Frazelle df75411b0f Merge pull request #15050 from DieterReuter/fix-bash-completion
Fix file mode for docker bash completion
2015-07-27 14:24:49 -07:00
Sebastiaan van Stijn 967bc13ae6 Merge pull request #15052 from MHBauer/ubuntu-docs
Fix interrupted numbering sequence in ubuntu installation docs
2015-07-27 22:45:51 +02:00
Alexander Morozov eb45602d2f Use math.MaxInt32 instead of math.MaxUint32
I think it was original intention, because even half of a comment was about
MaxInt32.

Fix #15038

Signed-off-by: Alexander Morozov <lk4d4@docker.com>
2015-07-27 13:11:16 -07:00
Morgan Bauer 289e0d244b Fix interrupted numbering sequence in ubuntu installation docs
- increase indent of note to match surrounding text

Signed-off-by: Morgan Bauer <mbauer@us.ibm.com>
2015-07-27 13:10:29 -07:00
Dieter Reuter 37169dadda Fix file mode for docker bash completion
A bash completion file shouldn't have a executable bit set.
Just change file mode to 644 (instead of 755).

Signed-off-by: Dieter Reuter <dieter.reuter@me.com>
2015-07-27 22:07:04 +02:00
Doug Davis 8c9cd0418d Merge pull request #15045 from cpuguy83/fix_dockercmdwitherror
Don't pass check.C to dockerCmdWithError
2015-07-27 16:04:16 -04:00
Sebastiaan van Stijn 8492e62306 Merge pull request #15041 from runcom/remove-saucy-from-installation-guide
Remove Ubuntu Saucy 13.10 from Ubuntu installation guide
2015-07-27 21:39:55 +02:00
Vincent Demeester 18c7c67308 Lint on pkg/* packages
- pkg/useragent
- pkg/units
- pkg/ulimit
- pkg/truncindex
- pkg/timeoutconn
- pkg/term
- pkg/tarsum
- pkg/tailfile
- pkg/systemd
- pkg/stringutils
- pkg/stringid
- pkg/streamformatter
- pkg/sockets
- pkg/signal
- pkg/proxy
- pkg/progressreader
- pkg/pools
- pkg/plugins
- pkg/pidfile
- pkg/parsers
- pkg/parsers/filters
- pkg/parsers/kernel
- pkg/parsers/operatingsystem

Signed-off-by: Vincent Demeester <vincent@sbr.pm>
2015-07-27 21:26:21 +02:00
Vincent Demeester 5170a2c096 Lint fixes on runconfig
Signed-off-by: Vincent Demeester <vincent@sbr.pm>
2015-07-27 21:23:15 +02:00
David Calavera 0852170e8c Merge pull request #14923 from Djelibeybi/fix14905
Switch to using only the RPM command to determine the distro version.
2015-07-27 12:01:57 -07:00
Josh Hawn 01d570ad30 [api/client] Fix build when context dir is symlink
Symbolic links in the context directory path are now evaluated.

Docker-DCO-1.1-Signed-off-by: Josh Hawn <josh.hawn@docker.com> (github: jlhawn)
2015-07-27 12:01:13 -07:00
Jessie Frazelle d0215376f8 Merge pull request #15044 from jlhawn/fix_15042
[integration-cli] fix windows build test cases
2015-07-27 11:47:56 -07:00
Brian Goff 693ba98cb9 Don't pass check.C to dockerCmdWithError
Signed-off-by: Brian Goff <cpuguy83@gmail.com>
2015-07-27 14:33:32 -04:00
Josh Hawn d06ffd0a5f [integration-cli] fix windows build test cases
Use the same IP as the DOCKER_HOST when making a remote file server.

Docker-DCO-1.1-Signed-off-by: Josh Hawn <josh.hawn@docker.com> (github: jlhawn)
2015-07-27 11:30:38 -07:00
Antonio Murdaca 98f15cae89 Fix install script to handle debian 8.1 apt repo string
Fix #14911

Signed-off-by: Antonio Murdaca <runcom@linux.com>
2015-07-27 20:21:29 +02:00
Jessie Frazelle afac39d308 Merge pull request #15026 from duglin/Issue14837
Add a test for using -f w/git repo on build
2015-07-27 10:55:47 -07:00
Antonio Murdaca 1e43ce350d Remove Ubuntu Saucy 13.10 from Ubuntu installation guide
Signed-off-by: Antonio Murdaca <runcom@linux.com>
2015-07-27 19:55:26 +02:00
Jessie Frazelle db647c3b60 Merge pull request #15031 from liubin/typo/liubin-change-restart-command
Change restarting Docker daemon command in CentOS
2015-07-27 10:54:55 -07:00
Alexander Morozov 4dbdd98b41 Merge pull request #14547 from duglin/ErrDeadExec
Return 404 on exec-inspect when container is dead but exec is still around
2015-07-27 10:46:32 -07:00
Jessie Frazelle 6e1d887722 Merge pull request #13834 from hqhq/hq_memswap_change
Set default MemorySwap on Docker side
2015-07-27 10:46:10 -07:00
Jessie Frazelle 33bd41df94 Merge pull request #14118 from mountkin/fix-rmi-force
raise an error if rmi -f with multiple tags and running container
2015-07-27 10:42:07 -07:00
Jessie Frazelle a62dabe0b4 Merge pull request #14278 from squaremo/separate_overlay_docs
Put the network UI and overlay docs in separate files
2015-07-27 10:41:17 -07:00
Jessie Frazelle fdb932fa17 Merge pull request #14560 from bkeyoumarsi/volume-plugin-doc-fix
Updated volume-driver plugin api docs
2015-07-27 10:39:15 -07:00
Jessie Frazelle f3af9c8bdb Merge pull request #14735 from charleswhchan/patch-1
Minor edits to Environment variables section
2015-07-27 10:37:39 -07:00
Jessie Frazelle 2f5dc43ca2 Merge pull request #14852 from rhatdan/relabel
Rename internal field Relabel to Mode
2015-07-27 10:31:08 -07:00
Jessie Frazelle 303345dc6a Merge pull request #14875 from brahmaroutu/lint_daemon_graphdriver_btrfs
daemon/graphdriver/btrfs fix lint errors/warnings
2015-07-27 10:28:50 -07:00
Jessie Frazelle 70842ea942 Merge pull request #14899 from mountkin/fix-exec-resize-panic
fix the panic caused by resizing a starting exec
2015-07-27 10:27:29 -07:00
Jessie Frazelle b48b6de623 Merge pull request #14959 from runcom/remove-pkg-systemd-booted-go
Remove pkg/systemd/booted.go
2015-07-27 10:22:58 -07:00
Jessie Frazelle 5329d28536 Merge pull request #14971 from moxiegirl/man-page-carry-14637
Carry man page for the load command
2015-07-27 10:18:44 -07:00
Jessie Frazelle 912bafcf36 Merge pull request #14981 from calavera/bump_api_version
Bump api version to 1.21.
2015-07-27 10:17:24 -07:00
Jessie Frazelle 35250b685c Merge pull request #15009 from larchunix/devel
Fix docker-rm man page formatting
2015-07-27 10:16:57 -07:00
David Calavera c451d597f2 Merge pull request #15028 from vbatts/typo
api/client/build: typo in error
2015-07-27 10:13:05 -07:00
David Calavera e89aec0dfb Merge pull request #15010 from runcom/14947-fix-inspect-time-RFC3339Nano
Format times in inspect command with a template as RFC3339Nano
2015-07-27 10:08:21 -07:00
Jessie Frazelle f0f753d70a Merge pull request #14988 from ChanderG/master
Fix minor typo in Debian installation docs
2015-07-27 09:51:58 -07:00
David Calavera 0eb88a0751 Bump api version to 1.21.
Signed-off-by: David Calavera <david.calavera@gmail.com>
2015-07-27 09:48:47 -07:00
Alexander Morozov b2930933c9 Merge pull request #14974 from duglin/BetterTrustErr
Show exact file being parsed on error.
2015-07-27 09:39:48 -07:00
Alexander Morozov ec8173b517 Merge pull request #14917 from srust/14915-empty-hostconfig-on-create
Check for nil before using HostConfig to adjustCpuShares
2015-07-27 09:38:32 -07:00
Aaron Lehmann 091dbc1034 Update vendored distribution repo to new version
This version includes a fix that avoids checking against specific HTTP
status codes. The previous behavior violated the registry API spec.

Fixes #14975

Signed-off-by: Aaron Lehmann <aaron.lehmann@docker.com>
2015-07-27 09:37:38 -07:00
Alexander Morozov ae5c8e3b69 Merge pull request #14786 from brahmaroutu/lint_image
image fix lint errors/warnings
2015-07-27 09:25:30 -07:00
moxiegirl 6c0c6b120a Merge pull request #15007 from cles/arch-systemd-network-issue
Add arch install docs warning about systemd-network
2015-07-27 09:22:01 -07:00
moxiegirl a65f7acbbf Merge pull request #14987 from vdemeester/fix-cli-import-docs
Add missing documentation to cli/import.md
2015-07-27 09:19:57 -07:00
bin liu aa5fc634f1 Change restarting Docker daemon command in CentOS
Signed-off-by: bin liu <liubin0329@gmail.com>
2015-07-27 23:30:06 +08:00
Vincent Batts 7b4e6fc47b *: s/direcotry/directory/g typo
Signed-off-by: Vincent Batts <vbatts@redhat.com>
2015-07-27 11:29:28 -04:00
Vincent Batts 0e697ebe6e api/client/build: typo in error
Signed-off-by: Vincent Batts <vbatts@redhat.com>
2015-07-27 11:01:26 -04:00
Doug Davis d883540440 Adda test for using -f w/git repo on build
https://github.com/docker/docker/pull/14546 actually fixed issue #14837
but I don't see a new test to ensure we don't regress. So this PR adds
a test and then we can close #14837.

Closes #14837

Signed-off-by: Doug Davis <dug@us.ibm.com>
2015-07-27 07:49:42 -07:00
root b061572916 /image - fix lint errors/warnings
Addresses #14756
Signed-off-by: Srini Brahmaroutu <srbrahma@us.ibm.com>
2015-07-27 05:40:57 +00:00
Bardia Keyoumarsi cc997a7f44 Updated volume-driver plugin api docs
There was a mistake in the plugin_volume.md file regarding the /VolumeDriver.Remove call.

Added fix and a better explanation.

Signed-off-by: Bardia Keyoumarsi <b.keyoumarsi@gmail.com>
2015-07-26 21:02:42 -07:00
Alexander Morozov 39999edcc9 Merge pull request #14992 from runcom/remove-unused-funcs
Remove unused functions
2015-07-26 18:36:37 -07:00
Morgan Bauer c2cf349bcd Fix Plugins links
Signed-off-by: Morgan Bauer <mbauer@us.ibm.com>
2015-07-26 18:28:25 -07:00
Jessie Frazelle 23b0fdc896 Merge pull request #14998 from jfrazelle/fix-systemd-debs
fix deb packaging systemd files
2015-07-26 17:49:19 -07:00
Stephen Rust c358a4cd35 Check for nil before using HostConfig to adjustCpuShares
Fix #14915. Add unit test for #14915.
Thanks @runcom for the test case: when the client calls 1.18 api
version w/o hostconfig it results in a nil pointer dereference.

Signed-off-by: Stephen Rust <srust@blockbridge.com>
2015-07-26 20:33:04 -04:00
Oriol Francès 26fa9b0d0d much improved wording for manual network config setup on arch install docs by @moxiegirl
Signed-off-by: Oriol Francès <oriolfa@gmail.com>
2015-07-26 19:11:27 +02:00
Vincent Demeester 3101941120 Add missing documentation to cli/import.md
PR #11907 added support for import using file (path), but it missed
the update of cli/import.md. This fixes that.

Signed-off-by: Vincent Demeester <vincent@sbr.pm>
2015-07-26 18:39:42 +02:00
James Turnbull 77adf6abf1 Merge pull request #15012 from johnktims/patch-3
Fix typo
2015-07-26 11:04:17 -04:00
John Tims 7b552c7a37 Fix typo
Signed-off-by: John Tims <john.k.tims@gmail.com>
2015-07-26 10:53:07 -04:00
Antonio Murdaca c9207bc0aa Format times in inspect command with a template as RFC3339Nano
In 1.6.2 we were decoding inspect API response into interface{}.
time.Time fields were JSON encoded as RFC3339Nano in the response
and when decoded into interface{} they were just strings so the inspect
template treated them as just strings.
From 1.7 we are decoding into types.ContainerJSON and when the template
gets executed it now gets a time.Time and it's formatted as
2015-07-22 05:02:38.091530369 +0000 UTC.
This patch brings back the old behavior by typing time.Time fields
as string so they gets formatted as they were encoded in JSON -- RCF3339Nano

Signed-off-by: Antonio Murdaca <runcom@linux.com>
2015-07-26 15:25:08 +02:00
Oriol Francès e1b57b2a87 Change of wording, rearrange section ordering
Signed-off-by: Oriol Francès <oriolfa@gmail.com>
2015-07-26 13:27:35 +02:00
Oriol Francès 6bd15a68cf Add arch install docs warning about systemd-network
Signed-off-by: Oriol Francès <oriolfa@gmail.com>
2015-07-26 13:27:07 +02:00
Sebastiaan van Stijn 5297a25b4e Merge pull request #15004 from charleswhchan/patch-2
Update faq.md
2015-07-26 13:03:45 +02:00
Sebastiaan van Stijn a059701fa5 Merge pull request #15006 from czerasz/patch-1
Fix typo in JSON config example, in the CLI documetation
2015-07-26 12:56:38 +02:00
Michał Czeraszkiewicz 09a9958e22 Fix typo in JSON config example, in the CLI documetation
Signed-off-by: Michał Czeraszkiewicz <czerasz.hosting@gmail.com>
2015-07-26 12:09:31 +02:00
Charles Chan c6816dfc67 Update faq.md
Fix case for PostgreSQL.

Signed-off-by: Charles Chan <charleswhchan@users.noreply.github.com>
2015-07-25 22:03:20 -07:00
Arnaud Porterie b04dd6b7bc Merge pull request #14996 from chrisseto/master
Fix go vet errors
2015-07-25 19:20:48 -07:00
Denis Ollier 9356049680 Fix docker-rm man page formatting
Signed-off-by: Denis Ollier <larchunix@users.noreply.github.com>
2015-07-26 04:18:48 +02:00
Chander G ceeb22dc6e Fix minor typo in Debian installation docs
Signed-off-by: Chander G <chandergovind@gmail.com>
2015-07-26 03:49:18 +05:30
Sebastiaan van Stijn 6b2b6cb3fc Merge pull request #14940 from coolljt0725/add_vxfs_magic_number
Add VxFS magic number, fixes #14847
2015-07-25 23:25:48 +02:00
Jessica Frazelle a2ea8f2ad8 fix deb packaging systemd files
Signed-off-by: Jessica Frazelle <princess@docker.com>
2015-07-25 14:04:39 -07:00
Chris Seto 04f76b67c9 Fix go vet errors
Signed-off-by: Chris Seto <chriskseto@gmail.com>
2015-07-25 17:00:10 -04:00
Sebastiaan van Stijn 2d61de4625 Merge pull request #14245 from gs11/master
Clarifications in usage
2015-07-25 22:48:48 +02:00
Antonio Murdaca 0e69318b27 Remove unused functions
Signed-off-by: Antonio Murdaca <runcom@linux.com>
2015-07-25 19:54:05 +02:00
gs11 547d6c6656 Clarify error message when container name is already in use. Signed-off-by: Gustav Sinder <gustav.sinder@gmail.com>
Signed-off-by: gs11 <gustav.sinder@gmail.com>
2015-07-25 14:08:38 +02:00
Sebastiaan van Stijn c051ed7953 Merge pull request #14720 from icecrime/14662_document_branches_tags
Document branches and tags
2015-07-25 13:12:47 +02:00
Alexander Morozov 6b12d37ced Merge pull request #14941 from hqhq/hq_cli_remove_cleanup
Remove unnecessary container cleanup in integration-cli
2015-07-24 20:38:15 -07:00
Arnaud Porterie e4c77b047d Document branches and tags
Signed-off-by: Arnaud Porterie <arnaud.porterie@docker.com>
2015-07-24 16:56:30 -07:00
Doug Davis 76106b494b Show exact file being parsed on error.
When there's more than on json file in there we don't tell the user
which one was an issue.

Signed-off-by: Doug Davis <dug@us.ibm.com>
2015-07-24 15:08:24 -07:00
Mary Anthony ae45ffc1fe Carry man page for 14637
Signed-off-by: Mary Anthony <mary@docker.com>
2015-07-24 13:39:29 -07:00
Antonio Murdaca f29dcfd215 Remove pkg/systemd/booted.go
Signed-off-by: Antonio Murdaca <runcom@linux.com>
2015-07-24 18:09:27 +02:00
Charles Chan 42263dafcf Minor edits to Environment variables section
* Clarify the list of supported instructions.
* Clarify behavior of ONBUILD, based on comments by @SvenDowideit, @theJeztah in PR #14735.
* Reorder list of instructions in alphabetical order.

Signed-off-by: Charles Chan <charleswhchan@users.noreply.github.com>
2015-07-24 06:38:55 -07:00
Shijiang Wei 9f7698a637 raise an error if rmi -f with multiple tags and running container
Fixes https://github.com/docker/docker/issues/14116

Signed-off-by: Shijiang Wei <mountkin@gmail.com>
2015-07-24 20:44:13 +08:00
Shijiang Wei ba5e098052 fix the panic caused by resizing a starting exec
Signed-off-by: Shijiang Wei <mountkin@gmail.com>
2015-07-24 20:43:07 +08:00
Dan Walsh 4cb9479ce4 Rename internel field Relabel to Mode
Docker-DCO-1.1-Signed-off-by: Dan Walsh <dwalsh@redhat.com> (github: rhatdan)
2015-07-24 07:14:37 -04:00
Lei e1c5e9b561 Add VxFS magic number, fixes #14847
Signed-off-by: Lei Jitang <leijitang@huawei.com>
2015-07-24 16:37:56 +08:00
Qiang Huang bcc0968a2c Remove unnecessary container cleanup in integration-cli
Signed-off-by: Qiang Huang <h.huangqiang@huawei.com>
2015-07-24 14:48:26 +08:00
Srini Brahmaroutu 17c19f395f daemon/graphdriver/btrfs fix lint errors/warnings
Addresses #14756
Signed-off-by: Srini Brahmaroutu <srbrahma@us.ibm.com>
2015-07-23 22:48:45 +00:00
Avi Miller 59e48b3468 Fix typo.
Signed-off-by: Avi Miller <avi.miller@oracle.com>
2015-07-24 08:14:06 +10:00
Avi Miller a43199f143 Switch to using only the RPM command to determine the distro version.
Signed-off-by: Avi Miller <avi.miller@oracle.com>
2015-07-24 07:38:28 +10:00
Florian Klein 323259ec4e explain how to make it work on awazon ec2.
Signed-off-by: Klein Florian <florian.klein@free.fr>
2015-07-23 08:47:05 +02:00
Michael Bridgen b442db9935 Put the network UI and overlay docs in separate files
.. and link to them separately. They are different features.

Signed-off-by: Michael Bridgen <mikeb@squaremobius.net>
2015-07-23 00:36:34 +01:00
Jeff Minard 6f8fdb8aa8 Allow RHEL init script to detect daemon start pid failure
If you have some kind of bogus `other_args` in `/etc/sysconfig/docker` the start script will report "started" but it's full of lies. This enhances the flow so that if the pidfile never shows up (failure to start) you get a proper failure message.

I also added dots for fun.

Signed-off-by: Jeff Minard <jeff.minard@creditkarma.com>
2015-07-22 11:36:34 -07:00
John Howard c923774c41 Windows: CLI Improvement
The Ansi parser and their associated actions have been decoupled. Now
parsing results in call backs to an interface which performs the
appropriate actions depending on the environment.

This improvement provides a functional Vi experience and the vttest no
longer panics.

This PR replaces docker/docker #13224 with the latest console updates.

Signed-off-by: John Howard <jhoward@microsoft.com>
2015-07-21 16:38:44 -07:00
Victor Palma d821426fa0 Cleanup: factor anonymous function out of cli.clientRequestAttemptLogin
Signed-off-by: Victor Palma <palma.victor@gmail.com>
2015-07-21 16:28:41 -05:00
Qiang Huang 7e0dfbf4cd Set default MemorySwap on Docker side
As discussed in docker/libcontainer#616,
we should move this behavior to Docker side.

Signed-off-by: Qiang Huang <h.huangqiang@huawei.com>
2015-07-13 15:17:43 +08:00
Doug Davis d841b779fd Return 404 on exec-inspect when container is dead but exec is still around
When a container is removed but it had an exec, that still hasn't been
GC'd per PR #14476, and someone tries to inspect the exec we should
return a 404, not a 500+container not running.  Returning "..not running" is
not only misleading because it could lead people to think the container is
actually still around, but after 5 minutes the error will change to a 404
after the GC. This means that we're externalizing our internall soft-deletion/GC
logic which shouldn't be any of the end user's concern. They should get the
same results immediate or after 5 minutes.

Signed-off-by: Doug Davis <dug@us.ibm.com>
2015-07-10 20:19:42 -07:00
896 changed files with 28980 additions and 20066 deletions
+3 -3
View File
@@ -4,7 +4,7 @@
### Distribution
- Fix a bug where pushing multiple tags would result in invalid images
* Fix a bug where pushing multiple tags would result in invalid images
## 1.8.0 (2015-08-11)
@@ -42,7 +42,7 @@
+ Add logging driver for GELF via UDP
+ Allow to copy files from host to containers with `docker cp`
+ Promote volume drivers from experimental to master
+ Add rollover log driver, and --log-driver-opts flag
+ Add rollover options to json-file log driver, and --log-driver-opts flag
+ Add memory swappiness tuning options
* Remove cgroup read-only flag when privileged
* Make /proc, /sys, & /dev readonly for readonly containers
@@ -63,7 +63,7 @@
### Bug fixes
- Add missing 'Names' field to /containers/json API output
- Make `docker rmi --dangling` safe when pulling
- Make `docker rmi` of dangling images safe while pulling
- Devicemapper: Change default basesize to 100G
- Go Scheduler issue with sync.Mutex and gcc
- Fix issue where Search API endpoint would panic due to empty AuthConfig
+3 -2
View File
@@ -40,6 +40,7 @@ RUN apt-get update && apt-get install -y \
createrepo \
curl \
dpkg-sig \
gcc-mingw-w64 \
git \
iptables \
libapparmor-dev \
@@ -127,7 +128,7 @@ RUN git clone https://github.com/golang/lint.git /go/src/github.com/golang/lint
RUN gem install --no-rdoc --no-ri fpm --version 1.3.2
# Install registry
ENV REGISTRY_COMMIT 2317f721a3d8428215a2b65da4ae85212ed473b4
ENV REGISTRY_COMMIT ec87e9b6971d831f0eff752ddb54fb64693e51cd
RUN set -x \
&& export GOPATH="$(mktemp -d)" \
&& git clone https://github.com/docker/distribution.git "$GOPATH/src/github.com/docker/distribution" \
@@ -147,7 +148,7 @@ RUN set -x \
&& rm -rf "$GOPATH"
# Get the "docker-py" source so we can run their integration tests
ENV DOCKER_PY_COMMIT 8a87001d09852058f08a807ab6e8491d57ca1e88
ENV DOCKER_PY_COMMIT 139850f3f3b17357bab5ba3edfb745fb14043764
RUN git clone https://github.com/docker/docker-py.git /docker-py \
&& cd /docker-py \
&& git checkout -q $DOCKER_PY_COMMIT
+1 -1
View File
@@ -309,7 +309,7 @@ made through a pull request.
# - If the pull request has some small problems that need to be changed, make
# a comment adressing the issues.
# - If the changes needed to a PR are small, you can add a "LGTM once the
# following comments are adressed..." this will reduce needless back and
# following comments are addressed..." this will reduce needless back and
# forth.
# - If the PR only needs a few changes before being merged, any MAINTAINER can
# make a replacement PR that incorporates the existing commits and fixes the
+13 -8
View File
@@ -1,12 +1,12 @@
Docker: the Linux container engine
==================================
Docker: the container engine [![Release](https://img.shields.io/github/release/docker/docker.svg)](https://github.com/docker/docker/releases/latest)
============================
Docker is an open source project to pack, ship and run any application
as a lightweight container.
Docker containers are both *hardware-agnostic* and *platform-agnostic*.
This means they can run anywhere, from your laptop to the largest
EC2 compute instance and everything in between - and they don't require
cloud compute instance and everything in between - and they don't require
you to use a particular language, framework or packaging system. That
makes them great building blocks for deploying and scaling web apps,
databases, and backend services without depending on a particular stack
@@ -174,13 +174,14 @@ Under the hood, Docker is built on the following components:
capabilities of the Linux kernel
* The [Go](https://golang.org) programming language
* The [Docker Image Specification](https://github.com/docker/docker/blob/master/image/spec/v1.md)
* The [Libcontainer Specification](https://github.com/docker/libcontainer/blob/master/SPEC.md)
* The [Libcontainer Specification](https://github.com/opencontainers/runc/blob/master/libcontainer/SPEC.md)
Contributing to Docker
Contributing to Docker [![GoDoc](https://godoc.org/github.com/docker/docker?status.svg)](https://godoc.org/github.com/docker/docker)
======================
[![GoDoc](https://godoc.org/github.com/docker/docker?status.svg)](https://godoc.org/github.com/docker/docker)
[![Jenkins Build Status](https://jenkins.dockerproject.org/job/Docker%20Master/badge/icon)](https://jenkins.dockerproject.org/job/Docker%20Master/)
| **Master** (Linux) | **Experimental** (linux) | **Windows** | **FreeBSD** |
|------------------|----------------------|---------|---------|
| [![Jenkins Build Status](https://jenkins.dockerproject.org/view/Docker/job/Docker%20Master/badge/icon)](https://jenkins.dockerproject.org/view/Docker/job/Docker%20Master/) | [![Jenkins Build Status](https://jenkins.dockerproject.org/view/Docker/job/Docker%20Master%20%28experimental%29/badge/icon)](https://jenkins.dockerproject.org/view/Docker/job/Docker%20Master%20%28experimental%29/) | [![Build Status](http://jenkins.dockerproject.org/job/Docker%20Master%20(windows)/badge/icon)](http://jenkins.dockerproject.org/job/Docker%20Master%20(windows)/) | [![Build Status](http://jenkins.dockerproject.org/job/Docker%20Master%20(freebsd)/badge/icon)](http://jenkins.dockerproject.org/job/Docker%20Master%20(freebsd)/) |
Want to hack on Docker? Awesome! We have [instructions to help you get
started contributing code or documentation](https://docs.docker.com/project/who-written-for/).
@@ -247,7 +248,7 @@ We are always open to suggestions on process improvements, and are always lookin
<tr>
<td>Stack Overflow</td>
<td>
Stack Overflow has over 7000K Docker questions listed. We regularly
Stack Overflow has over 7000 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>
@@ -293,3 +294,7 @@ Docker on Mac and Windows
If you know of another project underway that should be listed here, please help
us keep this list up-to-date by submitting a PR.
Awesome-Docker
==============
You can find more projects, tools and articles related to Docker on the [awesome-docker list](https://github.com/veggiemonk/awesome-docker). Add your project there.
+1 -1
View File
@@ -134,7 +134,7 @@ We won't accept patches expanding the surface of `docker exec`, which we intend
## 2.2 Dockerfile syntax
The Dockerfile syntax as we know it is simple, and has proven succesful in supporting all our
The Dockerfile syntax as we know it is simple, and has proven successful in supporting all our
[official images](https://github.com/docker-library/official-images). Although this is *not* a
definitive move, we temporarily won't accept more patches to the Dockerfile syntax for several
reasons:
+1 -1
View File
@@ -1 +1 @@
1.8.1-clear-containers
1.9.0-dev
-19
View File
@@ -1,19 +0,0 @@
package api
import (
"testing"
)
func TestJsonContentType(t *testing.T) {
if !MatchesContentType("application/json", "application/json") {
t.Fail()
}
if !MatchesContentType("application/json; charset=utf-8", "application/json") {
t.Fail()
}
if MatchesContentType("dockerapplication/json", "application/json") {
t.Fail()
}
}
+41 -18
View File
@@ -31,7 +31,6 @@ import (
"github.com/docker/docker/pkg/parsers"
"github.com/docker/docker/pkg/progressreader"
"github.com/docker/docker/pkg/streamformatter"
"github.com/docker/docker/pkg/symlink"
"github.com/docker/docker/pkg/ulimit"
"github.com/docker/docker/pkg/units"
"github.com/docker/docker/pkg/urlutil"
@@ -60,8 +59,8 @@ func (cli *DockerCli) CmdBuild(args ...string) error {
flMemoryString := cmd.String([]string{"m", "-memory"}, "", "Memory limit")
flMemorySwap := cmd.String([]string{"-memory-swap"}, "", "Total memory (memory + swap), '-1' to disable swap")
flCPUShares := cmd.Int64([]string{"c", "-cpu-shares"}, 0, "CPU shares (relative weight)")
flCpuPeriod := cmd.Int64([]string{"-cpu-period"}, 0, "Limit the CPU CFS (Completely Fair Scheduler) period")
flCpuQuota := cmd.Int64([]string{"-cpu-quota"}, 0, "Limit the CPU CFS (Completely Fair Scheduler) quota")
flCPUPeriod := cmd.Int64([]string{"-cpu-period"}, 0, "Limit the CPU CFS (Completely Fair Scheduler) period")
flCPUQuota := cmd.Int64([]string{"-cpu-quota"}, 0, "Limit the CPU CFS (Completely Fair Scheduler) quota")
flCPUSetCpus := cmd.String([]string{"-cpuset-cpus"}, "", "CPUs in which to allow execution (0-3, 0,1)")
flCPUSetMems := cmd.String([]string{"-cpuset-mems"}, "", "MEMs in which to allow execution (0-3, 0,1)")
flCgroupParent := cmd.String([]string{"-cgroup-parent"}, "", "Optional parent cgroup for the container")
@@ -243,8 +242,8 @@ func (cli *DockerCli) CmdBuild(args ...string) error {
v.Set("cpusetcpus", *flCPUSetCpus)
v.Set("cpusetmems", *flCPUSetMems)
v.Set("cpushares", strconv.FormatInt(*flCPUShares, 10))
v.Set("cpuquota", strconv.FormatInt(*flCpuQuota, 10))
v.Set("cpuperiod", strconv.FormatInt(*flCpuPeriod, 10))
v.Set("cpuquota", strconv.FormatInt(*flCPUQuota, 10))
v.Set("cpuperiod", strconv.FormatInt(*flCPUPeriod, 10))
v.Set("memory", strconv.FormatInt(memory, 10))
v.Set("memswap", strconv.FormatInt(memorySwap, 10))
v.Set("cgroupparent", *flCgroupParent)
@@ -252,11 +251,11 @@ func (cli *DockerCli) CmdBuild(args ...string) error {
v.Set("dockerfile", relDockerfile)
ulimitsVar := flUlimits.GetList()
ulimitsJson, err := json.Marshal(ulimitsVar)
ulimitsJSON, err := json.Marshal(ulimitsVar)
if err != nil {
return err
}
v.Set("ulimits", string(ulimitsJson))
v.Set("ulimits", string(ulimitsJSON))
headers := http.Header(make(map[string][]string))
buf, err := json.Marshal(cli.configFile.AuthConfigs)
@@ -308,6 +307,12 @@ func (cli *DockerCli) CmdBuild(args ...string) error {
return nil
}
// isUNC returns true if the path is UNC (one starting \\). It always returns
// false on Linux.
func isUNC(path string) bool {
return runtime.GOOS == "windows" && strings.HasPrefix(path, `\\`)
}
// getDockerfileRelPath uses the given context directory for a `docker build`
// and returns the absolute path to the context directory, the relative path of
// the dockerfile in that context directory, and a non-nil error on success.
@@ -318,9 +323,16 @@ func getDockerfileRelPath(givenContextDir, givenDockerfile string) (absContextDi
// The context dir might be a symbolic link, so follow it to the actual
// target directory.
absContextDir, err = filepath.EvalSymlinks(absContextDir)
if err != nil {
return "", "", fmt.Errorf("unable to evaluate symlinks in context path: %v", err)
//
// FIXME. We use isUNC (always false on non-Windows platforms) to workaround
// an issue in golang. On Windows, EvalSymLinks does not work on UNC file
// paths (those starting with \\). This hack means that when using links
// on UNC paths, they will not be followed.
if !isUNC(absContextDir) {
absContextDir, err = filepath.EvalSymlinks(absContextDir)
if err != nil {
return "", "", fmt.Errorf("unable to evaluate symlinks in context path: %v", err)
}
}
stat, err := os.Lstat(absContextDir)
@@ -354,15 +366,22 @@ func getDockerfileRelPath(givenContextDir, givenDockerfile string) (absContextDi
absDockerfile = filepath.Join(absContextDir, absDockerfile)
}
// Verify that 'filename' is within the build context
absDockerfile, err = symlink.FollowSymlinkInScope(absDockerfile, absContextDir)
if err != nil {
return "", "", fmt.Errorf("The Dockerfile (%s) must be within the build context (%s)", givenDockerfile, givenContextDir)
// Evaluate symlinks in the path to the Dockerfile too.
//
// FIXME. We use isUNC (always false on non-Windows platforms) to workaround
// an issue in golang. On Windows, EvalSymLinks does not work on UNC file
// paths (those starting with \\). This hack means that when using links
// on UNC paths, they will not be followed.
if !isUNC(absDockerfile) {
absDockerfile, err = filepath.EvalSymlinks(absDockerfile)
if err != nil {
return "", "", fmt.Errorf("unable to evaluate symlinks in Dockerfile path: %v", err)
}
}
if _, err := os.Lstat(absDockerfile); err != nil {
if os.IsNotExist(err) {
return "", "", fmt.Errorf("Cannot locate Dockerfile: absDockerfile: %q", absDockerfile)
return "", "", fmt.Errorf("Cannot locate Dockerfile: %q", absDockerfile)
}
return "", "", fmt.Errorf("unable to stat Dockerfile: %v", err)
}
@@ -371,6 +390,10 @@ func getDockerfileRelPath(givenContextDir, givenDockerfile string) (absContextDi
return "", "", fmt.Errorf("unable to get relative Dockerfile path: %v", err)
}
if strings.HasPrefix(relDockerfile, ".."+string(filepath.Separator)) {
return "", "", fmt.Errorf("The Dockerfile (%s) must be within the build context (%s)", givenDockerfile, givenContextDir)
}
return absContextDir, relDockerfile, nil
}
@@ -422,7 +445,7 @@ func getContextFromReader(r io.Reader, dockerfileName string) (absContextDir, re
}
if err := archive.Untar(buf, absContextDir, nil); err != nil {
return "", "", fmt.Errorf("unable to extract stdin to temporary context direcotry: %v", err)
return "", "", fmt.Errorf("unable to extract stdin to temporary context directory: %v", err)
}
return getDockerfileRelPath(absContextDir, dockerfileName)
@@ -459,7 +482,7 @@ func getContextFromURL(out io.Writer, remoteURL, dockerfileName string) (absCont
In: response.Body,
Out: out,
Formatter: streamformatter.NewStreamFormatter(),
Size: int(response.ContentLength),
Size: response.ContentLength,
NewLines: true,
ID: "",
Action: fmt.Sprintf("Downloading build context from remote url: %s", remoteURL),
@@ -544,7 +567,7 @@ func rewriteDockerfileFrom(dockerfileName string, translator func(string, regist
// Replace the line with a resolved "FROM repo@digest"
repo, tag := parsers.ParseRepositoryTag(matches[1])
if tag == "" {
tag = tags.DEFAULTTAG
tag = tags.DefaultTag
}
repoInfo, err := registry.ParseRepositoryInfo(repo)
+5
View File
@@ -58,6 +58,8 @@ type DockerCli struct {
transport *http.Transport
}
// Initialize calls the init function that will setup the configuration for the client
// such as the TLS, tcp and other parameters used to run the client.
func (cli *DockerCli) Initialize() error {
if cli.init == nil {
return nil
@@ -77,6 +79,8 @@ func (cli *DockerCli) CheckTtyInput(attachStdin, ttyMode bool) error {
return nil
}
// PsFormat returns the format string specified in the configuration.
// String contains columns and format specification, for example {{ID}\t{{Name}}.
func (cli *DockerCli) PsFormat() string {
return cli.configFile.PsFormat
}
@@ -94,6 +98,7 @@ func NewDockerCli(in io.ReadCloser, out, err io.Writer, clientFlags *cli.ClientF
}
cli.init = func() error {
clientFlags.PostParse()
hosts := clientFlags.Common.Hosts
+3 -2
View File
@@ -15,6 +15,7 @@ import (
Cli "github.com/docker/docker/cli"
"github.com/docker/docker/pkg/archive"
flag "github.com/docker/docker/pkg/mflag"
"github.com/docker/docker/pkg/system"
)
type copyDirection int
@@ -101,7 +102,7 @@ func (cli *DockerCli) CmdCp(args ...string) error {
// client, a `:` could be part of an absolute Windows path, in which case it
// is immediately proceeded by a backslash.
func splitCpArg(arg string) (container, path string) {
if filepath.IsAbs(arg) {
if system.IsAbs(arg) {
// Explicit local absolute path, e.g., `C:\foo` or `/foo`.
return "", arg
}
@@ -236,7 +237,7 @@ func (cli *DockerCli) copyToContainer(srcPath, dstContainer, dstPath string) (er
// If the destination is a symbolic link, we should evaluate it.
if err == nil && dstStat.Mode&os.ModeSymlink != 0 {
linkTarget := dstStat.LinkTarget
if !filepath.IsAbs(linkTarget) {
if !system.IsAbs(linkTarget) {
// Join with the parent directory.
dstParent, _ := archive.SplitPathDirEntry(dstPath)
linkTarget = filepath.Join(dstParent, linkTarget)
+2 -2
View File
@@ -26,7 +26,7 @@ func (cli *DockerCli) pullImageCustomOut(image string, out io.Writer) error {
repos, tag := parsers.ParseRepositoryTag(image)
// pull only the image tagged 'latest' if no tag was specified
if tag == "" {
tag = tags.DEFAULTTAG
tag = tags.DefaultTag
}
v.Set("fromImage", repos)
v.Set("tag", tag)
@@ -96,7 +96,7 @@ func (cli *DockerCli) createContainer(config *runconfig.Config, hostConfig *runc
repo, tag := parsers.ParseRepositoryTag(config.Image)
if tag == "" {
tag = tags.DEFAULTTAG
tag = tags.DefaultTag
}
ref := registry.ParseReference(tag)
+1 -2
View File
@@ -2,7 +2,6 @@ package client
import (
"errors"
"io"
"os"
Cli "github.com/docker/docker/cli"
@@ -22,7 +21,7 @@ func (cli *DockerCli) CmdExport(args ...string) error {
cmd.ParseFlags(args, true)
var (
output io.Writer = cli.out
output = cli.out
err error
)
if *outfile != "" {
+1 -1
View File
@@ -167,7 +167,7 @@ func (cli *DockerCli) hijack(method, path string, setRawTerminal bool, in io.Rea
}
if err != nil {
if strings.Contains(err.Error(), "connection refused") {
return fmt.Errorf("Cannot connect to the Docker daemon. Is 'docker -d' running on this host?")
return fmt.Errorf("Cannot connect to the Docker daemon. Is 'docker daemon' running on this host?")
}
return err
}
+1 -1
View File
@@ -22,7 +22,7 @@ import (
//
// Usage: docker images [OPTIONS] [REPOSITORY]
func (cli *DockerCli) CmdImages(args ...string) error {
cmd := Cli.Subcmd("images", []string{"[REPOSITORY]"}, "List images", true)
cmd := Cli.Subcmd("images", []string{"[REPOSITORY[:TAG]]"}, "List images", true)
quiet := cmd.Bool([]string{"q", "-quiet"}, false, "Only show numeric IDs")
all := cmd.Bool([]string{"a", "-all"}, false, "Show all images (default hides intermediate images)")
noTrunc := cmd.Bool([]string{"#notrunc", "-no-trunc"}, false, "Don't truncate output")
+2
View File
@@ -23,6 +23,7 @@ func (cli *DockerCli) CmdImport(args ...string) error {
cmd := Cli.Subcmd("import", []string{"file|URL|- [REPOSITORY[:TAG]]"}, "Create an empty filesystem image and import the contents of the\ntarball (.tar, .tar.gz, .tgz, .bzip, .tar.xz, .txz) into it, then\noptionally tag it.", true)
flChanges := opts.NewListOpts(nil)
cmd.Var(&flChanges, []string{"c", "-change"}, "Apply Dockerfile instruction to the created image")
message := cmd.String([]string{"m", "-message"}, "", "Set commit message for imported image")
cmd.Require(flag.Min, 1)
cmd.ParseFlags(args, true)
@@ -35,6 +36,7 @@ func (cli *DockerCli) CmdImport(args ...string) error {
v.Set("fromSrc", src)
v.Set("repo", repository)
v.Set("message", *message)
for _, change := range flChanges.GetAll() {
v.Add("changes", change)
}
+4 -4
View File
@@ -61,8 +61,8 @@ func (cli *DockerCli) CmdInfo(args ...string) error {
fmt.Fprintf(cli.out, "Docker Root Dir: %s\n", info.DockerRootDir)
}
ioutils.FprintfIfNotEmpty(cli.out, "Http Proxy: %s\n", info.HttpProxy)
ioutils.FprintfIfNotEmpty(cli.out, "Https Proxy: %s\n", info.HttpsProxy)
ioutils.FprintfIfNotEmpty(cli.out, "Http Proxy: %s\n", info.HTTPProxy)
ioutils.FprintfIfNotEmpty(cli.out, "Https Proxy: %s\n", info.HTTPSProxy)
ioutils.FprintfIfNotEmpty(cli.out, "No Proxy: %s\n", info.NoProxy)
if info.IndexServerAddress != "" {
@@ -82,12 +82,12 @@ func (cli *DockerCli) CmdInfo(args ...string) error {
fmt.Fprintf(cli.err, "WARNING: No swap limit support\n")
}
if !info.IPv4Forwarding {
fmt.Fprintf(cli.err, "WARNING: IPv4 forwarding is disabled.\n")
fmt.Fprintf(cli.err, "WARNING: IPv4 forwarding is disabled\n")
}
if !info.BridgeNfIptables {
fmt.Fprintf(cli.err, "WARNING: bridge-nf-call-iptables is disabled\n")
}
if !info.BridgeNfIp6tables {
if !info.BridgeNfIP6tables {
fmt.Fprintf(cli.err, "WARNING: bridge-nf-call-ip6tables is disabled\n")
}
}
+8 -7
View File
@@ -26,13 +26,14 @@ func (cli *DockerCli) CmdLogout(args ...string) error {
if _, ok := cli.configFile.AuthConfigs[serverAddress]; !ok {
fmt.Fprintf(cli.out, "Not logged in to %s\n", serverAddress)
} else {
fmt.Fprintf(cli.out, "Remove login credentials for %s\n", serverAddress)
delete(cli.configFile.AuthConfigs, serverAddress)
if err := cli.configFile.Save(); err != nil {
return fmt.Errorf("Failed to save docker config: %v", err)
}
return nil
}
fmt.Fprintf(cli.out, "Remove login credentials for %s\n", serverAddress)
delete(cli.configFile.AuthConfigs, serverAddress)
if err := cli.configFile.Save(); err != nil {
return fmt.Errorf("Failed to save docker config: %v", err)
}
return nil
}
+1
View File
@@ -8,6 +8,7 @@ import (
nwclient "github.com/docker/libnetwork/client"
)
// CmdNetwork is used to create, display and configure network endpoints.
func (cli *DockerCli) CmdNetwork(args ...string) error {
nCli := nwclient.NewNetworkCli(cli.out, cli.err, nwclient.CallFunc(cli.callWrapper))
args = append([]string{"network"}, args...)
+1 -1
View File
@@ -95,7 +95,7 @@ func (cli *DockerCli) CmdPs(args ...string) error {
f := *format
if len(f) == 0 {
if len(cli.PsFormat()) > 0 {
if len(cli.PsFormat()) > 0 && !*quiet {
f = cli.PsFormat()
} else {
f = "table"
+3
View File
@@ -64,6 +64,9 @@ func (c *containerContext) Image() string {
if c.c.Image == "" {
return "<no image>"
}
if c.trunc {
return stringutils.Truncate(c.c.Image, 12)
}
return c.c.Image
}
+3 -3
View File
@@ -12,7 +12,7 @@ import (
)
func TestContainerPsContext(t *testing.T) {
containerId := stringid.GenerateRandomID()
containerID := stringid.GenerateRandomID()
unix := time.Now().Unix()
var ctx containerContext
@@ -23,12 +23,12 @@ func TestContainerPsContext(t *testing.T) {
expHeader string
call func() string
}{
{types.Container{ID: containerId}, true, stringid.TruncateID(containerId), idHeader, ctx.ID},
{types.Container{ID: containerID}, true, stringid.TruncateID(containerID), idHeader, ctx.ID},
{types.Container{Names: []string{"/foobar_baz"}}, true, "foobar_baz", namesHeader, ctx.Names},
{types.Container{Image: "ubuntu"}, true, "ubuntu", imageHeader, ctx.Image},
{types.Container{Image: ""}, true, "<no image>", imageHeader, ctx.Image},
{types.Container{Command: "sh -c 'ls -la'"}, true, `"sh -c 'ls -la'"`, commandHeader, ctx.Command},
{types.Container{Created: int(unix)}, true, time.Unix(unix, 0).String(), createdAtHeader, ctx.CreatedAt},
{types.Container{Created: unix}, true, time.Unix(unix, 0).String(), createdAtHeader, ctx.CreatedAt},
{types.Container{Ports: []types.Port{{PrivatePort: 8080, PublicPort: 8080, Type: "tcp"}}}, true, "8080/tcp", portsHeader, ctx.Ports},
{types.Container{Status: "RUNNING"}, true, "RUNNING", statusHeader, ctx.Status},
{types.Container{SizeRw: 10}, true, "10 B", sizeHeader, ctx.Size},
+11 -3
View File
@@ -14,14 +14,22 @@ const (
defaultQuietFormat = "{{.ID}}"
)
// Context contains information required by the formatter to print the output as desired.
type Context struct {
// Output is the output stream to which the formatted string is written.
Output io.Writer
// Format is used to choose raw, table or custom format for the output.
Format string
Size bool
Quiet bool
Trunc bool
// Size when set to true will display the size of the output.
Size bool
// Quiet when set to true will simply print minimal information.
Quiet bool
// Trunc when set to true will truncate the output of certain fields such as Container ID.
Trunc bool
}
// Format helps to format the output using the parameters set in the Context.
// Currently Format allow to display in raw, table or custom format the output.
func Format(ctx Context, containers []types.Container) {
switch ctx.Format {
case tableFormatKey:
+1 -1
View File
@@ -25,7 +25,7 @@ func (cli *DockerCli) CmdPull(args ...string) error {
taglessRemote, tag := parsers.ParseRepositoryTag(remote)
if tag == "" && !*allTags {
tag = tags.DEFAULTTAG
tag = tags.DefaultTag
fmt.Fprintf(cli.out, "Using default tag: %s\n", tag)
} else if tag != "" && *allTags {
return fmt.Errorf("tag can't be used with --all-tags/-a")
+1 -1
View File
@@ -11,7 +11,7 @@ import (
// CmdRestart restarts one or more running containers.
//
// Usage: docker stop [OPTIONS] CONTAINER [CONTAINER...]
// Usage: docker restart [OPTIONS] CONTAINER [CONTAINER...]
func (cli *DockerCli) CmdRestart(args ...string) error {
cmd := Cli.Subcmd("restart", []string{"CONTAINER [CONTAINER...]"}, "Restart a running container", true)
nSeconds := cmd.Int([]string{"t", "-time"}, 10, "Seconds to wait for stop before killing the container")
+2 -2
View File
@@ -63,11 +63,11 @@ func (cli *DockerCli) CmdRun(args ...string) error {
os.Exit(1)
}
if len(hostConfig.Dns) > 0 {
if len(hostConfig.DNS) > 0 {
// check the DNS settings passed via --dns against
// localhost regexp to warn if they are trying to
// set a DNS to a localhost address
for _, dnsIP := range hostConfig.Dns {
for _, dnsIP := range hostConfig.DNS {
if dns.IsLocalhost(dnsIP) {
fmt.Fprintf(cli.err, "WARNING: Localhost DNS setting (--dns=%s) may fail in containers.\n", dnsIP)
break
+2 -3
View File
@@ -2,7 +2,6 @@ package client
import (
"errors"
"io"
"net/url"
"os"
@@ -17,13 +16,13 @@ import (
// Usage: docker save [OPTIONS] IMAGE [IMAGE...]
func (cli *DockerCli) CmdSave(args ...string) error {
cmd := Cli.Subcmd("save", []string{"IMAGE [IMAGE...]"}, "Save an image(s) to a tar archive (streamed to STDOUT by default)", true)
outfile := cmd.String([]string{"o", "-output"}, "", "Write to an file, instead of STDOUT")
outfile := cmd.String([]string{"o", "-output"}, "", "Write to a file, instead of STDOUT")
cmd.Require(flag.Min, 1)
cmd.ParseFlags(args, true)
var (
output io.Writer = cli.out
output = cli.out
err error
)
if *outfile != "" {
+2
View File
@@ -8,6 +8,8 @@ import (
nwclient "github.com/docker/libnetwork/client"
)
// CmdService is used to manage network services.
// service command is user to publish, attach and list a service from a container.
func (cli *DockerCli) CmdService(args ...string) error {
nCli := nwclient.NewNetworkCli(cli.out, cli.err, nwclient.CallFunc(cli.callWrapper))
args = append([]string{"service"}, args...)
+26 -8
View File
@@ -25,6 +25,8 @@ type containerStats struct {
MemoryPercentage float64
NetworkRx float64
NetworkTx float64
BlockRead float64
BlockWrite float64
mu sync.RWMutex
err error
}
@@ -63,9 +65,10 @@ func (s *containerStats) Collect(cli *DockerCli, streamStats bool) {
memPercent = float64(v.MemoryStats.Usage) / float64(v.MemoryStats.Limit) * 100.0
cpuPercent = 0.0
)
previousCPU = v.PreCpuStats.CpuUsage.TotalUsage
previousSystem = v.PreCpuStats.SystemUsage
previousCPU = v.PreCPUStats.CPUUsage.TotalUsage
previousSystem = v.PreCPUStats.SystemUsage
cpuPercent = calculateCPUPercent(previousCPU, previousSystem, v)
blkRead, blkWrite := calculateBlockIO(v.BlkioStats)
s.mu.Lock()
s.CPUPercentage = cpuPercent
s.Memory = float64(v.MemoryStats.Usage)
@@ -73,6 +76,8 @@ func (s *containerStats) Collect(cli *DockerCli, streamStats bool) {
s.MemoryPercentage = memPercent
s.NetworkRx = float64(v.Network.RxBytes)
s.NetworkTx = float64(v.Network.TxBytes)
s.BlockRead = float64(blkRead)
s.BlockWrite = float64(blkWrite)
s.mu.Unlock()
u <- nil
if !streamStats {
@@ -110,12 +115,13 @@ func (s *containerStats) Display(w io.Writer) error {
if s.err != nil {
return s.err
}
fmt.Fprintf(w, "%s\t%.2f%%\t%s/%s\t%.2f%%\t%s/%s\n",
fmt.Fprintf(w, "%s\t%.2f%%\t%s / %s\t%.2f%%\t%s / %s\t%s / %s\n",
s.Name,
s.CPUPercentage,
units.HumanSize(s.Memory), units.HumanSize(s.MemoryLimit),
s.MemoryPercentage,
units.HumanSize(s.NetworkRx), units.HumanSize(s.NetworkTx))
units.HumanSize(s.NetworkRx), units.HumanSize(s.NetworkTx),
units.HumanSize(s.BlockRead), units.HumanSize(s.BlockWrite))
return nil
}
@@ -142,7 +148,7 @@ func (cli *DockerCli) CmdStats(args ...string) error {
fmt.Fprint(cli.out, "\033[2J")
fmt.Fprint(cli.out, "\033[H")
}
io.WriteString(w, "CONTAINER\tCPU %\tMEM USAGE/LIMIT\tMEM %\tNET I/O\n")
io.WriteString(w, "CONTAINER\tCPU %\tMEM USAGE / LIMIT\tMEM %\tNET I/O\tBLOCK I/O\n")
}
for _, n := range names {
s := &containerStats{Name: n}
@@ -190,13 +196,25 @@ func calculateCPUPercent(previousCPU, previousSystem uint64, v *types.Stats) flo
var (
cpuPercent = 0.0
// calculate the change for the cpu usage of the container in between readings
cpuDelta = float64(v.CpuStats.CpuUsage.TotalUsage - previousCPU)
cpuDelta = float64(v.CPUStats.CPUUsage.TotalUsage - previousCPU)
// calculate the change for the entire system between readings
systemDelta = float64(v.CpuStats.SystemUsage - previousSystem)
systemDelta = float64(v.CPUStats.SystemUsage - previousSystem)
)
if systemDelta > 0.0 && cpuDelta > 0.0 {
cpuPercent = (cpuDelta / systemDelta) * float64(len(v.CpuStats.CpuUsage.PercpuUsage)) * 100.0
cpuPercent = (cpuDelta / systemDelta) * float64(len(v.CPUStats.CPUUsage.PercpuUsage)) * 100.0
}
return cpuPercent
}
func calculateBlockIO(blkio types.BlkioStats) (blkRead uint64, blkWrite uint64) {
for _, bioEntry := range blkio.IoServiceBytesRecursive {
switch strings.ToLower(bioEntry.Op) {
case "read":
blkRead = blkRead + bioEntry.Value
case "write":
blkWrite = blkWrite + bioEntry.Value
}
}
return
}
+18 -1
View File
@@ -4,6 +4,8 @@ import (
"bytes"
"sync"
"testing"
"github.com/docker/docker/api/types"
)
func TestDisplay(t *testing.T) {
@@ -15,6 +17,8 @@ func TestDisplay(t *testing.T) {
MemoryPercentage: 100.0 / 2048.0 * 100.0,
NetworkRx: 100 * 1024 * 1024,
NetworkTx: 800 * 1024 * 1024,
BlockRead: 100 * 1024 * 1024,
BlockWrite: 800 * 1024 * 1024,
mu: sync.RWMutex{},
}
var b bytes.Buffer
@@ -22,8 +26,21 @@ func TestDisplay(t *testing.T) {
t.Fatalf("c.Display() gave error: %s", err)
}
got := b.String()
want := "app\t30.00%\t104.9 MB/2.147 GB\t4.88%\t104.9 MB/838.9 MB\n"
want := "app\t30.00%\t104.9 MB / 2.147 GB\t4.88%\t104.9 MB / 838.9 MB\t104.9 MB / 838.9 MB\n"
if got != want {
t.Fatalf("c.Display() = %q, want %q", got, want)
}
}
func TestCalculBlockIO(t *testing.T) {
blkio := types.BlkioStats{
IoServiceBytesRecursive: []types.BlkioStatEntry{{8, 0, "read", 1234}, {8, 1, "read", 4567}, {8, 0, "write", 123}, {8, 1, "write", 456}},
}
blkRead, blkWrite := calculateBlockIO(blkio)
if blkRead != 5801 {
t.Fatalf("blkRead = %d, want 5801", blkRead)
}
if blkWrite != 579 {
t.Fatalf("blkWrite = %d, want 579", blkWrite)
}
}
+43 -39
View File
@@ -30,7 +30,7 @@ import (
)
var (
errConnectionRefused = errors.New("Cannot connect to the Docker daemon. Is 'docker -d' running on this host?")
errConnectionFailed = errors.New("Cannot connect to the Docker daemon. Is the docker daemon running on this host?")
)
type serverResponse struct {
@@ -94,13 +94,14 @@ func (cli *DockerCli) clientRequest(method, path string, in io.Reader, headers m
if resp != nil {
serverResp.statusCode = resp.StatusCode
}
if err != nil {
if strings.Contains(err.Error(), "connection refused") {
return serverResp, errConnectionRefused
if types.IsTimeout(err) || strings.Contains(err.Error(), "connection refused") || strings.Contains(err.Error(), "dial unix") {
return serverResp, errConnectionFailed
}
if cli.tlsConfig == nil {
return serverResp, fmt.Errorf("%v.\n* Are you trying to connect to a TLS-enabled daemon without TLS?\n* Is your docker daemon up and running?", err)
if cli.tlsConfig == nil && strings.Contains(err.Error(), "malformed HTTP response") {
return serverResp, fmt.Errorf("%v.\n* Are you trying to connect to a TLS-enabled daemon without TLS?", err)
}
if cli.tlsConfig != nil && strings.Contains(err.Error(), "remote error: bad certificate") {
return serverResp, fmt.Errorf("The server probably has client authentication (--tlsverify) enabled. Please check your TLS client certification settings: %v", err)
@@ -125,48 +126,51 @@ func (cli *DockerCli) clientRequest(method, path string, in io.Reader, headers m
return serverResp, nil
}
func (cli *DockerCli) clientRequestAttemptLogin(method, path string, in io.Reader, out io.Writer, index *registry.IndexInfo, cmdName string) (io.ReadCloser, int, error) {
cmdAttempt := func(authConfig cliconfig.AuthConfig) (io.ReadCloser, int, error) {
buf, err := json.Marshal(authConfig)
if err != nil {
return nil, -1, err
}
registryAuthHeader := []string{
base64.URLEncoding.EncodeToString(buf),
}
// begin the request
serverResp, err := cli.clientRequest(method, path, in, map[string][]string{
"X-Registry-Auth": registryAuthHeader,
})
if err == nil && out != nil {
// If we are streaming output, complete the stream since
// errors may not appear until later.
err = cli.streamBody(serverResp.body, serverResp.header.Get("Content-Type"), true, out, nil)
}
if err != nil {
// Since errors in a stream appear after status 200 has been written,
// we may need to change the status code.
if strings.Contains(err.Error(), "Authentication is required") ||
strings.Contains(err.Error(), "Status 401") ||
strings.Contains(err.Error(), "401 Unauthorized") ||
strings.Contains(err.Error(), "status code 401") {
serverResp.statusCode = http.StatusUnauthorized
}
}
return serverResp.body, serverResp.statusCode, err
// cmdAttempt builds the corresponding registry Auth Header from the given
// authConfig. It returns the servers body, status, error response
func (cli *DockerCli) cmdAttempt(authConfig cliconfig.AuthConfig, method, path string, in io.Reader, out io.Writer) (io.ReadCloser, int, error) {
buf, err := json.Marshal(authConfig)
if err != nil {
return nil, -1, err
}
registryAuthHeader := []string{
base64.URLEncoding.EncodeToString(buf),
}
// begin the request
serverResp, err := cli.clientRequest(method, path, in, map[string][]string{
"X-Registry-Auth": registryAuthHeader,
})
if err == nil && out != nil {
// If we are streaming output, complete the stream since
// errors may not appear until later.
err = cli.streamBody(serverResp.body, serverResp.header.Get("Content-Type"), true, out, nil)
}
if err != nil {
// Since errors in a stream appear after status 200 has been written,
// we may need to change the status code.
if strings.Contains(err.Error(), "Authentication is required") ||
strings.Contains(err.Error(), "Status 401") ||
strings.Contains(err.Error(), "401 Unauthorized") ||
strings.Contains(err.Error(), "status code 401") {
serverResp.statusCode = http.StatusUnauthorized
}
}
return serverResp.body, serverResp.statusCode, err
}
func (cli *DockerCli) clientRequestAttemptLogin(method, path string, in io.Reader, out io.Writer, index *registry.IndexInfo, cmdName string) (io.ReadCloser, int, error) {
// Resolve the Auth config relevant for this server
authConfig := registry.ResolveAuthConfig(cli.configFile, index)
body, statusCode, err := cmdAttempt(authConfig)
body, statusCode, err := cli.cmdAttempt(authConfig, method, path, in, out)
if statusCode == http.StatusUnauthorized {
fmt.Fprintf(cli.out, "\nPlease login prior to %s:\n", cmdName)
if err = cli.CmdLogin(index.GetAuthConfigKey()); err != nil {
return nil, -1, err
}
authConfig = registry.ResolveAuthConfig(cli.configFile, index)
return cmdAttempt(authConfig)
return cli.cmdAttempt(authConfig, method, path, in, out)
}
return body, statusCode, err
}
@@ -277,7 +281,7 @@ func getExitCode(cli *DockerCli, containerID string) (bool, int, error) {
serverResp, err := cli.call("GET", "/containers/"+containerID+"/json", nil, nil)
if err != nil {
// If we can't connect, then the daemon probably died.
if err != errConnectionRefused {
if err != errConnectionFailed {
return false, -1, err
}
return false, -1, nil
@@ -299,7 +303,7 @@ func getExecExitCode(cli *DockerCli, execID string) (bool, int, error) {
serverResp, err := cli.call("GET", "/exec/"+execID+"/json", nil, nil)
if err != nil {
// If we can't connect, then the daemon probably died.
if err != errConnectionRefused {
if err != errConnectionFailed {
return false, -1, err
}
return false, -1, nil
+7 -7
View File
@@ -13,9 +13,9 @@ import (
"github.com/docker/docker/utils"
)
var VersionTemplate = `Client:
var versionTemplate = `Client:
Version: {{.Client.Version}}
API version: {{.Client.ApiVersion}}
API version: {{.Client.APIVersion}}
Go version: {{.Client.GoVersion}}
Git commit: {{.Client.GitCommit}}
Built: {{.Client.BuildTime}}
@@ -24,14 +24,14 @@ var VersionTemplate = `Client:
Server:
Version: {{.Server.Version}}
API version: {{.Server.ApiVersion}}
API version: {{.Server.APIVersion}}
Go version: {{.Server.GoVersion}}
Git commit: {{.Server.GitCommit}}
Built: {{.Server.BuildTime}}
OS/Arch: {{.Server.Os}}/{{.Server.Arch}}{{if .Server.Experimental}}
Experimental: {{.Server.Experimental}}{{end}}{{end}}`
type VersionData struct {
type versionData struct {
Client types.Version
ServerOK bool
Server types.Version
@@ -49,7 +49,7 @@ func (cli *DockerCli) CmdVersion(args ...string) (err error) {
cmd.ParseFlags(args, true)
if *tmplStr == "" {
*tmplStr = VersionTemplate
*tmplStr = versionTemplate
}
var tmpl *template.Template
@@ -58,10 +58,10 @@ func (cli *DockerCli) CmdVersion(args ...string) (err error) {
Status: "Template parsing error: " + err.Error()}
}
vd := VersionData{
vd := versionData{
Client: types.Version{
Version: dockerversion.VERSION,
ApiVersion: api.Version,
APIVersion: api.Version,
GoVersion: runtime.Version(),
GitCommit: dockerversion.GITCOMMIT,
BuildTime: dockerversion.BUILDTIME,
+232
View File
@@ -0,0 +1,232 @@
package client
import (
"bytes"
"encoding/json"
"fmt"
"io"
"net/url"
"text/tabwriter"
"text/template"
"github.com/docker/docker/api/types"
Cli "github.com/docker/docker/cli"
"github.com/docker/docker/opts"
flag "github.com/docker/docker/pkg/mflag"
"github.com/docker/docker/pkg/parsers/filters"
)
// CmdVolume is the parent subcommand for all volume commands
//
// Usage: docker volume <COMMAND> <OPTS>
func (cli *DockerCli) CmdVolume(args ...string) error {
description := "Manage Docker volumes\n\nCommands:\n"
commands := [][]string{
{"create", "Create a volume"},
{"inspect", "Return low-level information on a volume"},
{"ls", "List volumes"},
{"rm", "Remove a volume"},
}
for _, cmd := range commands {
description += fmt.Sprintf(" %-25.25s%s\n", cmd[0], cmd[1])
}
description += "\nRun 'docker volume COMMAND --help' for more information on a command."
cmd := Cli.Subcmd("volume", []string{"[COMMAND]"}, description, true)
cmd.Require(flag.Exact, 0)
cmd.ParseFlags(args, true)
return cli.CmdVolumeLs(args...)
}
// CmdVolumeLs outputs a list of Docker volumes.
//
// Usage: docker volume ls [OPTIONS]
func (cli *DockerCli) CmdVolumeLs(args ...string) error {
cmd := Cli.Subcmd("volume ls", nil, "List volumes", true)
quiet := cmd.Bool([]string{"q", "-quiet"}, false, "Only display volume names")
flFilter := opts.NewListOpts(nil)
cmd.Var(&flFilter, []string{"f", "-filter"}, "Provide filter values (i.e. 'dangling=true')")
cmd.Require(flag.Exact, 0)
cmd.ParseFlags(args, true)
volFilterArgs := filters.Args{}
for _, f := range flFilter.GetAll() {
var err error
volFilterArgs, err = filters.ParseFlag(f, volFilterArgs)
if err != nil {
return err
}
}
v := url.Values{}
if len(volFilterArgs) > 0 {
filterJSON, err := filters.ToParam(volFilterArgs)
if err != nil {
return err
}
v.Set("filters", filterJSON)
}
resp, err := cli.call("GET", "/volumes?"+v.Encode(), nil, nil)
if err != nil {
return err
}
var volumes types.VolumesListResponse
if err := json.NewDecoder(resp.body).Decode(&volumes); err != nil {
return err
}
w := tabwriter.NewWriter(cli.out, 20, 1, 3, ' ', 0)
if !*quiet {
fmt.Fprintf(w, "DRIVER \tVOLUME NAME")
fmt.Fprintf(w, "\n")
}
for _, vol := range volumes.Volumes {
if *quiet {
fmt.Fprintln(w, vol.Name)
continue
}
fmt.Fprintf(w, "%s\t%s\n", vol.Driver, vol.Name)
}
w.Flush()
return nil
}
// CmdVolumeInspect displays low-level information on one or more volumes.
//
// Usage: docker volume inspect [OPTIONS] VOLUME [VOLUME...]
func (cli *DockerCli) CmdVolumeInspect(args ...string) error {
cmd := Cli.Subcmd("volume inspect", []string{"[VOLUME NAME]"}, "Return low-level information on a volume", true)
tmplStr := cmd.String([]string{"f", "-format"}, "", "Format the output using the given go template.")
if err := cmd.Parse(args); err != nil {
return nil
}
cmd.Require(flag.Min, 1)
cmd.ParseFlags(args, true)
var tmpl *template.Template
if *tmplStr != "" {
var err error
tmpl, err = template.New("").Funcs(funcMap).Parse(*tmplStr)
if err != nil {
return err
}
}
var status = 0
var volumes []*types.Volume
for _, name := range cmd.Args() {
resp, err := cli.call("GET", "/volumes/"+name, nil, nil)
if err != nil {
return err
}
var volume types.Volume
if err := json.NewDecoder(resp.body).Decode(&volume); err != nil {
fmt.Fprintf(cli.err, "%s\n", err)
status = 1
continue
}
if tmpl == nil {
volumes = append(volumes, &volume)
continue
}
if err := tmpl.Execute(cli.out, &volume); err != nil {
if err := tmpl.Execute(cli.out, &volume); err != nil {
fmt.Fprintf(cli.err, "%s\n", err)
status = 1
continue
}
}
io.WriteString(cli.out, "\n")
}
if tmpl != nil {
return nil
}
b, err := json.MarshalIndent(volumes, "", " ")
if err != nil {
return err
}
_, err = io.Copy(cli.out, bytes.NewReader(b))
if err != nil {
return err
}
io.WriteString(cli.out, "\n")
if status != 0 {
return Cli.StatusError{StatusCode: status}
}
return nil
}
// CmdVolumeCreate creates a new container from a given image.
//
// Usage: docker volume create [OPTIONS]
func (cli *DockerCli) CmdVolumeCreate(args ...string) error {
cmd := Cli.Subcmd("volume create", nil, "Create a volume", true)
flDriver := cmd.String([]string{"d", "-driver"}, "local", "Specify volume driver name")
flName := cmd.String([]string{"-name"}, "", "Specify volume name")
flDriverOpts := opts.NewMapOpts(nil, nil)
cmd.Var(flDriverOpts, []string{"o", "-opt"}, "Set driver specific options")
cmd.Require(flag.Exact, 0)
cmd.ParseFlags(args, true)
volReq := &types.VolumeCreateRequest{
Driver: *flDriver,
DriverOpts: flDriverOpts.GetAll(),
}
if *flName != "" {
volReq.Name = *flName
}
resp, err := cli.call("POST", "/volumes", volReq, nil)
if err != nil {
return err
}
var vol types.Volume
if err := json.NewDecoder(resp.body).Decode(&vol); err != nil {
return err
}
fmt.Fprintf(cli.out, "%s\n", vol.Name)
return nil
}
// CmdVolumeRm removes one or more containers.
//
// Usage: docker volume rm VOLUME [VOLUME...]
func (cli *DockerCli) CmdVolumeRm(args ...string) error {
cmd := Cli.Subcmd("volume rm", []string{"[NAME]"}, "Remove a volume", true)
cmd.Require(flag.Min, 1)
cmd.ParseFlags(args, true)
var status = 0
for _, name := range cmd.Args() {
_, err := cli.call("DELETE", "/volumes/"+name, nil, nil)
if err != nil {
fmt.Fprintf(cli.err, "%s\n", err)
status = 1
continue
}
fmt.Fprintf(cli.out, "%s\n", name)
}
if status != 0 {
return Cli.StatusError{StatusCode: status}
}
return nil
}
+17 -12
View File
@@ -16,22 +16,26 @@ import (
// Common constants for daemon and client.
const (
// Current REST API version
Version version.Version = "1.20"
// Version of Current REST API
Version version.Version = "1.21"
// Minimun REST API version supported
// MinVersion represents Minimun REST API version supported
MinVersion version.Version = "1.12"
// Default filename with Docker commands, read by docker build
// DefaultDockerfileName is the Default filename with Docker commands, read by docker build
DefaultDockerfileName string = "Dockerfile"
)
type ByPrivatePort []types.Port
// byPrivatePort is temporary type used to sort types.Port by PrivatePort
type byPrivatePort []types.Port
func (r ByPrivatePort) Len() int { return len(r) }
func (r ByPrivatePort) Swap(i, j int) { r[i], r[j] = r[j], r[i] }
func (r ByPrivatePort) Less(i, j int) bool { return r[i].PrivatePort < r[j].PrivatePort }
func (r byPrivatePort) Len() int { return len(r) }
func (r byPrivatePort) Swap(i, j int) { r[i], r[j] = r[j], r[i] }
func (r byPrivatePort) Less(i, j int) bool { return r[i].PrivatePort < r[j].PrivatePort }
// DisplayablePorts returns formatted string representing open ports of container
// e.g. "0.0.0.0:80->9090/tcp, 9988/tcp"
// it's used by command 'docker ps'
func DisplayablePorts(ports []types.Port) string {
var (
result = []string{}
@@ -41,7 +45,7 @@ func DisplayablePorts(ports []types.Port) string {
)
firstInGroupMap = make(map[string]int)
lastInGroupMap = make(map[string]int)
sort.Sort(ByPrivatePort(ports))
sort.Sort(byPrivatePort(ports))
for _, port := range ports {
var (
current = port.PrivatePort
@@ -69,18 +73,18 @@ func DisplayablePorts(ports []types.Port) string {
lastInGroupMap[portKey] = current
continue
}
result = append(result, FormGroup(portKey, firstInGroup, lastInGroup))
result = append(result, formGroup(portKey, firstInGroup, lastInGroup))
firstInGroupMap[portKey] = current
lastInGroupMap[portKey] = current
}
for portKey, firstInGroup := range firstInGroupMap {
result = append(result, FormGroup(portKey, firstInGroup, lastInGroupMap[portKey]))
result = append(result, formGroup(portKey, firstInGroup, lastInGroupMap[portKey]))
}
result = append(result, hostMappings...)
return strings.Join(result, ", ")
}
func FormGroup(key string, start, last int) string {
func formGroup(key string, start, last int) string {
var (
group string
parts = strings.Split(key, "/")
@@ -102,6 +106,7 @@ func FormGroup(key string, start, last int) string {
return fmt.Sprintf("%s/%s", group, groupType)
}
// MatchesContentType validates the content type against the expected one
func MatchesContentType(contentType, expectedType string) bool {
mimetype, _, err := mime.ParseMediaType(contentType)
if err != nil {
+282
View File
@@ -0,0 +1,282 @@
package api
import (
"io/ioutil"
"path/filepath"
"testing"
"github.com/docker/docker/api/types"
"os"
)
type ports struct {
ports []types.Port
expected string
}
// DisplayablePorts
func TestDisplayablePorts(t *testing.T) {
cases := []ports{
{
[]types.Port{
{
PrivatePort: 9988,
Type: "tcp",
},
},
"9988/tcp"},
{
[]types.Port{
{
PrivatePort: 9988,
Type: "udp",
},
},
"9988/udp",
},
{
[]types.Port{
{
IP: "0.0.0.0",
PrivatePort: 9988,
Type: "tcp",
},
},
"0.0.0.0:0->9988/tcp",
},
{
[]types.Port{
{
PrivatePort: 9988,
PublicPort: 8899,
Type: "tcp",
},
},
"9988/tcp",
},
{
[]types.Port{
{
IP: "4.3.2.1",
PrivatePort: 9988,
PublicPort: 8899,
Type: "tcp",
},
},
"4.3.2.1:8899->9988/tcp",
},
{
[]types.Port{
{
IP: "4.3.2.1",
PrivatePort: 9988,
PublicPort: 9988,
Type: "tcp",
},
},
"4.3.2.1:9988->9988/tcp",
},
{
[]types.Port{
{
PrivatePort: 9988,
Type: "udp",
}, {
PrivatePort: 9988,
Type: "udp",
},
},
"9988/udp, 9988/udp",
},
{
[]types.Port{
{
IP: "1.2.3.4",
PublicPort: 9998,
PrivatePort: 9998,
Type: "udp",
}, {
IP: "1.2.3.4",
PublicPort: 9999,
PrivatePort: 9999,
Type: "udp",
},
},
"1.2.3.4:9998-9999->9998-9999/udp",
},
{
[]types.Port{
{
IP: "1.2.3.4",
PublicPort: 8887,
PrivatePort: 9998,
Type: "udp",
}, {
IP: "1.2.3.4",
PublicPort: 8888,
PrivatePort: 9999,
Type: "udp",
},
},
"1.2.3.4:8887->9998/udp, 1.2.3.4:8888->9999/udp",
},
{
[]types.Port{
{
PrivatePort: 9998,
Type: "udp",
}, {
PrivatePort: 9999,
Type: "udp",
},
},
"9998-9999/udp",
},
{
[]types.Port{
{
IP: "1.2.3.4",
PrivatePort: 6677,
PublicPort: 7766,
Type: "tcp",
}, {
PrivatePort: 9988,
PublicPort: 8899,
Type: "udp",
},
},
"9988/udp, 1.2.3.4:7766->6677/tcp",
},
{
[]types.Port{
{
IP: "1.2.3.4",
PrivatePort: 9988,
PublicPort: 8899,
Type: "udp",
}, {
IP: "1.2.3.4",
PrivatePort: 9988,
PublicPort: 8899,
Type: "tcp",
}, {
IP: "4.3.2.1",
PrivatePort: 2233,
PublicPort: 3322,
Type: "tcp",
},
},
"4.3.2.1:3322->2233/tcp, 1.2.3.4:8899->9988/udp, 1.2.3.4:8899->9988/tcp",
},
{
[]types.Port{
{
PrivatePort: 9988,
PublicPort: 8899,
Type: "udp",
}, {
IP: "1.2.3.4",
PrivatePort: 6677,
PublicPort: 7766,
Type: "tcp",
}, {
IP: "4.3.2.1",
PrivatePort: 2233,
PublicPort: 3322,
Type: "tcp",
},
},
"9988/udp, 4.3.2.1:3322->2233/tcp, 1.2.3.4:7766->6677/tcp",
},
}
for _, port := range cases {
actual := DisplayablePorts(port.ports)
if port.expected != actual {
t.Fatalf("Expected %s, got %s.", port.expected, actual)
}
}
}
// MatchesContentType
func TestJsonContentType(t *testing.T) {
if !MatchesContentType("application/json", "application/json") {
t.Fail()
}
if !MatchesContentType("application/json; charset=utf-8", "application/json") {
t.Fail()
}
if MatchesContentType("dockerapplication/json", "application/json") {
t.Fail()
}
}
// LoadOrCreateTrustKey
func TestLoadOrCreateTrustKeyInvalidKeyFile(t *testing.T) {
tmpKeyFolderPath, err := ioutil.TempDir("", "api-trustkey-test")
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(tmpKeyFolderPath)
tmpKeyFile, err := ioutil.TempFile(tmpKeyFolderPath, "keyfile")
if err != nil {
t.Fatal(err)
}
if _, err := LoadOrCreateTrustKey(tmpKeyFile.Name()); err == nil {
t.Fatalf("expected an error, got nothing.")
}
}
func TestLoadOrCreateTrustKeyCreateKey(t *testing.T) {
tmpKeyFolderPath, err := ioutil.TempDir("", "api-trustkey-test")
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(tmpKeyFolderPath)
// Without the need to create the folder hierarchy
tmpKeyFile := filepath.Join(tmpKeyFolderPath, "keyfile")
if key, err := LoadOrCreateTrustKey(tmpKeyFile); err != nil || key == nil {
t.Fatalf("expected a new key file, got : %v and %v", err, key)
}
if _, err := os.Stat(tmpKeyFile); err != nil {
t.Fatalf("Expected to find a file %s, got %v", tmpKeyFile, err)
}
// With the need to create the folder hierarchy as tmpKeyFie is in a path
// where some folder do not exists.
tmpKeyFile = filepath.Join(tmpKeyFolderPath, "folder/hierarchy/keyfile")
if key, err := LoadOrCreateTrustKey(tmpKeyFile); err != nil || key == nil {
t.Fatalf("expected a new key file, got : %v and %v", err, key)
}
if _, err := os.Stat(tmpKeyFile); err != nil {
t.Fatalf("Expected to find a file %s, got %v", tmpKeyFile, err)
}
// With no path at all
defer os.Remove("keyfile")
if key, err := LoadOrCreateTrustKey("keyfile"); err != nil || key == nil {
t.Fatalf("expected a new key file, got : %v and %v", err, key)
}
if _, err := os.Stat("keyfile"); err != nil {
t.Fatalf("Expected to find a file keyfile, got %v", err)
}
}
func TestLoadOrCreateTrustKeyLoadValidKey(t *testing.T) {
tmpKeyFile := filepath.Join("fixtures", "keyfile")
if key, err := LoadOrCreateTrustKey(tmpKeyFile); err != nil || key == nil {
t.Fatalf("expected a key file, got : %v and %v", err, key)
}
}
+7
View File
@@ -0,0 +1,7 @@
-----BEGIN EC PRIVATE KEY-----
keyID: AWX2:I27X:WQFX:IOMK:CNAK:O7PW:VYNB:ZLKC:CVAE:YJP2:SI4A:XXAY
MHcCAQEEILHTRWdcpKWsnORxSFyBnndJ4ROU41hMtr/GCiLVvwBQoAoGCCqGSM49
AwEHoUQDQgAElpVFbQ2V2UQKajqdE3fVxJ+/pE/YuEFOxWbOxF2be19BY209/iky
NzeFFK7SLpQ4CBJ7zDVXOHsMzrkY/GquGA==
-----END EC PRIVATE KEY-----
+26
View File
@@ -0,0 +1,26 @@
package server
import (
"encoding/json"
"net/http"
"github.com/docker/docker/api/types"
"github.com/docker/docker/cliconfig"
"github.com/docker/docker/pkg/version"
)
func (s *Server) postAuth(version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
var config *cliconfig.AuthConfig
err := json.NewDecoder(r.Body).Decode(&config)
r.Body.Close()
if err != nil {
return err
}
status, err := s.daemon.RegistryService.Auth(config)
if err != nil {
return err
}
return writeJSON(w, http.StatusOK, &types.AuthResponse{
Status: status,
})
}
+535
View File
@@ -0,0 +1,535 @@
package server
import (
"fmt"
"io"
"net/http"
"runtime"
"strconv"
"strings"
"time"
"golang.org/x/net/websocket"
"github.com/Sirupsen/logrus"
"github.com/docker/docker/api/types"
"github.com/docker/docker/daemon"
"github.com/docker/docker/pkg/ioutils"
"github.com/docker/docker/pkg/signal"
"github.com/docker/docker/pkg/version"
"github.com/docker/docker/runconfig"
)
func (s *Server) getContainersByName(version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if vars == nil {
return fmt.Errorf("Missing parameter")
}
if version.LessThan("1.20") && runtime.GOOS != "windows" {
return getContainersByNameDownlevel(w, s, vars["name"])
}
containerJSON, err := s.daemon.ContainerInspect(vars["name"])
if err != nil {
return err
}
return writeJSON(w, http.StatusOK, containerJSON)
}
func (s *Server) getContainersJSON(version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if err := parseForm(r); err != nil {
return err
}
config := &daemon.ContainersConfig{
All: boolValue(r, "all"),
Size: boolValue(r, "size"),
Since: r.Form.Get("since"),
Before: r.Form.Get("before"),
Filters: r.Form.Get("filters"),
}
if tmpLimit := r.Form.Get("limit"); tmpLimit != "" {
limit, err := strconv.Atoi(tmpLimit)
if err != nil {
return err
}
config.Limit = limit
}
containers, err := s.daemon.Containers(config)
if err != nil {
return err
}
return writeJSON(w, http.StatusOK, containers)
}
func (s *Server) getContainersStats(version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if err := parseForm(r); err != nil {
return err
}
if vars == nil {
return fmt.Errorf("Missing parameter")
}
stream := boolValueOrDefault(r, "stream", true)
var out io.Writer
if !stream {
w.Header().Set("Content-Type", "application/json")
out = w
} else {
out = ioutils.NewWriteFlusher(w)
}
var closeNotifier <-chan bool
if notifier, ok := w.(http.CloseNotifier); ok {
closeNotifier = notifier.CloseNotify()
}
config := &daemon.ContainerStatsConfig{
Stream: stream,
OutStream: out,
Stop: closeNotifier,
}
return s.daemon.ContainerStats(vars["name"], config)
}
func (s *Server) getContainersLogs(version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if err := parseForm(r); err != nil {
return err
}
if vars == nil {
return fmt.Errorf("Missing parameter")
}
// Validate args here, because we can't return not StatusOK after job.Run() call
stdout, stderr := boolValue(r, "stdout"), boolValue(r, "stderr")
if !(stdout || stderr) {
return fmt.Errorf("Bad parameters: you must choose at least one stream")
}
var since time.Time
if r.Form.Get("since") != "" {
s, err := strconv.ParseInt(r.Form.Get("since"), 10, 64)
if err != nil {
return err
}
since = time.Unix(s, 0)
}
var closeNotifier <-chan bool
if notifier, ok := w.(http.CloseNotifier); ok {
closeNotifier = notifier.CloseNotify()
}
c, err := s.daemon.Get(vars["name"])
if err != nil {
return err
}
outStream := ioutils.NewWriteFlusher(w)
// write an empty chunk of data (this is to ensure that the
// HTTP Response is sent immediately, even if the container has
// not yet produced any data)
outStream.Write(nil)
logsConfig := &daemon.ContainerLogsConfig{
Follow: boolValue(r, "follow"),
Timestamps: boolValue(r, "timestamps"),
Since: since,
Tail: r.Form.Get("tail"),
UseStdout: stdout,
UseStderr: stderr,
OutStream: outStream,
Stop: closeNotifier,
}
if err := s.daemon.ContainerLogs(c, logsConfig); err != nil {
fmt.Fprintf(w, "Error running logs job: %s\n", err)
}
return nil
}
func (s *Server) getContainersExport(version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if vars == nil {
return fmt.Errorf("Missing parameter")
}
return s.daemon.ContainerExport(vars["name"], w)
}
func (s *Server) postContainersStart(version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if vars == nil {
return fmt.Errorf("Missing parameter")
}
// If contentLength is -1, we can assumed chunked encoding
// or more technically that the length is unknown
// https://golang.org/src/pkg/net/http/request.go#L139
// net/http otherwise seems to swallow any headers related to chunked encoding
// including r.TransferEncoding
// allow a nil body for backwards compatibility
var hostConfig *runconfig.HostConfig
if r.Body != nil && (r.ContentLength > 0 || r.ContentLength == -1) {
if err := checkForJSON(r); err != nil {
return err
}
c, err := runconfig.DecodeHostConfig(r.Body)
if err != nil {
return err
}
hostConfig = c
}
if err := s.daemon.ContainerStart(vars["name"], hostConfig); err != nil {
if err.Error() == "Container already started" {
w.WriteHeader(http.StatusNotModified)
return nil
}
return err
}
w.WriteHeader(http.StatusNoContent)
return nil
}
func (s *Server) postContainersStop(version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if err := parseForm(r); err != nil {
return err
}
if vars == nil {
return fmt.Errorf("Missing parameter")
}
seconds, _ := strconv.Atoi(r.Form.Get("t"))
if err := s.daemon.ContainerStop(vars["name"], seconds); err != nil {
if err.Error() == "Container already stopped" {
w.WriteHeader(http.StatusNotModified)
return nil
}
return err
}
w.WriteHeader(http.StatusNoContent)
return nil
}
func (s *Server) postContainersKill(version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if vars == nil {
return fmt.Errorf("Missing parameter")
}
if err := parseForm(r); err != nil {
return err
}
var sig uint64
name := vars["name"]
// If we have a signal, look at it. Otherwise, do nothing
if sigStr := r.Form.Get("signal"); sigStr != "" {
// Check if we passed the signal as a number:
// The largest legal signal is 31, so let's parse on 5 bits
sigN, err := strconv.ParseUint(sigStr, 10, 5)
if err != nil {
// The signal is not a number, treat it as a string (either like
// "KILL" or like "SIGKILL")
syscallSig, ok := signal.SignalMap[strings.TrimPrefix(sigStr, "SIG")]
if !ok {
return fmt.Errorf("Invalid signal: %s", sigStr)
}
sig = uint64(syscallSig)
} else {
sig = sigN
}
if sig == 0 {
return fmt.Errorf("Invalid signal: %s", sigStr)
}
}
if err := s.daemon.ContainerKill(name, sig); err != nil {
_, isStopped := err.(daemon.ErrContainerNotRunning)
// Return error that's not caused because the container is stopped.
// Return error if the container is not running and the api is >= 1.20
// to keep backwards compatibility.
if version.GreaterThanOrEqualTo("1.20") || !isStopped {
return fmt.Errorf("Cannot kill container %s: %v", name, err)
}
}
w.WriteHeader(http.StatusNoContent)
return nil
}
func (s *Server) postContainersRestart(version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if err := parseForm(r); err != nil {
return err
}
if vars == nil {
return fmt.Errorf("Missing parameter")
}
timeout, _ := strconv.Atoi(r.Form.Get("t"))
if err := s.daemon.ContainerRestart(vars["name"], timeout); err != nil {
return err
}
w.WriteHeader(http.StatusNoContent)
return nil
}
func (s *Server) postContainersPause(version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if vars == nil {
return fmt.Errorf("Missing parameter")
}
if err := parseForm(r); err != nil {
return err
}
if err := s.daemon.ContainerPause(vars["name"]); err != nil {
return err
}
w.WriteHeader(http.StatusNoContent)
return nil
}
func (s *Server) postContainersUnpause(version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if vars == nil {
return fmt.Errorf("Missing parameter")
}
if err := parseForm(r); err != nil {
return err
}
if err := s.daemon.ContainerUnpause(vars["name"]); err != nil {
return err
}
w.WriteHeader(http.StatusNoContent)
return nil
}
func (s *Server) postContainersWait(version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if vars == nil {
return fmt.Errorf("Missing parameter")
}
status, err := s.daemon.ContainerWait(vars["name"], -1*time.Second)
if err != nil {
return err
}
return writeJSON(w, http.StatusOK, &types.ContainerWaitResponse{
StatusCode: status,
})
}
func (s *Server) getContainersChanges(version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if vars == nil {
return fmt.Errorf("Missing parameter")
}
changes, err := s.daemon.ContainerChanges(vars["name"])
if err != nil {
return err
}
return writeJSON(w, http.StatusOK, changes)
}
func (s *Server) getContainersTop(version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if vars == nil {
return fmt.Errorf("Missing parameter")
}
if err := parseForm(r); err != nil {
return err
}
procList, err := s.daemon.ContainerTop(vars["name"], r.Form.Get("ps_args"))
if err != nil {
return err
}
return writeJSON(w, http.StatusOK, procList)
}
func (s *Server) postContainerRename(version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if err := parseForm(r); err != nil {
return err
}
if vars == nil {
return fmt.Errorf("Missing parameter")
}
name := vars["name"]
newName := r.Form.Get("name")
if err := s.daemon.ContainerRename(name, newName); err != nil {
return err
}
w.WriteHeader(http.StatusNoContent)
return nil
}
func (s *Server) postContainersCreate(version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if err := parseForm(r); err != nil {
return err
}
if err := checkForJSON(r); err != nil {
return err
}
var (
warnings []string
name = r.Form.Get("name")
)
config, hostConfig, err := runconfig.DecodeContainerConfig(r.Body)
if err != nil {
return err
}
adjustCPUShares := version.LessThan("1.19")
container, warnings, err := s.daemon.ContainerCreate(name, config, hostConfig, adjustCPUShares)
if err != nil {
return err
}
return writeJSON(w, http.StatusCreated, &types.ContainerCreateResponse{
ID: container.ID,
Warnings: warnings,
})
}
func (s *Server) deleteContainers(version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if err := parseForm(r); err != nil {
return err
}
if vars == nil {
return fmt.Errorf("Missing parameter")
}
name := vars["name"]
config := &daemon.ContainerRmConfig{
ForceRemove: boolValue(r, "force"),
RemoveVolume: boolValue(r, "v"),
RemoveLink: boolValue(r, "link"),
}
if err := s.daemon.ContainerRm(name, config); err != nil {
// Force a 404 for the empty string
if strings.Contains(strings.ToLower(err.Error()), "prefix can't be empty") {
return fmt.Errorf("no such id: \"\"")
}
return err
}
w.WriteHeader(http.StatusNoContent)
return nil
}
func (s *Server) postContainersResize(version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if err := parseForm(r); err != nil {
return err
}
if vars == nil {
return fmt.Errorf("Missing parameter")
}
height, err := strconv.Atoi(r.Form.Get("h"))
if err != nil {
return err
}
width, err := strconv.Atoi(r.Form.Get("w"))
if err != nil {
return err
}
return s.daemon.ContainerResize(vars["name"], height, width)
}
func (s *Server) postContainersAttach(version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if err := parseForm(r); err != nil {
return err
}
if vars == nil {
return fmt.Errorf("Missing parameter")
}
cont, err := s.daemon.Get(vars["name"])
if err != nil {
return err
}
inStream, outStream, err := hijackServer(w)
if err != nil {
return err
}
defer closeStreams(inStream, outStream)
if _, ok := r.Header["Upgrade"]; ok {
fmt.Fprintf(outStream, "HTTP/1.1 101 UPGRADED\r\nContent-Type: application/vnd.docker.raw-stream\r\nConnection: Upgrade\r\nUpgrade: tcp\r\n\r\n")
} else {
fmt.Fprintf(outStream, "HTTP/1.1 200 OK\r\nContent-Type: application/vnd.docker.raw-stream\r\n\r\n")
}
attachWithLogsConfig := &daemon.ContainerAttachWithLogsConfig{
InStream: inStream,
OutStream: outStream,
UseStdin: boolValue(r, "stdin"),
UseStdout: boolValue(r, "stdout"),
UseStderr: boolValue(r, "stderr"),
Logs: boolValue(r, "logs"),
Stream: boolValue(r, "stream"),
}
if err := s.daemon.ContainerAttachWithLogs(cont, attachWithLogsConfig); err != nil {
fmt.Fprintf(outStream, "Error attaching: %s\n", err)
}
return nil
}
func (s *Server) wsContainersAttach(version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if err := parseForm(r); err != nil {
return err
}
if vars == nil {
return fmt.Errorf("Missing parameter")
}
cont, err := s.daemon.Get(vars["name"])
if err != nil {
return err
}
h := websocket.Handler(func(ws *websocket.Conn) {
defer ws.Close()
wsAttachWithLogsConfig := &daemon.ContainerWsAttachWithLogsConfig{
InStream: ws,
OutStream: ws,
ErrStream: ws,
Logs: boolValue(r, "logs"),
Stream: boolValue(r, "stream"),
}
if err := s.daemon.ContainerWsAttachWithLogs(cont, wsAttachWithLogsConfig); err != nil {
logrus.Errorf("Error attaching websocket: %s", err)
}
})
ws := websocket.Server{Handler: h, Handshake: nil}
ws.ServeHTTP(w, r)
return nil
}
+115
View File
@@ -0,0 +1,115 @@
package server
import (
"encoding/base64"
"encoding/json"
"fmt"
"io"
"net/http"
"os"
"strings"
"github.com/docker/docker/api/types"
"github.com/docker/docker/pkg/version"
)
// postContainersCopy is deprecated in favor of getContainersArchive.
func (s *Server) postContainersCopy(version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if vars == nil {
return fmt.Errorf("Missing parameter")
}
if err := checkForJSON(r); err != nil {
return err
}
cfg := types.CopyConfig{}
if err := json.NewDecoder(r.Body).Decode(&cfg); err != nil {
return err
}
if cfg.Resource == "" {
return fmt.Errorf("Path cannot be empty")
}
data, err := s.daemon.ContainerCopy(vars["name"], cfg.Resource)
if err != nil {
if strings.Contains(strings.ToLower(err.Error()), "no such id") {
w.WriteHeader(http.StatusNotFound)
return nil
}
if os.IsNotExist(err) {
return fmt.Errorf("Could not find the file %s in container %s", cfg.Resource, vars["name"])
}
return err
}
defer data.Close()
w.Header().Set("Content-Type", "application/x-tar")
if _, err := io.Copy(w, data); err != nil {
return err
}
return nil
}
// // Encode the stat to JSON, base64 encode, and place in a header.
func setContainerPathStatHeader(stat *types.ContainerPathStat, header http.Header) error {
statJSON, err := json.Marshal(stat)
if err != nil {
return err
}
header.Set(
"X-Docker-Container-Path-Stat",
base64.StdEncoding.EncodeToString(statJSON),
)
return nil
}
func (s *Server) headContainersArchive(version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
v, err := archiveFormValues(r, vars)
if err != nil {
return err
}
stat, err := s.daemon.ContainerStatPath(v.name, v.path)
if err != nil {
return err
}
return setContainerPathStatHeader(stat, w.Header())
}
func (s *Server) getContainersArchive(version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
v, err := archiveFormValues(r, vars)
if err != nil {
return err
}
tarArchive, stat, err := s.daemon.ContainerArchivePath(v.name, v.path)
if err != nil {
return err
}
defer tarArchive.Close()
if err := setContainerPathStatHeader(stat, w.Header()); err != nil {
return err
}
w.Header().Set("Content-Type", "application/x-tar")
_, err = io.Copy(w, tarArchive)
return err
}
func (s *Server) putContainersArchive(version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
v, err := archiveFormValues(r, vars)
if err != nil {
return err
}
noOverwriteDirNonDir := boolValue(r, "noOverwriteDirNonDir")
return s.daemon.ContainerExtractToDir(v.name, v.path, noOverwriteDirNonDir, r.Body)
}
+174
View File
@@ -0,0 +1,174 @@
package server
import (
"encoding/json"
"net/http"
"runtime"
"strconv"
"strings"
"time"
"github.com/Sirupsen/logrus"
"github.com/docker/docker/api"
"github.com/docker/docker/api/types"
"github.com/docker/docker/autogen/dockerversion"
"github.com/docker/docker/pkg/ioutils"
"github.com/docker/docker/pkg/jsonmessage"
"github.com/docker/docker/pkg/parsers/filters"
"github.com/docker/docker/pkg/parsers/kernel"
"github.com/docker/docker/pkg/version"
"github.com/docker/docker/utils"
)
func (s *Server) getVersion(version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
v := &types.Version{
Version: dockerversion.VERSION,
APIVersion: api.Version,
GitCommit: dockerversion.GITCOMMIT,
GoVersion: runtime.Version(),
Os: runtime.GOOS,
Arch: runtime.GOARCH,
BuildTime: dockerversion.BUILDTIME,
}
if version.GreaterThanOrEqualTo("1.19") {
v.Experimental = utils.ExperimentalBuild()
}
if kernelVersion, err := kernel.GetKernelVersion(); err == nil {
v.KernelVersion = kernelVersion.String()
}
return writeJSON(w, http.StatusOK, v)
}
func (s *Server) getInfo(version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
info, err := s.daemon.SystemInfo()
if err != nil {
return err
}
return writeJSON(w, http.StatusOK, info)
}
func (s *Server) getEvents(version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if err := parseForm(r); err != nil {
return err
}
var since int64 = -1
if r.Form.Get("since") != "" {
s, err := strconv.ParseInt(r.Form.Get("since"), 10, 64)
if err != nil {
return err
}
since = s
}
var until int64 = -1
if r.Form.Get("until") != "" {
u, err := strconv.ParseInt(r.Form.Get("until"), 10, 64)
if err != nil {
return err
}
until = u
}
timer := time.NewTimer(0)
timer.Stop()
if until > 0 {
dur := time.Unix(until, 0).Sub(time.Now())
timer = time.NewTimer(dur)
}
ef, err := filters.FromParam(r.Form.Get("filters"))
if err != nil {
return err
}
isFiltered := func(field string, filter []string) bool {
if len(field) == 0 {
return false
}
if len(filter) == 0 {
return false
}
for _, v := range filter {
if v == field {
return false
}
if strings.Contains(field, ":") {
image := strings.Split(field, ":")
if image[0] == v {
return false
}
}
}
return true
}
d := s.daemon
es := d.EventsService
w.Header().Set("Content-Type", "application/json")
outStream := ioutils.NewWriteFlusher(w)
outStream.Write(nil) // make sure response is sent immediately
enc := json.NewEncoder(outStream)
getContainerID := func(cn string) string {
c, err := d.Get(cn)
if err != nil {
return ""
}
return c.ID
}
sendEvent := func(ev *jsonmessage.JSONMessage) error {
//incoming container filter can be name,id or partial id, convert and replace as a full container id
for i, cn := range ef["container"] {
ef["container"][i] = getContainerID(cn)
}
if isFiltered(ev.Status, ef["event"]) || (isFiltered(ev.ID, ef["image"]) &&
isFiltered(ev.From, ef["image"])) || isFiltered(ev.ID, ef["container"]) {
return nil
}
return enc.Encode(ev)
}
current, l := es.Subscribe()
if since == -1 {
current = nil
}
defer es.Evict(l)
for _, ev := range current {
if ev.Time < since {
continue
}
if err := sendEvent(ev); err != nil {
return err
}
}
var closeNotify <-chan bool
if closeNotifier, ok := w.(http.CloseNotifier); ok {
closeNotify = closeNotifier.CloseNotify()
}
for {
select {
case ev := <-l:
jev, ok := ev.(*jsonmessage.JSONMessage)
if !ok {
continue
}
if err := sendEvent(jev); err != nil {
return err
}
case <-timer.C:
return nil
case <-closeNotify:
logrus.Debug("Client disconnected, stop sending events")
return nil
}
}
}
+127
View File
@@ -0,0 +1,127 @@
package server
import (
"encoding/json"
"fmt"
"io"
"net/http"
"strconv"
"github.com/Sirupsen/logrus"
"github.com/docker/docker/api/types"
"github.com/docker/docker/pkg/stdcopy"
"github.com/docker/docker/pkg/version"
"github.com/docker/docker/runconfig"
)
func (s *Server) getExecByID(version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if vars == nil {
return fmt.Errorf("Missing parameter 'id'")
}
eConfig, err := s.daemon.ContainerExecInspect(vars["id"])
if err != nil {
return err
}
return writeJSON(w, http.StatusOK, eConfig)
}
func (s *Server) postContainerExecCreate(version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if err := parseForm(r); err != nil {
return err
}
if err := checkForJSON(r); err != nil {
return err
}
name := vars["name"]
execConfig := &runconfig.ExecConfig{}
if err := json.NewDecoder(r.Body).Decode(execConfig); err != nil {
return err
}
execConfig.Container = name
if len(execConfig.Cmd) == 0 {
return fmt.Errorf("No exec command specified")
}
// Register an instance of Exec in container.
id, err := s.daemon.ContainerExecCreate(execConfig)
if err != nil {
logrus.Errorf("Error setting up exec command in container %s: %s", name, err)
return err
}
return writeJSON(w, http.StatusCreated, &types.ContainerExecCreateResponse{
ID: id,
})
}
// TODO(vishh): Refactor the code to avoid having to specify stream config as part of both create and start.
func (s *Server) postContainerExecStart(version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if err := parseForm(r); err != nil {
return err
}
var (
execName = vars["name"]
stdin, inStream io.ReadCloser
stdout, stderr, outStream io.Writer
)
execStartCheck := &types.ExecStartCheck{}
if err := json.NewDecoder(r.Body).Decode(execStartCheck); err != nil {
return err
}
if !execStartCheck.Detach {
var err error
// Setting up the streaming http interface.
inStream, outStream, err = hijackServer(w)
if err != nil {
return err
}
defer closeStreams(inStream, outStream)
if _, ok := r.Header["Upgrade"]; ok {
fmt.Fprintf(outStream, "HTTP/1.1 101 UPGRADED\r\nContent-Type: application/vnd.docker.raw-stream\r\nConnection: Upgrade\r\nUpgrade: tcp\r\n\r\n")
} else {
fmt.Fprintf(outStream, "HTTP/1.1 200 OK\r\nContent-Type: application/vnd.docker.raw-stream\r\n\r\n")
}
stdin = inStream
stdout = outStream
if !execStartCheck.Tty {
stderr = stdcopy.NewStdWriter(outStream, stdcopy.Stderr)
stdout = stdcopy.NewStdWriter(outStream, stdcopy.Stdout)
}
} else {
outStream = w
}
// Now run the user process in container.
if err := s.daemon.ContainerExecStart(execName, stdin, stdout, stderr); err != nil {
fmt.Fprintf(outStream, "Error running exec in container: %v\n", err)
}
return nil
}
func (s *Server) postContainerExecResize(version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if err := parseForm(r); err != nil {
return err
}
if vars == nil {
return fmt.Errorf("Missing parameter")
}
height, err := strconv.Atoi(r.Form.Get("h"))
if err != nil {
return err
}
width, err := strconv.Atoi(r.Form.Get("w"))
if err != nil {
return err
}
return s.daemon.ContainerExecResize(vars["name"], height, width)
}
+2 -1
View File
@@ -3,6 +3,7 @@ package server
import (
"fmt"
"net/http"
"path/filepath"
"strconv"
"strings"
)
@@ -43,7 +44,7 @@ func archiveFormValues(r *http.Request, vars map[string]string) (archiveOptions,
}
name := vars["name"]
path := r.Form.Get("path")
path := filepath.FromSlash(r.Form.Get("path"))
switch {
case name == "":
+425
View File
@@ -0,0 +1,425 @@
package server
import (
"encoding/base64"
"encoding/json"
"fmt"
"io"
"net/http"
"strings"
"github.com/Sirupsen/logrus"
"github.com/docker/docker/api/types"
"github.com/docker/docker/builder"
"github.com/docker/docker/cliconfig"
"github.com/docker/docker/graph"
"github.com/docker/docker/pkg/ioutils"
"github.com/docker/docker/pkg/parsers"
"github.com/docker/docker/pkg/streamformatter"
"github.com/docker/docker/pkg/ulimit"
"github.com/docker/docker/pkg/version"
"github.com/docker/docker/runconfig"
"github.com/docker/docker/utils"
)
func (s *Server) postCommit(version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if err := parseForm(r); err != nil {
return err
}
if err := checkForJSON(r); err != nil {
return err
}
cname := r.Form.Get("container")
pause := boolValue(r, "pause")
if r.FormValue("pause") == "" && version.GreaterThanOrEqualTo("1.13") {
pause = true
}
c, _, err := runconfig.DecodeContainerConfig(r.Body)
if err != nil && err != io.EOF { //Do not fail if body is empty.
return err
}
commitCfg := &builder.CommitConfig{
Pause: pause,
Repo: r.Form.Get("repo"),
Tag: r.Form.Get("tag"),
Author: r.Form.Get("author"),
Comment: r.Form.Get("comment"),
Changes: r.Form["changes"],
Config: c,
}
imgID, err := builder.Commit(cname, s.daemon, commitCfg)
if err != nil {
return err
}
return writeJSON(w, http.StatusCreated, &types.ContainerCommitResponse{
ID: imgID,
})
}
// Creates an image from Pull or from Import
func (s *Server) postImagesCreate(version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if err := parseForm(r); err != nil {
return err
}
var (
image = r.Form.Get("fromImage")
repo = r.Form.Get("repo")
tag = r.Form.Get("tag")
message = r.Form.Get("message")
)
authEncoded := r.Header.Get("X-Registry-Auth")
authConfig := &cliconfig.AuthConfig{}
if authEncoded != "" {
authJSON := base64.NewDecoder(base64.URLEncoding, strings.NewReader(authEncoded))
if err := json.NewDecoder(authJSON).Decode(authConfig); err != nil {
// for a pull it is not an error if no auth was given
// to increase compatibility with the existing api it is defaulting to be empty
authConfig = &cliconfig.AuthConfig{}
}
}
var (
err error
output = ioutils.NewWriteFlusher(w)
)
w.Header().Set("Content-Type", "application/json")
if image != "" { //pull
if tag == "" {
image, tag = parsers.ParseRepositoryTag(image)
}
metaHeaders := map[string][]string{}
for k, v := range r.Header {
if strings.HasPrefix(k, "X-Meta-") {
metaHeaders[k] = v
}
}
imagePullConfig := &graph.ImagePullConfig{
MetaHeaders: metaHeaders,
AuthConfig: authConfig,
OutStream: output,
}
err = s.daemon.Repositories().Pull(image, tag, imagePullConfig)
} else { //import
if tag == "" {
repo, tag = parsers.ParseRepositoryTag(repo)
}
src := r.Form.Get("fromSrc")
// 'err' MUST NOT be defined within this block, we need any error
// generated from the download to be available to the output
// stream processing below
var newConfig *runconfig.Config
newConfig, err = builder.BuildFromConfig(s.daemon, &runconfig.Config{}, r.Form["changes"])
if err != nil {
return err
}
err = s.daemon.Repositories().Import(src, repo, tag, message, r.Body, output, newConfig)
}
if err != nil {
if !output.Flushed() {
return err
}
sf := streamformatter.NewJSONStreamFormatter()
output.Write(sf.FormatError(err))
}
return nil
}
func (s *Server) postImagesPush(version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if vars == nil {
return fmt.Errorf("Missing parameter")
}
metaHeaders := map[string][]string{}
for k, v := range r.Header {
if strings.HasPrefix(k, "X-Meta-") {
metaHeaders[k] = v
}
}
if err := parseForm(r); err != nil {
return err
}
authConfig := &cliconfig.AuthConfig{}
authEncoded := r.Header.Get("X-Registry-Auth")
if authEncoded != "" {
// the new format is to handle the authConfig as a header
authJSON := base64.NewDecoder(base64.URLEncoding, strings.NewReader(authEncoded))
if err := json.NewDecoder(authJSON).Decode(authConfig); err != nil {
// to increase compatibility to existing api it is defaulting to be empty
authConfig = &cliconfig.AuthConfig{}
}
} else {
// the old format is supported for compatibility if there was no authConfig header
if err := json.NewDecoder(r.Body).Decode(authConfig); err != nil {
return fmt.Errorf("Bad parameters and missing X-Registry-Auth: %v", err)
}
}
name := vars["name"]
output := ioutils.NewWriteFlusher(w)
imagePushConfig := &graph.ImagePushConfig{
MetaHeaders: metaHeaders,
AuthConfig: authConfig,
Tag: r.Form.Get("tag"),
OutStream: output,
}
w.Header().Set("Content-Type", "application/json")
if err := s.daemon.Repositories().Push(name, imagePushConfig); err != nil {
if !output.Flushed() {
return err
}
sf := streamformatter.NewJSONStreamFormatter()
output.Write(sf.FormatError(err))
}
return nil
}
func (s *Server) getImagesGet(version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if vars == nil {
return fmt.Errorf("Missing parameter")
}
if err := parseForm(r); err != nil {
return err
}
w.Header().Set("Content-Type", "application/x-tar")
output := ioutils.NewWriteFlusher(w)
var names []string
if name, ok := vars["name"]; ok {
names = []string{name}
} else {
names = r.Form["names"]
}
if err := s.daemon.Repositories().ImageExport(names, output); err != nil {
if !output.Flushed() {
return err
}
sf := streamformatter.NewJSONStreamFormatter()
output.Write(sf.FormatError(err))
}
return nil
}
func (s *Server) postImagesLoad(version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
return s.daemon.Repositories().Load(r.Body, w)
}
func (s *Server) deleteImages(version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if err := parseForm(r); err != nil {
return err
}
if vars == nil {
return fmt.Errorf("Missing parameter")
}
name := vars["name"]
if name == "" {
return fmt.Errorf("image name cannot be blank")
}
force := boolValue(r, "force")
prune := !boolValue(r, "noprune")
list, err := s.daemon.ImageDelete(name, force, prune)
if err != nil {
return err
}
return writeJSON(w, http.StatusOK, list)
}
func (s *Server) getImagesByName(version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if vars == nil {
return fmt.Errorf("Missing parameter")
}
imageInspect, err := s.daemon.Repositories().Lookup(vars["name"])
if err != nil {
return err
}
return writeJSON(w, http.StatusOK, imageInspect)
}
func (s *Server) postBuild(version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
var (
authConfigs = map[string]cliconfig.AuthConfig{}
authConfigsEncoded = r.Header.Get("X-Registry-Config")
buildConfig = builder.NewBuildConfig()
)
if authConfigsEncoded != "" {
authConfigsJSON := base64.NewDecoder(base64.URLEncoding, strings.NewReader(authConfigsEncoded))
if err := json.NewDecoder(authConfigsJSON).Decode(&authConfigs); err != nil {
// for a pull it is not an error if no auth was given
// to increase compatibility with the existing api it is defaulting
// to be empty.
}
}
w.Header().Set("Content-Type", "application/json")
if boolValue(r, "forcerm") && version.GreaterThanOrEqualTo("1.12") {
buildConfig.Remove = true
} else if r.FormValue("rm") == "" && version.GreaterThanOrEqualTo("1.12") {
buildConfig.Remove = true
} else {
buildConfig.Remove = boolValue(r, "rm")
}
if boolValue(r, "pull") && version.GreaterThanOrEqualTo("1.16") {
buildConfig.Pull = true
}
output := ioutils.NewWriteFlusher(w)
buildConfig.Stdout = output
buildConfig.Context = r.Body
buildConfig.RemoteURL = r.FormValue("remote")
buildConfig.DockerfileName = r.FormValue("dockerfile")
buildConfig.RepoName = r.FormValue("t")
buildConfig.SuppressOutput = boolValue(r, "q")
buildConfig.NoCache = boolValue(r, "nocache")
buildConfig.ForceRemove = boolValue(r, "forcerm")
buildConfig.AuthConfigs = authConfigs
buildConfig.MemorySwap = int64ValueOrZero(r, "memswap")
buildConfig.Memory = int64ValueOrZero(r, "memory")
buildConfig.CPUShares = int64ValueOrZero(r, "cpushares")
buildConfig.CPUPeriod = int64ValueOrZero(r, "cpuperiod")
buildConfig.CPUQuota = int64ValueOrZero(r, "cpuquota")
buildConfig.CPUSetCpus = r.FormValue("cpusetcpus")
buildConfig.CPUSetMems = r.FormValue("cpusetmems")
buildConfig.CgroupParent = r.FormValue("cgroupparent")
var buildUlimits = []*ulimit.Ulimit{}
ulimitsJSON := r.FormValue("ulimits")
if ulimitsJSON != "" {
if err := json.NewDecoder(strings.NewReader(ulimitsJSON)).Decode(&buildUlimits); err != nil {
return err
}
buildConfig.Ulimits = buildUlimits
}
// Job cancellation. Note: not all job types support this.
if closeNotifier, ok := w.(http.CloseNotifier); ok {
finished := make(chan struct{})
defer close(finished)
go func() {
select {
case <-finished:
case <-closeNotifier.CloseNotify():
logrus.Infof("Client disconnected, cancelling job: build")
buildConfig.Cancel()
}
}()
}
if err := builder.Build(s.daemon, buildConfig); err != nil {
// Do not write the error in the http output if it's still empty.
// This prevents from writing a 200(OK) when there is an interal error.
if !output.Flushed() {
return err
}
sf := streamformatter.NewJSONStreamFormatter()
w.Write(sf.FormatError(err))
}
return nil
}
func (s *Server) getImagesJSON(version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if err := parseForm(r); err != nil {
return err
}
// FIXME: The filter parameter could just be a match filter
images, err := s.daemon.Repositories().Images(r.Form.Get("filters"), r.Form.Get("filter"), boolValue(r, "all"))
if err != nil {
return err
}
return writeJSON(w, http.StatusOK, images)
}
func (s *Server) getImagesHistory(version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if vars == nil {
return fmt.Errorf("Missing parameter")
}
name := vars["name"]
history, err := s.daemon.Repositories().History(name)
if err != nil {
return err
}
return writeJSON(w, http.StatusOK, history)
}
func (s *Server) postImagesTag(version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if err := parseForm(r); err != nil {
return err
}
if vars == nil {
return fmt.Errorf("Missing parameter")
}
repo := r.Form.Get("repo")
tag := r.Form.Get("tag")
force := boolValue(r, "force")
name := vars["name"]
if err := s.daemon.Repositories().Tag(repo, tag, name, force); err != nil {
return err
}
s.daemon.EventsService.Log("tag", utils.ImageReference(repo, tag), "")
w.WriteHeader(http.StatusCreated)
return nil
}
func (s *Server) getImagesSearch(version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if err := parseForm(r); err != nil {
return err
}
var (
config *cliconfig.AuthConfig
authEncoded = r.Header.Get("X-Registry-Auth")
headers = map[string][]string{}
)
if authEncoded != "" {
authJSON := base64.NewDecoder(base64.URLEncoding, strings.NewReader(authEncoded))
if err := json.NewDecoder(authJSON).Decode(&config); err != nil {
// for a search it is not an error if no auth was given
// to increase compatibility with the existing api it is defaulting to be empty
config = &cliconfig.AuthConfig{}
}
}
for k, v := range r.Header {
if strings.HasPrefix(k, "X-Meta-") {
headers[k] = v
}
}
query, err := s.daemon.RegistryService.Search(r.Form.Get("term"), config, headers)
if err != nil {
return err
}
return writeJSON(w, http.StatusOK, query.Results)
}
+1 -1
View File
@@ -9,7 +9,7 @@ import (
"github.com/gorilla/mux"
)
func ProfilerSetup(mainRouter *mux.Router, path string) {
func profilerSetup(mainRouter *mux.Router, path string) {
var r = mainRouter.PathPrefix(path).Subrouter()
r.HandleFunc("/vars", expVars)
r.HandleFunc("/pprof/", pprof.Index)
+34 -1353
View File
File diff suppressed because it is too large Load Diff
@@ -1,9 +1,9 @@
// +build experimental
// +build experimental,!windows
package server
func (s *Server) registerSubRouter() {
httpHandler := s.daemon.NetworkApiRouter()
httpHandler := s.daemon.NetworkAPIRouter()
subrouter := s.router.PathPrefix("/v{version:[0-9.]+}/networks").Subrouter()
subrouter.Methods("GET", "POST", "PUT", "DELETE").HandlerFunc(httpHandler)
-68
View File
@@ -1,68 +0,0 @@
// +build linux
package server
import (
"testing"
"github.com/docker/docker/pkg/version"
"github.com/docker/docker/runconfig"
)
func TestAdjustCpuSharesOldApi(t *testing.T) {
apiVersion := version.Version("1.18")
hostConfig := &runconfig.HostConfig{
CpuShares: linuxMinCpuShares - 1,
}
adjustCpuShares(apiVersion, hostConfig)
if hostConfig.CpuShares != linuxMinCpuShares {
t.Errorf("Expected CpuShares to be %d", linuxMinCpuShares)
}
hostConfig.CpuShares = linuxMaxCpuShares + 1
adjustCpuShares(apiVersion, hostConfig)
if hostConfig.CpuShares != linuxMaxCpuShares {
t.Errorf("Expected CpuShares to be %d", linuxMaxCpuShares)
}
hostConfig.CpuShares = 0
adjustCpuShares(apiVersion, hostConfig)
if hostConfig.CpuShares != 0 {
t.Error("Expected CpuShares to be unchanged")
}
hostConfig.CpuShares = 1024
adjustCpuShares(apiVersion, hostConfig)
if hostConfig.CpuShares != 1024 {
t.Error("Expected CpuShares to be unchanged")
}
}
func TestAdjustCpuSharesNoAdjustment(t *testing.T) {
apiVersion := version.Version("1.19")
hostConfig := &runconfig.HostConfig{
CpuShares: linuxMinCpuShares - 1,
}
adjustCpuShares(apiVersion, hostConfig)
if hostConfig.CpuShares != linuxMinCpuShares-1 {
t.Errorf("Expected CpuShares to be %d", linuxMinCpuShares-1)
}
hostConfig.CpuShares = linuxMaxCpuShares + 1
adjustCpuShares(apiVersion, hostConfig)
if hostConfig.CpuShares != linuxMaxCpuShares+1 {
t.Errorf("Expected CpuShares to be %d", linuxMaxCpuShares+1)
}
hostConfig.CpuShares = 0
adjustCpuShares(apiVersion, hostConfig)
if hostConfig.CpuShares != 0 {
t.Error("Expected CpuShares to be unchanged")
}
hostConfig.CpuShares = 1024
adjustCpuShares(apiVersion, hostConfig)
if hostConfig.CpuShares != 1024 {
t.Error("Expected CpuShares to be unchanged")
}
}
+1 -1
View File
@@ -1,4 +1,4 @@
// +build !experimental
// +build !experimental windows
package server
@@ -1,4 +1,4 @@
// +build linux
// +build freebsd linux
package server
@@ -8,19 +8,12 @@ import (
"net/http"
"strconv"
"github.com/Sirupsen/logrus"
"github.com/docker/docker/daemon"
"github.com/docker/docker/pkg/sockets"
"github.com/docker/docker/pkg/systemd"
"github.com/docker/docker/pkg/version"
"github.com/docker/docker/runconfig"
"github.com/docker/libnetwork/portallocator"
)
const (
// See http://git.kernel.org/cgit/linux/kernel/git/tip/tip.git/tree/kernel/sched/sched.h?id=8cd9234c64c584432f6992fe944ca9e46ca8ea76#n269
linuxMinCpuShares = 2
linuxMaxCpuShares = 262144
systemdActivation "github.com/coreos/go-systemd/activation"
systemdDaemon "github.com/coreos/go-systemd/daemon"
)
// newServer sets up the required serverClosers and does protocol specific checking.
@@ -31,7 +24,7 @@ func (s *Server) newServer(proto, addr string) ([]serverCloser, error) {
)
switch proto {
case "fd":
ls, err = systemd.ListenFD(addr)
ls, err = listenFD(addr)
if err != nil {
return nil, err
}
@@ -40,7 +33,7 @@ func (s *Server) newServer(proto, addr string) ([]serverCloser, error) {
// won't be ready.
<-s.start
case "tcp":
l, err := s.initTcpSocket(addr)
l, err := s.initTCPSocket(addr)
if err != nil {
return nil, err
}
@@ -56,7 +49,7 @@ func (s *Server) newServer(proto, addr string) ([]serverCloser, error) {
}
var res []serverCloser
for _, l := range ls {
res = append(res, &HttpServer{
res = append(res, &HTTPServer{
&http.Server{
Addr: addr,
Handler: s.router,
@@ -67,11 +60,14 @@ func (s *Server) newServer(proto, addr string) ([]serverCloser, error) {
return res, nil
}
// AcceptConnections allows clients to connect to the API server.
// Referenced Daemon is notified about this server, and waits for the
// daemon acknowledgement before the incoming connections are accepted.
func (s *Server) AcceptConnections(d *daemon.Daemon) {
// Tell the init daemon we are accepting requests
s.daemon = d
s.registerSubRouter()
go systemd.SdNotify("READY=1")
go systemdDaemon.SdNotify("READY=1")
// close the lock so the listeners start accepting connections
select {
case <-s.start:
@@ -107,17 +103,43 @@ func allocateDaemonPort(addr string) error {
return nil
}
func adjustCpuShares(version version.Version, hostConfig *runconfig.HostConfig) {
if version.LessThan("1.19") {
if hostConfig != nil && hostConfig.CpuShares > 0 {
// Handle unsupported CpuShares
if hostConfig.CpuShares < linuxMinCpuShares {
logrus.Warnf("Changing requested CpuShares of %d to minimum allowed of %d", hostConfig.CpuShares, linuxMinCpuShares)
hostConfig.CpuShares = linuxMinCpuShares
} else if hostConfig.CpuShares > linuxMaxCpuShares {
logrus.Warnf("Changing requested CpuShares of %d to maximum allowed of %d", hostConfig.CpuShares, linuxMaxCpuShares)
hostConfig.CpuShares = linuxMaxCpuShares
}
}
// getContainersByNameDownlevel performs processing for pre 1.20 APIs. This
// is only relevant on non-Windows daemons.
func getContainersByNameDownlevel(w http.ResponseWriter, s *Server, namevar string) error {
containerJSONRaw, err := s.daemon.ContainerInspectPre120(namevar)
if err != nil {
return err
}
return writeJSON(w, http.StatusOK, containerJSONRaw)
}
// listenFD returns the specified socket activated files as a slice of
// net.Listeners or all of the activated files if "*" is given.
func listenFD(addr string) ([]net.Listener, error) {
// socket activation
listeners, err := systemdActivation.Listeners(false)
if err != nil {
return nil, err
}
if listeners == nil || len(listeners) == 0 {
return nil, fmt.Errorf("No sockets found")
}
// default to all fds just like unix:// and tcp://
if addr == "" {
addr = "*"
}
fdNum, _ := strconv.Atoi(addr)
fdOffset := fdNum - 3
if (addr != "*") && (len(listeners) < int(fdOffset)+1) {
return nil, fmt.Errorf("Too few socket activated files passed in")
}
if addr == "*" {
return listeners, nil
}
return []net.Listener{listeners[fdOffset]}, nil
}
+7 -5
View File
@@ -8,8 +8,6 @@ import (
"net/http"
"github.com/docker/docker/daemon"
"github.com/docker/docker/pkg/version"
"github.com/docker/docker/runconfig"
)
// NewServer sets up the required Server and does protocol specific checking.
@@ -19,7 +17,7 @@ func (s *Server) newServer(proto, addr string) ([]serverCloser, error) {
)
switch proto {
case "tcp":
l, err := s.initTcpSocket(addr)
l, err := s.initTCPSocket(addr)
if err != nil {
return nil, err
}
@@ -31,7 +29,7 @@ func (s *Server) newServer(proto, addr string) ([]serverCloser, error) {
var res []serverCloser
for _, l := range ls {
res = append(res, &HttpServer{
res = append(res, &HTTPServer{
&http.Server{
Addr: addr,
Handler: s.router,
@@ -43,6 +41,7 @@ func (s *Server) newServer(proto, addr string) ([]serverCloser, error) {
}
// AcceptConnections allows router to start listening for the incoming requests.
func (s *Server) AcceptConnections(d *daemon.Daemon) {
s.daemon = d
s.registerSubRouter()
@@ -58,5 +57,8 @@ func allocateDaemonPort(addr string) error {
return nil
}
func adjustCpuShares(version version.Version, hostConfig *runconfig.HostConfig) {
// getContainersByNameDownlevel performs processing for pre 1.20 APIs. This
// is only relevant on non-Windows daemons.
func getContainersByNameDownlevel(w http.ResponseWriter, s *Server, namevar string) error {
return nil
}
+65
View File
@@ -0,0 +1,65 @@
package server
import (
"encoding/json"
"net/http"
"github.com/docker/docker/api/types"
"github.com/docker/docker/pkg/version"
)
func (s *Server) getVolumesList(version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if err := parseForm(r); err != nil {
return err
}
volumes, err := s.daemon.Volumes(r.Form.Get("filters"))
if err != nil {
return err
}
return writeJSON(w, http.StatusOK, &types.VolumesListResponse{Volumes: volumes})
}
func (s *Server) getVolumeByName(version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if err := parseForm(r); err != nil {
return err
}
v, err := s.daemon.VolumeInspect(vars["name"])
if err != nil {
return err
}
return writeJSON(w, http.StatusOK, v)
}
func (s *Server) postVolumesCreate(version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if err := parseForm(r); err != nil {
return err
}
if err := checkForJSON(r); err != nil {
return err
}
var req types.VolumeCreateRequest
if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
return err
}
volume, err := s.daemon.VolumeCreate(req.Name, req.Driver, req.DriverOpts)
if err != nil {
return err
}
return writeJSON(w, http.StatusCreated, volume)
}
func (s *Server) deleteVolumes(version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if err := parseForm(r); err != nil {
return err
}
if err := s.daemon.VolumeRm(vars["name"]); err != nil {
return err
}
w.WriteHeader(http.StatusNoContent)
return nil
}
+21
View File
@@ -0,0 +1,21 @@
package types
import (
"net"
"net/url"
)
// IsTimeout takes an error returned from (generally) the http package and determines if it is a timeout error.
func IsTimeout(err error) bool {
switch e := err.(type) {
case net.Error:
return e.Timeout()
case *url.Error:
if t, ok := e.Err.(net.Error); ok {
return t.Timeout()
}
return false
default:
return false
}
}
+19 -12
View File
@@ -1,9 +1,10 @@
// This package is used for API stability in the types and response to the
// Package types is used for API stability in the types and response to the
// consumers of the API stats endpoint.
package types
import "time"
// ThrottlingData stores CPU throttling stats of one running container
type ThrottlingData struct {
// Number of periods with throttling active
Periods uint64 `json:"periods"`
@@ -13,8 +14,8 @@ type ThrottlingData struct {
ThrottledTime uint64 `json:"throttled_time"`
}
// All CPU stats are aggregated since container inception.
type CpuUsage struct {
// CPUUsage stores All CPU stats aggregated since container inception.
type CPUUsage struct {
// Total CPU time consumed.
// Units: nanoseconds.
TotalUsage uint64 `json:"total_usage"`
@@ -29,12 +30,14 @@ type CpuUsage struct {
UsageInUsermode uint64 `json:"usage_in_usermode"`
}
type CpuStats struct {
CpuUsage CpuUsage `json:"cpu_usage"`
// CPUStats aggregates and wraps all CPU related info of container
type CPUStats struct {
CPUUsage CPUUsage `json:"cpu_usage"`
SystemUsage uint64 `json:"system_cpu_usage"`
ThrottlingData ThrottlingData `json:"throttling_data,omitempty"`
}
// MemoryStats aggregates All memory stats since container inception
type MemoryStats struct {
// current res_counter usage for memory
Usage uint64 `json:"usage"`
@@ -48,6 +51,7 @@ type MemoryStats struct {
Limit uint64 `json:"limit"`
}
// BlkioStatEntry is one small entity to store a piece of Blkio stats
// TODO Windows: This can be factored out
type BlkioStatEntry struct {
Major uint64 `json:"major"`
@@ -56,6 +60,7 @@ type BlkioStatEntry struct {
Value uint64 `json:"value"`
}
// BlkioStats stores All IO service stats for data read and write
// TODO Windows: This can be factored out
type BlkioStats struct {
// number of bytes tranferred to and from the block device
@@ -69,8 +74,9 @@ type BlkioStats struct {
SectorsRecursive []BlkioStatEntry `json:"sectors_recursive"`
}
// NetworkStats aggregates All network stats of one container
// TODO Windows: This will require refactoring
type Network struct {
type NetworkStats struct {
RxBytes uint64 `json:"rx_bytes"`
RxPackets uint64 `json:"rx_packets"`
RxErrors uint64 `json:"rx_errors"`
@@ -81,11 +87,12 @@ type Network struct {
TxDropped uint64 `json:"tx_dropped"`
}
// Stats is Ultimate struct aggregating all types of stats of one container
type Stats struct {
Read time.Time `json:"read"`
Network Network `json:"network,omitempty"`
PreCpuStats CpuStats `json:"precpu_stats,omitempty"`
CpuStats CpuStats `json:"cpu_stats,omitempty"`
MemoryStats MemoryStats `json:"memory_stats,omitempty"`
BlkioStats BlkioStats `json:"blkio_stats,omitempty"`
Read time.Time `json:"read"`
Network NetworkStats `json:"network,omitempty"`
PreCPUStats CPUStats `json:"precpu_stats,omitempty"`
CPUStats CPUStats `json:"cpu_stats,omitempty"`
MemoryStats MemoryStats `json:"memory_stats,omitempty"`
BlkioStats BlkioStats `json:"blkio_stats,omitempty"`
}
+72 -25
View File
@@ -19,35 +19,41 @@ type ContainerCreateResponse struct {
Warnings []string `json:"Warnings"`
}
// POST /containers/{name:.*}/exec
// ContainerExecCreateResponse contains response of Remote API:
// POST "/containers/{name:.*}/exec"
type ContainerExecCreateResponse struct {
// ID is the exec ID.
ID string `json:"Id"`
}
// POST /auth
// AuthResponse contains response of Remote API:
// POST "/auth"
type AuthResponse struct {
// Status is the authentication status
Status string `json:"Status"`
}
// ContainerWaitResponse contains response of Remote API:
// POST "/containers/"+containerID+"/wait"
type ContainerWaitResponse struct {
// StatusCode is the status code of the wait job
StatusCode int `json:"StatusCode"`
}
// ContainerCommitResponse contains response of Remote API:
// POST "/commit?container="+containerID
type ContainerCommitResponse struct {
ID string `json:"Id"`
}
// ContainerChange contains response of Remote API:
// GET "/containers/{name:.*}/changes"
type ContainerChange struct {
Kind int
Path string
}
// ImageHistory contains response of Remote API:
// GET "/images/{name:.*}/history"
type ImageHistory struct {
ID string `json:"Id"`
@@ -58,32 +64,37 @@ type ImageHistory struct {
Comment string
}
// ImageDelete contains response of Remote API:
// DELETE "/images/{name:.*}"
type ImageDelete struct {
Untagged string `json:",omitempty"`
Deleted string `json:",omitempty"`
}
// Image contains response of Remote API:
// GET "/images/json"
type Image struct {
ID string `json:"Id"`
ParentId string
ParentID string `json:"ParentId"`
RepoTags []string
RepoDigests []string
Created int
Size int
VirtualSize int
Created int64
Size int64
VirtualSize int64
Labels map[string]string
}
// GraphDriverData returns Image's graph driver config info
// when calling inspect command
type GraphDriverData struct {
Name string
Data map[string]string
}
// ImageInspect contains response of Remote API:
// GET "/images/{name:.*}/json"
type ImageInspect struct {
Id string
ID string `json:"Id"`
Parent string
Comment string
Created string
@@ -99,7 +110,8 @@ type ImageInspect struct {
GraphDriver GraphDriverData
}
// GET "/containers/json"
// Port stores open ports info of container
// e.g. {"PrivatePort": 8080, "PublicPort": 80, "Type": "tcp"}
type Port struct {
IP string `json:",omitempty"`
PrivatePort int
@@ -107,15 +119,17 @@ type Port struct {
Type string
}
// Container contains response of Remote API:
// GET "/containers/json"
type Container struct {
ID string `json:"Id"`
Names []string
Image string
Command string
Created int
Created int64
Ports []Port
SizeRw int `json:",omitempty"`
SizeRootFs int `json:",omitempty"`
SizeRw int64 `json:",omitempty"`
SizeRootFs int64 `json:",omitempty"`
Labels map[string]string
Status string
HostConfig struct {
@@ -123,14 +137,15 @@ type Container struct {
}
}
// CopyConfig contains request body of Remote API:
// POST "/containers/"+containerID+"/copy"
type CopyConfig struct {
Resource string
}
// ContainerPathStat is used to encode the header from
// GET /containers/{name:.*}/archive
// "name" is basename of the resource.
// GET "/containers/{name:.*}/archive"
// "Name" is the file or directory name.
type ContainerPathStat struct {
Name string `json:"name"`
Size int64 `json:"size"`
@@ -139,15 +154,18 @@ type ContainerPathStat struct {
LinkTarget string `json:"linkTarget"`
}
// ContainerProcessList contains response of Remote API:
// GET "/containers/{name:.*}/top"
type ContainerProcessList struct {
Processes [][]string
Titles []string
}
// Version contains response of Remote API:
// GET "/version"
type Version struct {
Version string
ApiVersion version.Version
APIVersion version.Version `json:"ApiVersion"`
GitCommit string
GoVersion string
Os string
@@ -157,6 +175,7 @@ type Version struct {
BuildTime string `json:",omitempty"`
}
// Info contains response of Remote API:
// GET "/info"
type Info struct {
ID string
@@ -166,11 +185,11 @@ type Info struct {
DriverStatus [][2]string
MemoryLimit bool
SwapLimit bool
CpuCfsPeriod bool
CpuCfsQuota bool
CPUCfsPeriod bool `json:"CpuCfsPeriod"`
CPUCfsQuota bool `json:"CpuCfsQuota"`
IPv4Forwarding bool
BridgeNfIptables bool
BridgeNfIp6tables bool
BridgeNfIP6tables bool `json:"BridgeNfIp6tables"`
Debug bool
NFd int
OomKillDisable bool
@@ -188,15 +207,15 @@ type Info struct {
NCPU int
MemTotal int64
DockerRootDir string
HttpProxy string
HttpsProxy string
HTTPProxy string `json:"HttpProxy"`
HTTPSProxy string `json:"HttpsProxy"`
NoProxy string
Name string
Labels []string
ExperimentalBuild bool
}
// This struct is a temp struct used by execStart
// ExecStartCheck is a temp struct used by execStart
// Config fields is part of ExecConfig in runconfig package
type ExecStartCheck struct {
// ExecStart will first check if it's detached
@@ -205,7 +224,10 @@ type ExecStartCheck struct {
Tty bool
}
// ContainerState stores container's running state
// it's part of ContainerJSONBase and will return by "inspect" command
type ContainerState struct {
Status string
Running bool
Paused bool
Restarting bool
@@ -218,9 +240,10 @@ type ContainerState struct {
FinishedAt string
}
// ContainerJSONBase contains response of Remote API:
// GET "/containers/{name:.*}/json"
type ContainerJSONBase struct {
Id string
ID string `json:"Id"`
Created string
Path string
Args []string
@@ -243,13 +266,15 @@ type ContainerJSONBase struct {
GraphDriver GraphDriverData
}
// ContainerJSON is newly used struct along with MountPoint
type ContainerJSON struct {
*ContainerJSONBase
Mounts []MountPoint
Config *runconfig.Config
}
// backcompatibility struct along with ContainerConfig
// ContainerJSONPre120 is a backcompatibility struct along with ContainerConfig.
// Note this is not used by the Windows daemon.
type ContainerJSONPre120 struct {
*ContainerJSONBase
Volumes map[string]string
@@ -257,14 +282,15 @@ type ContainerJSONPre120 struct {
Config *ContainerConfig
}
// ContainerConfig is a backcompatibility struct used in ContainerJSONPre120
type ContainerConfig struct {
*runconfig.Config
// backward compatibility, they now live in HostConfig
Memory int64
MemorySwap int64
CpuShares int64
Cpuset string
CPUShares int64 `json:"CpuShares"`
CPUSet string `json:"CpuSet"`
}
// MountPoint represents a mount point configuration inside the container.
@@ -273,6 +299,27 @@ type MountPoint struct {
Source string
Destination string
Driver string `json:",omitempty"`
Mode string // this is internally named `Relabel`
Mode string
RW bool
}
// Volume represents the configuration of a volume for the remote API
type Volume struct {
Name string // Name is the name of the volume
Driver string // Driver is the Driver name used to create the volume
Mountpoint string // Mountpoint is the location on disk of the volume
}
// VolumesListResponse contains the response for the remote API:
// GET "/volumes"
type VolumesListResponse struct {
Volumes []*Volume // Volumes is the list of volumes being returned
}
// VolumeCreateRequest contains the response for the remote API:
// POST "/volumes"
type VolumeCreateRequest struct {
Name string // Name is the requested name of the volume
Driver string // Driver is the name of the driver that should be used to create the volume
DriverOpts map[string]string // DriverOpts holds the driver specific options to use for when creating the volume.
}
+13 -1
View File
@@ -38,6 +38,7 @@ func NewBFlags() *BFlags {
}
// AddBool adds a bool flag to BFlags
// Note, any error will be generated when Parse() is called (see Parse).
func (bf *BFlags) AddBool(name string, def bool) *Flag {
flag := bf.addFlag(name, boolType)
if flag == nil {
@@ -52,6 +53,7 @@ func (bf *BFlags) AddBool(name string, def bool) *Flag {
}
// AddString adds a string flag to BFlags
// Note, any error will be generated when Parse() is called (see Parse).
func (bf *BFlags) AddString(name string, def string) *Flag {
flag := bf.addFlag(name, stringType)
if flag == nil {
@@ -61,6 +63,9 @@ func (bf *BFlags) AddString(name string, def string) *Flag {
return flag
}
// addFlag is a generic func used by the other AddXXX() func
// to add a new flag to the BFlags struct.
// Note, any error will be generated when Parse() is called (see Parse).
func (bf *BFlags) addFlag(name string, flagType FlagType) *Flag {
if _, ok := bf.flags[name]; ok {
bf.Err = fmt.Errorf("Duplicate flag defined: %s", name)
@@ -94,7 +99,14 @@ func (fl *Flag) IsTrue() bool {
return fl.Value == "true"
}
// Parse parses and checks if the BFlags is valid
// Parse parses and checks if the BFlags is valid.
// Any error noticed during the AddXXX() funcs will be generated/returned
// here. We do this because an error during AddXXX() is more like a
// compile time error so it doesn't matter too much when we stop our
// processing as long as we do stop it, so this allows the code
// around AddXXX() to be just:
// defFlag := AddString("desription", "")
// w/o needing to add an if-statement around each one.
func (bf *BFlags) Parse() error {
// If there was an error while defining the possible flags
// go ahead and bubble it back up here since we didn't do it
+18 -36
View File
@@ -10,7 +10,7 @@ package builder
import (
"fmt"
"io/ioutil"
"path"
"os"
"path/filepath"
"regexp"
"runtime"
@@ -20,6 +20,8 @@ import (
"github.com/Sirupsen/logrus"
flag "github.com/docker/docker/pkg/mflag"
"github.com/docker/docker/pkg/nat"
"github.com/docker/docker/pkg/stringutils"
"github.com/docker/docker/pkg/system"
"github.com/docker/docker/runconfig"
)
@@ -194,7 +196,11 @@ func from(b *builder, args []string, attributes map[string]bool, original string
name := args[0]
// Windows cannot support a container with no base image.
if name == NoBaseImageSpecifier {
if runtime.GOOS == "windows" {
return fmt.Errorf("Windows does not support FROM scratch")
}
b.image = ""
b.noBaseImage = true
return nil
@@ -267,39 +273,15 @@ func workdir(b *builder, args []string, attributes map[string]bool, original str
return err
}
// Note that workdir passed comes from the Dockerfile. Hence it is in
// Linux format using forward-slashes, even on Windows. However,
// b.Config.WorkingDir is in platform-specific notation (in other words
// on Windows will use `\`
workdir := args[0]
// This is from the Dockerfile and will not necessarily be in platform
// specific semantics, hence ensure it is converted.
workdir := filepath.FromSlash(args[0])
isAbs := false
if runtime.GOOS == "windows" {
// Alternate processing for Windows here is necessary as we can't call
// filepath.IsAbs(workDir) as that would verify Windows style paths,
// along with drive-letters (eg c:\pathto\file.txt). We (arguably
// correctly or not) check for both forward and back slashes as this
// is what the 1.4.2 GoLang implementation of IsAbs() does in the
// isSlash() function.
isAbs = workdir[0] == '\\' || workdir[0] == '/'
} else {
isAbs = filepath.IsAbs(workdir)
if !system.IsAbs(workdir) {
current := filepath.FromSlash(b.Config.WorkingDir)
workdir = filepath.Join(string(os.PathSeparator), current, workdir)
}
if !isAbs {
current := b.Config.WorkingDir
if runtime.GOOS == "windows" {
// Convert to Linux format before join
current = strings.Replace(current, "\\", "/", -1)
}
// Must use path.Join so works correctly on Windows, not filepath
workdir = path.Join("/", current, workdir)
}
// Convert to platform specific format
if runtime.GOOS == "windows" {
workdir = strings.Replace(workdir, "/", "\\", -1)
}
b.Config.WorkingDir = workdir
return b.commit("", b.Config.Cmd, fmt.Sprintf("WORKDIR %v", workdir))
@@ -348,7 +330,7 @@ func run(b *builder, args []string, attributes map[string]bool, original string)
b.Config.Cmd = config.Cmd
runconfig.Merge(b.Config, config)
defer func(cmd *runconfig.Command) { b.Config.Cmd = cmd }(cmd)
defer func(cmd *stringutils.StrSlice) { b.Config.Cmd = cmd }(cmd)
logrus.Debugf("[BUILDER] Command to be executed: %v", b.Config.Cmd)
@@ -401,7 +383,7 @@ func cmd(b *builder, args []string, attributes map[string]bool, original string)
}
}
b.Config.Cmd = runconfig.NewCommand(cmdSlice...)
b.Config.Cmd = stringutils.NewStrSlice(cmdSlice...)
if err := b.commit("", b.Config.Cmd, fmt.Sprintf("CMD %q", cmdSlice)); err != nil {
return err
@@ -432,16 +414,16 @@ func entrypoint(b *builder, args []string, attributes map[string]bool, original
switch {
case attributes["json"]:
// ENTRYPOINT ["echo", "hi"]
b.Config.Entrypoint = runconfig.NewEntrypoint(parsed...)
b.Config.Entrypoint = stringutils.NewStrSlice(parsed...)
case len(parsed) == 0:
// ENTRYPOINT []
b.Config.Entrypoint = nil
default:
// ENTRYPOINT echo hi
if runtime.GOOS != "windows" {
b.Config.Entrypoint = runconfig.NewEntrypoint("/bin/sh", "-c", parsed[0])
b.Config.Entrypoint = stringutils.NewStrSlice("/bin/sh", "-c", parsed[0])
} else {
b.Config.Entrypoint = runconfig.NewEntrypoint("cmd", "/S /C", parsed[0])
b.Config.Entrypoint = stringutils.NewStrSlice("cmd", "/S /C", parsed[0])
}
}
+22 -1
View File
@@ -24,6 +24,7 @@ import (
"io"
"os"
"path/filepath"
"runtime"
"strings"
"github.com/Sirupsen/logrus"
@@ -281,11 +282,18 @@ func (b *builder) readDockerfile() error {
// features.
func (b *builder) dispatch(stepN int, ast *parser.Node) error {
cmd := ast.Value
// To ensure the user is give a decent error message if the platform
// on which the daemon is running does not support a builder command.
if err := platformSupports(strings.ToLower(cmd)); err != nil {
return err
}
attrs := ast.Attributes
original := ast.Original
flags := ast.Flags
strs := []string{}
msg := fmt.Sprintf("Step %d : %s", stepN, strings.ToUpper(cmd))
msg := fmt.Sprintf("Step %d : %s", stepN+1, strings.ToUpper(cmd))
if len(ast.Flags) > 0 {
msg += " " + strings.Join(ast.Flags, " ")
@@ -349,3 +357,16 @@ func (b *builder) dispatch(stepN int, ast *parser.Node) error {
return fmt.Errorf("Unknown instruction: %s", strings.ToUpper(cmd))
}
// platformSupports is a short-term function to give users a quality error
// message if a Dockerfile uses a command not supported on the platform.
func platformSupports(command string) error {
if runtime.GOOS != "windows" {
return nil
}
switch command {
case "expose", "volume", "user":
return fmt.Errorf("The daemon on this platform does not support the command '%s'", command)
}
return nil
}
+28 -30
View File
@@ -33,6 +33,7 @@ import (
"github.com/docker/docker/pkg/parsers"
"github.com/docker/docker/pkg/progressreader"
"github.com/docker/docker/pkg/stringid"
"github.com/docker/docker/pkg/stringutils"
"github.com/docker/docker/pkg/system"
"github.com/docker/docker/pkg/tarsum"
"github.com/docker/docker/pkg/urlutil"
@@ -73,7 +74,7 @@ func (b *builder) readContext(context io.Reader) (err error) {
return
}
func (b *builder) commit(id string, autoCmd *runconfig.Command, comment string) error {
func (b *builder) commit(id string, autoCmd *stringutils.StrSlice, comment string) error {
if b.disableCommit {
return nil
}
@@ -84,11 +85,11 @@ func (b *builder) commit(id string, autoCmd *runconfig.Command, comment string)
if id == "" {
cmd := b.Config.Cmd
if runtime.GOOS != "windows" {
b.Config.Cmd = runconfig.NewCommand("/bin/sh", "-c", "#(nop) "+comment)
b.Config.Cmd = stringutils.NewStrSlice("/bin/sh", "-c", "#(nop) "+comment)
} else {
b.Config.Cmd = runconfig.NewCommand("cmd", "/S /C", "REM (nop) "+comment)
b.Config.Cmd = stringutils.NewStrSlice("cmd", "/S /C", "REM (nop) "+comment)
}
defer func(cmd *runconfig.Command) { b.Config.Cmd = cmd }(cmd)
defer func(cmd *stringutils.StrSlice) { b.Config.Cmd = cmd }(cmd)
hit, err := b.probeCache()
if err != nil {
@@ -215,11 +216,11 @@ func (b *builder) runContextCommand(args []string, allowRemote bool, allowDecomp
cmd := b.Config.Cmd
if runtime.GOOS != "windows" {
b.Config.Cmd = runconfig.NewCommand("/bin/sh", "-c", fmt.Sprintf("#(nop) %s %s in %s", cmdName, srcHash, dest))
b.Config.Cmd = stringutils.NewStrSlice("/bin/sh", "-c", fmt.Sprintf("#(nop) %s %s in %s", cmdName, srcHash, dest))
} else {
b.Config.Cmd = runconfig.NewCommand("cmd", "/S /C", fmt.Sprintf("REM (nop) %s %s in %s", cmdName, srcHash, dest))
b.Config.Cmd = stringutils.NewStrSlice("cmd", "/S /C", fmt.Sprintf("REM (nop) %s %s in %s", cmdName, srcHash, dest))
}
defer func(cmd *runconfig.Command) { b.Config.Cmd = cmd }(cmd)
defer func(cmd *stringutils.StrSlice) { b.Config.Cmd = cmd }(cmd)
hit, err := b.probeCache()
if err != nil {
@@ -230,7 +231,7 @@ func (b *builder) runContextCommand(args []string, allowRemote bool, allowDecomp
return nil
}
container, _, err := b.Daemon.Create(b.Config, nil, "")
container, _, err := b.Daemon.ContainerCreate("", b.Config, nil, true)
if err != nil {
return err
}
@@ -241,20 +242,12 @@ func (b *builder) runContextCommand(args []string, allowRemote bool, allowDecomp
}
defer container.Unmount()
if err := container.PrepareStorage(); err != nil {
return err
}
for _, ci := range copyInfos {
if err := b.addContext(container, ci.origPath, ci.destPath, ci.decompress); err != nil {
return err
}
}
if err := container.CleanupStorage(); err != nil {
return err
}
if err := b.commit(container.ID, cmd, fmt.Sprintf("%s %s in %s", cmdName, origPaths, dest)); err != nil {
return err
}
@@ -277,7 +270,7 @@ func calcCopyInfo(b *builder, cmdName string, cInfos *[]*copyInfo, origPath stri
// Twiddle the destPath when its a relative path - meaning, make it
// relative to the WORKINGDIR
if !filepath.IsAbs(destPath) {
if !system.IsAbs(destPath) {
hasSlash := strings.HasSuffix(destPath, string(os.PathSeparator))
destPath = filepath.Join(string(os.PathSeparator), filepath.FromSlash(b.Config.WorkingDir), destPath)
@@ -330,7 +323,7 @@ func calcCopyInfo(b *builder, cmdName string, cInfos *[]*copyInfo, origPath stri
In: resp.Body,
Out: b.OutOld,
Formatter: b.StreamFormatter,
Size: int(resp.ContentLength),
Size: resp.ContentLength,
NewLines: true,
ID: "",
Action: "Downloading",
@@ -355,8 +348,11 @@ func calcCopyInfo(b *builder, cmdName string, cInfos *[]*copyInfo, origPath stri
}
}
if err := system.UtimesNano(tmpFileName, times); err != nil {
return err
// Windows does not support UtimesNano.
if runtime.GOOS != "windows" {
if err := system.UtimesNano(tmpFileName, times); err != nil {
return err
}
}
ci.origPath = filepath.Join(filepath.Base(tmpDirName), filepath.Base(tmpFileName))
@@ -367,7 +363,7 @@ func calcCopyInfo(b *builder, cmdName string, cInfos *[]*copyInfo, origPath stri
if err != nil {
return err
}
path := u.Path
path := filepath.FromSlash(u.Path) // Ensure in platform semantics
if strings.HasSuffix(path, string(os.PathSeparator)) {
path = path[:len(path)-1]
}
@@ -539,7 +535,11 @@ func (b *builder) processImageFrom(img *image.Image) error {
// Process ONBUILD triggers if they exist
if nTriggers := len(b.Config.OnBuild); nTriggers != 0 {
fmt.Fprintf(b.ErrStream, "# Executing %d build triggers\n", nTriggers)
word := "trigger"
if nTriggers > 1 {
word = "triggers"
}
fmt.Fprintf(b.ErrStream, "# Executing %d build %s...\n", nTriggers, word)
}
// Copy the ONBUILD triggers, and remove them from the config, since the config will be committed.
@@ -547,7 +547,7 @@ func (b *builder) processImageFrom(img *image.Image) error {
b.Config.OnBuild = []string{}
// parse the ONBUILD triggers by invoking the parser
for stepN, step := range onBuildTriggers {
for _, step := range onBuildTriggers {
ast, err := parser.Parse(strings.NewReader(step))
if err != nil {
return err
@@ -561,8 +561,6 @@ func (b *builder) processImageFrom(img *image.Image) error {
return fmt.Errorf("%s isn't allowed as an ONBUILD trigger", n.Value)
}
fmt.Fprintf(b.OutStream, "Trigger %d, %s\n", stepN, step)
if err := b.dispatch(i, n); err != nil {
return err
}
@@ -607,9 +605,9 @@ func (b *builder) create() (*daemon.Container, error) {
b.Config.Image = b.image
hostConfig := &runconfig.HostConfig{
CpuShares: b.cpuShares,
CpuPeriod: b.cpuPeriod,
CpuQuota: b.cpuQuota,
CPUShares: b.cpuShares,
CPUPeriod: b.cpuPeriod,
CPUQuota: b.cpuQuota,
CpusetCpus: b.cpuSetCpus,
CpusetMems: b.cpuSetMems,
CgroupParent: b.cgroupParent,
@@ -621,7 +619,7 @@ func (b *builder) create() (*daemon.Container, error) {
config := *b.Config
// Create the container
c, warnings, err := b.Daemon.Create(b.Config, hostConfig, "")
c, warnings, err := b.Daemon.ContainerCreate("", b.Config, hostConfig, true)
if err != nil {
return nil, err
}
@@ -638,7 +636,7 @@ func (b *builder) create() (*daemon.Container, error) {
c.Path = s[0]
c.Args = s[1:]
} else {
config.Cmd = runconfig.NewCommand()
config.Cmd = stringutils.NewStrSlice()
}
return c, nil
@@ -1,4 +1,4 @@
// +build linux
// +build freebsd linux
package builder
+10 -4
View File
@@ -7,6 +7,7 @@ import (
"io"
"io/ioutil"
"os"
"runtime"
"strings"
"sync"
@@ -139,7 +140,7 @@ func Build(d *daemon.Daemon, buildConfig *Config) error {
}
defer f.Body.Close()
ct := f.Header.Get("Content-Type")
clen := int(f.ContentLength)
clen := f.ContentLength
contentType, bodyReader, err := inspectResponse(ct, f.Body, clen)
defer bodyReader.Close()
@@ -182,11 +183,11 @@ func Build(d *daemon.Daemon, buildConfig *Config) error {
builder := &builder{
Daemon: d,
OutStream: &streamformatter.StdoutFormater{
OutStream: &streamformatter.StdoutFormatter{
Writer: buildConfig.Stdout,
StreamFormatter: sf,
},
ErrStream: &streamformatter.StderrFormater{
ErrStream: &streamformatter.StderrFormatter{
Writer: buildConfig.Stdout,
StreamFormatter: sf,
},
@@ -279,6 +280,11 @@ func Commit(name string, d *daemon.Daemon, c *CommitConfig) (string, error) {
return "", err
}
// It is not possible to commit a running container on Windows
if runtime.GOOS == "windows" && container.IsRunning() {
return "", fmt.Errorf("Windows does not support commit of a running container")
}
if c.Config == nil {
c.Config = &runconfig.Config{}
}
@@ -316,7 +322,7 @@ func Commit(name string, d *daemon.Daemon, c *CommitConfig) (string, error) {
// - an io.Reader for the response body
// - an error value which will be non-nil either when something goes wrong while
// reading bytes from r or when the detected content-type is not acceptable.
func inspectResponse(ct string, r io.ReadCloser, clen int) (string, io.ReadCloser, error) {
func inspectResponse(ct string, r io.ReadCloser, clen int64) (string, io.ReadCloser, error) {
plen := clen
if plen <= 0 || plen > maxPreambleLength {
plen = maxPreambleLength
+4 -4
View File
@@ -31,7 +31,7 @@ func TestInspectEmptyResponse(t *testing.T) {
func TestInspectResponseBinary(t *testing.T) {
ct := "application/octet-stream"
br := ioutil.NopCloser(bytes.NewReader(binaryContext))
contentType, bReader, err := inspectResponse(ct, br, len(binaryContext))
contentType, bReader, err := inspectResponse(ct, br, int64(len(binaryContext)))
if err != nil {
t.Fatal(err)
}
@@ -56,7 +56,7 @@ func TestResponseUnsupportedContentType(t *testing.T) {
content := []byte(textPlainDockerfile)
ct := "application/json"
br := ioutil.NopCloser(bytes.NewReader(content))
contentType, bReader, err := inspectResponse(ct, br, len(textPlainDockerfile))
contentType, bReader, err := inspectResponse(ct, br, int64(len(textPlainDockerfile)))
if err == nil {
t.Fatal("Should have returned an error on content-type 'application/json'")
@@ -77,7 +77,7 @@ func TestInspectResponseTextSimple(t *testing.T) {
content := []byte(textPlainDockerfile)
ct := "text/plain"
br := ioutil.NopCloser(bytes.NewReader(content))
contentType, bReader, err := inspectResponse(ct, br, len(content))
contentType, bReader, err := inspectResponse(ct, br, int64(len(content)))
if err != nil {
t.Fatal(err)
}
@@ -96,7 +96,7 @@ func TestInspectResponseTextSimple(t *testing.T) {
func TestInspectResponseEmptyContentType(t *testing.T) {
content := []byte(textPlainDockerfile)
br := ioutil.NopCloser(bytes.NewReader(content))
contentType, bodyReader, err := inspectResponse("", br, len(content))
contentType, bodyReader, err := inspectResponse("", br, int64(len(content)))
if err != nil {
t.Fatal(err)
}
+5
View File
@@ -232,6 +232,11 @@ func parseString(rest string) (*Node, map[string]bool, error) {
// parseJSON converts JSON arrays to an AST.
func parseJSON(rest string) (*Node, map[string]bool, error) {
rest = strings.TrimLeftFunc(rest, unicode.IsSpace)
if !strings.HasPrefix(rest, "[") {
return nil, nil, fmt.Errorf(`Error parsing "%s" as a JSON array`, rest)
}
var myJSON []interface{}
if err := json.NewDecoder(strings.NewReader(rest)).Decode(&myJSON); err != nil {
return nil, nil, err
+1 -1
View File
@@ -42,7 +42,7 @@ var (
func init() {
// Dispatch Table. see line_parsers.go for the parse functions.
// The command is parsed and mapped to the line parser. The line parser
// recieves the arguments but not the command, and returns an AST after
// receives the arguments but not the command, and returns an AST after
// reformulating the arguments according to the rules in the parser
// functions. Errors are propagated up by Parse() and the resulting AST can
// be incorporated directly into the existing AST as a next.
@@ -3,6 +3,8 @@ MAINTAINER Seongyeol Lim <seongyeol37@gmail.com>
COPY . /go/src/github.com/docker/docker
ADD . /
ADD null /
COPY nullfile /tmp
ADD [ "vimrc", "/tmp" ]
COPY [ "bashrc", "/tmp" ]
COPY [ "test file", "/tmp" ]
@@ -2,6 +2,8 @@
(maintainer "Seongyeol Lim <seongyeol37@gmail.com>")
(copy "." "/go/src/github.com/docker/docker")
(add "." "/")
(add "null" "/")
(copy "nullfile" "/tmp")
(add "vimrc" "/tmp")
(copy "bashrc" "/tmp")
(copy "test file" "/tmp")
+42
View File
@@ -49,3 +49,45 @@ func TestShellParser(t *testing.T) {
}
}
}
func TestGetEnv(t *testing.T) {
sw := &shellWord{
word: "",
envs: nil,
pos: 0,
}
sw.envs = []string{}
if sw.getEnv("foo") != "" {
t.Fatalf("2 - 'foo' should map to ''")
}
sw.envs = []string{"foo"}
if sw.getEnv("foo") != "" {
t.Fatalf("3 - 'foo' should map to ''")
}
sw.envs = []string{"foo="}
if sw.getEnv("foo") != "" {
t.Fatalf("4 - 'foo' should map to ''")
}
sw.envs = []string{"foo=bar"}
if sw.getEnv("foo") != "bar" {
t.Fatalf("5 - 'foo' should map to 'bar'")
}
sw.envs = []string{"foo=bar", "car=hat"}
if sw.getEnv("foo") != "bar" {
t.Fatalf("6 - 'foo' should map to 'bar'")
}
if sw.getEnv("car") != "hat" {
t.Fatalf("7 - 'car' should map to 'hat'")
}
// Make sure we grab the first 'car' in the list
sw.envs = []string{"foo=bar", "car=hat", "car=bike"}
if sw.getEnv("car") != "hat" {
t.Fatalf("8 - 'car' should map to 'hat'")
}
}
+106 -59
View File
@@ -4,6 +4,7 @@ import (
"encoding/base64"
"encoding/json"
"fmt"
"io"
"io/ioutil"
"os"
"path/filepath"
@@ -14,7 +15,7 @@ import (
)
const (
// ConfigFile is the name of config file
// ConfigFileName is the name of config file
ConfigFileName = "config.json"
oldConfigfile = ".dockercfg"
@@ -70,6 +71,88 @@ func NewConfigFile(fn string) *ConfigFile {
}
}
// LegacyLoadFromReader reads the non-nested configuration data given and sets up the
// auth config information with given directory and populates the receiver object
func (configFile *ConfigFile) LegacyLoadFromReader(configData io.Reader) error {
b, err := ioutil.ReadAll(configData)
if err != nil {
return err
}
if err := json.Unmarshal(b, &configFile.AuthConfigs); err != nil {
arr := strings.Split(string(b), "\n")
if len(arr) < 2 {
return fmt.Errorf("The Auth config file is empty")
}
authConfig := AuthConfig{}
origAuth := strings.Split(arr[0], " = ")
if len(origAuth) != 2 {
return fmt.Errorf("Invalid Auth config file")
}
authConfig.Username, authConfig.Password, err = DecodeAuth(origAuth[1])
if err != nil {
return err
}
origEmail := strings.Split(arr[1], " = ")
if len(origEmail) != 2 {
return fmt.Errorf("Invalid Auth config file")
}
authConfig.Email = origEmail[1]
authConfig.ServerAddress = defaultIndexserver
configFile.AuthConfigs[defaultIndexserver] = authConfig
} else {
for k, authConfig := range configFile.AuthConfigs {
authConfig.Username, authConfig.Password, err = DecodeAuth(authConfig.Auth)
if err != nil {
return err
}
authConfig.Auth = ""
authConfig.ServerAddress = k
configFile.AuthConfigs[k] = authConfig
}
}
return nil
}
// LoadFromReader reads the configuration data given and sets up the auth config
// information with given directory and populates the receiver object
func (configFile *ConfigFile) LoadFromReader(configData io.Reader) error {
if err := json.NewDecoder(configData).Decode(&configFile); err != nil {
return err
}
var err error
for addr, ac := range configFile.AuthConfigs {
ac.Username, ac.Password, err = DecodeAuth(ac.Auth)
if err != nil {
return err
}
ac.Auth = ""
ac.ServerAddress = addr
configFile.AuthConfigs[addr] = ac
}
return nil
}
// LegacyLoadFromReader is a convenience function that creates a ConfigFile object from
// a non-nested reader
func LegacyLoadFromReader(configData io.Reader) (*ConfigFile, error) {
configFile := ConfigFile{
AuthConfigs: make(map[string]AuthConfig),
}
err := configFile.LegacyLoadFromReader(configData)
return &configFile, err
}
// LoadFromReader is a convenience function that creates a ConfigFile object from
// a reader
func LoadFromReader(configData io.Reader) (*ConfigFile, error) {
configFile := ConfigFile{
AuthConfigs: make(map[string]AuthConfig),
}
err := configFile.LoadFromReader(configData)
return &configFile, err
}
// Load reads the configuration files in the given directory, and sets up
// the auth config information and return values.
// FIXME: use the internal golang config parser
@@ -90,22 +173,8 @@ func Load(configDir string) (*ConfigFile, error) {
return &configFile, err
}
defer file.Close()
if err := json.NewDecoder(file).Decode(&configFile); err != nil {
return &configFile, err
}
for addr, ac := range configFile.AuthConfigs {
ac.Username, ac.Password, err = DecodeAuth(ac.Auth)
if err != nil {
return &configFile, err
}
ac.Auth = ""
ac.ServerAddress = addr
configFile.AuthConfigs[addr] = ac
}
return &configFile, nil
err = configFile.LoadFromReader(file)
return &configFile, err
} else if !os.IsNotExist(err) {
// if file is there but we can't stat it for any reason other
// than it doesn't exist then stop
@@ -117,49 +186,18 @@ func Load(configDir string) (*ConfigFile, error) {
if _, err := os.Stat(confFile); err != nil {
return &configFile, nil //missing file is not an error
}
b, err := ioutil.ReadFile(confFile)
file, err := os.Open(confFile)
if err != nil {
return &configFile, err
}
if err := json.Unmarshal(b, &configFile.AuthConfigs); err != nil {
arr := strings.Split(string(b), "\n")
if len(arr) < 2 {
return &configFile, fmt.Errorf("The Auth config file is empty")
}
authConfig := AuthConfig{}
origAuth := strings.Split(arr[0], " = ")
if len(origAuth) != 2 {
return &configFile, fmt.Errorf("Invalid Auth config file")
}
authConfig.Username, authConfig.Password, err = DecodeAuth(origAuth[1])
if err != nil {
return &configFile, err
}
origEmail := strings.Split(arr[1], " = ")
if len(origEmail) != 2 {
return &configFile, fmt.Errorf("Invalid Auth config file")
}
authConfig.Email = origEmail[1]
authConfig.ServerAddress = defaultIndexserver
configFile.AuthConfigs[defaultIndexserver] = authConfig
} else {
for k, authConfig := range configFile.AuthConfigs {
authConfig.Username, authConfig.Password, err = DecodeAuth(authConfig.Auth)
if err != nil {
return &configFile, err
}
authConfig.Auth = ""
authConfig.ServerAddress = k
configFile.AuthConfigs[k] = authConfig
}
}
return &configFile, nil
defer file.Close()
err = configFile.LegacyLoadFromReader(file)
return &configFile, err
}
// Save encodes and writes out all the authorization information
func (configFile *ConfigFile) Save() error {
// SaveToWriter encodes and writes out all the authorization information to
// the given writer
func (configFile *ConfigFile) SaveToWriter(writer io.Writer) error {
// Encode sensitive data into a new/temp struct
tmpAuthConfigs := make(map[string]AuthConfig, len(configFile.AuthConfigs))
for k, authConfig := range configFile.AuthConfigs {
@@ -180,16 +218,25 @@ func (configFile *ConfigFile) Save() error {
if err != nil {
return err
}
_, err = writer.Write(data)
return err
}
// Save encodes and writes out all the authorization information
func (configFile *ConfigFile) Save() error {
if configFile.Filename() == "" {
return fmt.Errorf("Can't save config with empty filename")
}
if err := system.MkdirAll(filepath.Dir(configFile.filename), 0700); err != nil {
return err
}
if err := ioutil.WriteFile(configFile.filename, data, 0600); err != nil {
f, err := os.OpenFile(configFile.filename, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0600)
if err != nil {
return err
}
return nil
defer f.Close()
return configFile.SaveToWriter(f)
}
// Filename returns the name of the configuration file
+331 -61
View File
@@ -4,15 +4,41 @@ import (
"io/ioutil"
"os"
"path/filepath"
"runtime"
"strings"
"testing"
"github.com/docker/docker/pkg/homedir"
)
func TestEmptyConfigDir(t *testing.T) {
tmpHome, err := ioutil.TempDir("", "config-test")
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(tmpHome)
SetConfigDir(tmpHome)
config, err := Load("")
if err != nil {
t.Fatalf("Failed loading on empty config dir: %q", err)
}
expectedConfigFilename := filepath.Join(tmpHome, ConfigFileName)
if config.Filename() != expectedConfigFilename {
t.Fatalf("Expected config filename %s, got %s", expectedConfigFilename, config.Filename())
}
// Now save it and make sure it shows up in new form
saveConfigAndValidateNewFormat(t, config, tmpHome)
}
func TestMissingFile(t *testing.T) {
tmpHome, _ := ioutil.TempDir("", "config-test")
tmpHome, err := ioutil.TempDir("", "config-test")
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(tmpHome)
config, err := Load(tmpHome)
if err != nil {
@@ -20,19 +46,15 @@ func TestMissingFile(t *testing.T) {
}
// Now save it and make sure it shows up in new form
err = config.Save()
if err != nil {
t.Fatalf("Failed to save: %q", err)
}
buf, err := ioutil.ReadFile(filepath.Join(tmpHome, ConfigFileName))
if !strings.Contains(string(buf), `"auths":`) {
t.Fatalf("Should have save in new form: %s", string(buf))
}
saveConfigAndValidateNewFormat(t, config, tmpHome)
}
func TestSaveFileToDirs(t *testing.T) {
tmpHome, _ := ioutil.TempDir("", "config-test")
tmpHome, err := ioutil.TempDir("", "config-test")
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(tmpHome)
tmpHome += "/.docker"
@@ -42,32 +64,38 @@ func TestSaveFileToDirs(t *testing.T) {
}
// Now save it and make sure it shows up in new form
err = config.Save()
if err != nil {
t.Fatalf("Failed to save: %q", err)
}
buf, err := ioutil.ReadFile(filepath.Join(tmpHome, ConfigFileName))
if !strings.Contains(string(buf), `"auths":`) {
t.Fatalf("Should have save in new form: %s", string(buf))
}
saveConfigAndValidateNewFormat(t, config, tmpHome)
}
func TestEmptyFile(t *testing.T) {
tmpHome, _ := ioutil.TempDir("", "config-test")
fn := filepath.Join(tmpHome, ConfigFileName)
ioutil.WriteFile(fn, []byte(""), 0600)
tmpHome, err := ioutil.TempDir("", "config-test")
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(tmpHome)
_, err := Load(tmpHome)
fn := filepath.Join(tmpHome, ConfigFileName)
if err := ioutil.WriteFile(fn, []byte(""), 0600); err != nil {
t.Fatal(err)
}
_, err = Load(tmpHome)
if err == nil {
t.Fatalf("Was supposed to fail")
}
}
func TestEmptyJson(t *testing.T) {
tmpHome, _ := ioutil.TempDir("", "config-test")
tmpHome, err := ioutil.TempDir("", "config-test")
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(tmpHome)
fn := filepath.Join(tmpHome, ConfigFileName)
ioutil.WriteFile(fn, []byte("{}"), 0600)
if err := ioutil.WriteFile(fn, []byte("{}"), 0600); err != nil {
t.Fatal(err)
}
config, err := Load(tmpHome)
if err != nil {
@@ -75,23 +103,119 @@ func TestEmptyJson(t *testing.T) {
}
// Now save it and make sure it shows up in new form
err = config.Save()
if err != nil {
t.Fatalf("Failed to save: %q", err)
saveConfigAndValidateNewFormat(t, config, tmpHome)
}
func TestOldInvalidsAuth(t *testing.T) {
invalids := map[string]string{
`username = test`: "The Auth config file is empty",
`username
password
email`: "Invalid Auth config file",
`username = test
email`: "Invalid auth configuration file",
`username = am9lam9lOmhlbGxv
email`: "Invalid Auth config file",
}
buf, err := ioutil.ReadFile(filepath.Join(tmpHome, ConfigFileName))
if !strings.Contains(string(buf), `"auths":`) {
t.Fatalf("Should have save in new form: %s", string(buf))
tmpHome, err := ioutil.TempDir("", "config-test")
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(tmpHome)
homeKey := homedir.Key()
homeVal := homedir.Get()
defer func() { os.Setenv(homeKey, homeVal) }()
os.Setenv(homeKey, tmpHome)
for content, expectedError := range invalids {
fn := filepath.Join(tmpHome, oldConfigfile)
if err := ioutil.WriteFile(fn, []byte(content), 0600); err != nil {
t.Fatal(err)
}
config, err := Load(tmpHome)
if err == nil || err.Error() != expectedError {
t.Fatalf("Should have failed, got: %q, %q", config, err)
}
}
}
func TestOldValidAuth(t *testing.T) {
tmpHome, err := ioutil.TempDir("", "config-test")
if err != nil {
t.Fatal(err)
}
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(tmpHome)
homeKey := homedir.Key()
homeVal := homedir.Get()
defer func() { os.Setenv(homeKey, homeVal) }()
os.Setenv(homeKey, tmpHome)
fn := filepath.Join(tmpHome, oldConfigfile)
js := `username = am9lam9lOmhlbGxv
email = user@example.com`
if err := ioutil.WriteFile(fn, []byte(js), 0600); err != nil {
t.Fatal(err)
}
config, err := Load(tmpHome)
if err != nil {
t.Fatal(err)
}
// defaultIndexserver is https://index.docker.io/v1/
ac := config.AuthConfigs["https://index.docker.io/v1/"]
if ac.Email != "user@example.com" || ac.Username != "joejoe" || ac.Password != "hello" {
t.Fatalf("Missing data from parsing:\n%q", config)
}
// Now save it and make sure it shows up in new form
configStr := saveConfigAndValidateNewFormat(t, config, tmpHome)
if !strings.Contains(configStr, "user@example.com") {
t.Fatalf("Should have save in new form: %s", configStr)
}
}
func TestOldJsonInvalid(t *testing.T) {
tmpHome, err := ioutil.TempDir("", "config-test")
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(tmpHome)
homeKey := homedir.Key()
homeVal := homedir.Get()
defer func() { os.Setenv(homeKey, homeVal) }()
os.Setenv(homeKey, tmpHome)
fn := filepath.Join(tmpHome, oldConfigfile)
js := `{"https://index.docker.io/v1/":{"auth":"test","email":"user@example.com"}}`
if err := ioutil.WriteFile(fn, []byte(js), 0600); err != nil {
t.Fatal(err)
}
config, err := Load(tmpHome)
if err == nil || err.Error() != "Invalid auth configuration file" {
t.Fatalf("Expected an error got : %v, %v", config, err)
}
}
func TestOldJson(t *testing.T) {
if runtime.GOOS == "windows" {
return
tmpHome, err := ioutil.TempDir("", "config-test")
if err != nil {
t.Fatal(err)
}
tmpHome, _ := ioutil.TempDir("", "config-test")
defer os.RemoveAll(tmpHome)
homeKey := homedir.Key()
@@ -102,7 +226,9 @@ func TestOldJson(t *testing.T) {
fn := filepath.Join(tmpHome, oldConfigfile)
js := `{"https://index.docker.io/v1/":{"auth":"am9lam9lOmhlbGxv","email":"user@example.com"}}`
ioutil.WriteFile(fn, []byte(js), 0600)
if err := ioutil.WriteFile(fn, []byte(js), 0600); err != nil {
t.Fatal(err)
}
config, err := Load(tmpHome)
if err != nil {
@@ -115,23 +241,25 @@ func TestOldJson(t *testing.T) {
}
// Now save it and make sure it shows up in new form
err = config.Save()
if err != nil {
t.Fatalf("Failed to save: %q", err)
}
configStr := saveConfigAndValidateNewFormat(t, config, tmpHome)
buf, err := ioutil.ReadFile(filepath.Join(tmpHome, ConfigFileName))
if !strings.Contains(string(buf), `"auths":`) ||
!strings.Contains(string(buf), "user@example.com") {
t.Fatalf("Should have save in new form: %s", string(buf))
if !strings.Contains(configStr, "user@example.com") {
t.Fatalf("Should have save in new form: %s", configStr)
}
}
func TestNewJson(t *testing.T) {
tmpHome, _ := ioutil.TempDir("", "config-test")
tmpHome, err := ioutil.TempDir("", "config-test")
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(tmpHome)
fn := filepath.Join(tmpHome, ConfigFileName)
js := ` { "auths": { "https://index.docker.io/v1/": { "auth": "am9lam9lOmhlbGxv", "email": "user@example.com" } } }`
ioutil.WriteFile(fn, []byte(js), 0600)
if err := ioutil.WriteFile(fn, []byte(js), 0600); err != nil {
t.Fatal(err)
}
config, err := Load(tmpHome)
if err != nil {
@@ -144,26 +272,28 @@ func TestNewJson(t *testing.T) {
}
// Now save it and make sure it shows up in new form
err = config.Save()
if err != nil {
t.Fatalf("Failed to save: %q", err)
}
configStr := saveConfigAndValidateNewFormat(t, config, tmpHome)
buf, err := ioutil.ReadFile(filepath.Join(tmpHome, ConfigFileName))
if !strings.Contains(string(buf), `"auths":`) ||
!strings.Contains(string(buf), "user@example.com") {
t.Fatalf("Should have save in new form: %s", string(buf))
if !strings.Contains(configStr, "user@example.com") {
t.Fatalf("Should have save in new form: %s", configStr)
}
}
func TestJsonWithPsFormat(t *testing.T) {
tmpHome, _ := ioutil.TempDir("", "config-test")
tmpHome, err := ioutil.TempDir("", "config-test")
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(tmpHome)
fn := filepath.Join(tmpHome, ConfigFileName)
js := `{
"auths": { "https://index.docker.io/v1/": { "auth": "am9lam9lOmhlbGxv", "email": "user@example.com" } },
"psFormat": "table {{.ID}}\\t{{.Label \"com.docker.label.cpu\"}}"
}`
ioutil.WriteFile(fn, []byte(js), 0600)
if err := ioutil.WriteFile(fn, []byte(js), 0600); err != nil {
t.Fatal(err)
}
config, err := Load(tmpHome)
if err != nil {
@@ -175,14 +305,154 @@ func TestJsonWithPsFormat(t *testing.T) {
}
// Now save it and make sure it shows up in new form
err = config.Save()
configStr := saveConfigAndValidateNewFormat(t, config, tmpHome)
if !strings.Contains(configStr, `"psFormat":`) ||
!strings.Contains(configStr, "{{.ID}}") {
t.Fatalf("Should have save in new form: %s", configStr)
}
}
// Save it and make sure it shows up in new form
func saveConfigAndValidateNewFormat(t *testing.T, config *ConfigFile, homeFolder string) string {
err := config.Save()
if err != nil {
t.Fatalf("Failed to save: %q", err)
}
buf, err := ioutil.ReadFile(filepath.Join(homeFolder, ConfigFileName))
if !strings.Contains(string(buf), `"auths":`) {
t.Fatalf("Should have save in new form: %s", string(buf))
}
return string(buf)
}
func TestConfigDir(t *testing.T) {
tmpHome, err := ioutil.TempDir("", "config-test")
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(tmpHome)
if ConfigDir() == tmpHome {
t.Fatalf("Expected ConfigDir to be different than %s by default, but was the same", tmpHome)
}
// Update configDir
SetConfigDir(tmpHome)
if ConfigDir() != tmpHome {
t.Fatalf("Expected ConfigDir to %s, but was %s", tmpHome, ConfigDir())
}
}
func TestConfigFile(t *testing.T) {
configFilename := "configFilename"
configFile := NewConfigFile(configFilename)
if configFile.Filename() != configFilename {
t.Fatalf("Expected %s, got %s", configFilename, configFile.Filename())
}
}
func TestJsonReaderNoFile(t *testing.T) {
js := ` { "auths": { "https://index.docker.io/v1/": { "auth": "am9lam9lOmhlbGxv", "email": "user@example.com" } } }`
config, err := LoadFromReader(strings.NewReader(js))
if err != nil {
t.Fatalf("Failed loading on empty json file: %q", err)
}
ac := config.AuthConfigs["https://index.docker.io/v1/"]
if ac.Email != "user@example.com" || ac.Username != "joejoe" || ac.Password != "hello" {
t.Fatalf("Missing data from parsing:\n%q", config)
}
}
func TestOldJsonReaderNoFile(t *testing.T) {
js := `{"https://index.docker.io/v1/":{"auth":"am9lam9lOmhlbGxv","email":"user@example.com"}}`
config, err := LegacyLoadFromReader(strings.NewReader(js))
if err != nil {
t.Fatalf("Failed loading on empty json file: %q", err)
}
ac := config.AuthConfigs["https://index.docker.io/v1/"]
if ac.Email != "user@example.com" || ac.Username != "joejoe" || ac.Password != "hello" {
t.Fatalf("Missing data from parsing:\n%q", config)
}
}
func TestJsonWithPsFormatNoFile(t *testing.T) {
js := `{
"auths": { "https://index.docker.io/v1/": { "auth": "am9lam9lOmhlbGxv", "email": "user@example.com" } },
"psFormat": "table {{.ID}}\\t{{.Label \"com.docker.label.cpu\"}}"
}`
config, err := LoadFromReader(strings.NewReader(js))
if err != nil {
t.Fatalf("Failed loading on empty json file: %q", err)
}
if config.PsFormat != `table {{.ID}}\t{{.Label "com.docker.label.cpu"}}` {
t.Fatalf("Unknown ps format: %s\n", config.PsFormat)
}
}
func TestJsonSaveWithNoFile(t *testing.T) {
js := `{
"auths": { "https://index.docker.io/v1/": { "auth": "am9lam9lOmhlbGxv", "email": "user@example.com" } },
"psFormat": "table {{.ID}}\\t{{.Label \"com.docker.label.cpu\"}}"
}`
config, err := LoadFromReader(strings.NewReader(js))
err = config.Save()
if err == nil {
t.Fatalf("Expected error. File should not have been able to save with no file name.")
}
tmpHome, err := ioutil.TempDir("", "config-test")
if err != nil {
t.Fatalf("Failed to create a temp dir: %q", err)
}
defer os.RemoveAll(tmpHome)
fn := filepath.Join(tmpHome, ConfigFileName)
f, _ := os.OpenFile(fn, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0600)
err = config.SaveToWriter(f)
if err != nil {
t.Fatalf("Failed saving to file: %q", err)
}
buf, err := ioutil.ReadFile(filepath.Join(tmpHome, ConfigFileName))
if !strings.Contains(string(buf), `"psFormat":`) ||
!strings.Contains(string(buf), "{{.ID}}") {
if !strings.Contains(string(buf), `"auths":`) ||
!strings.Contains(string(buf), "user@example.com") {
t.Fatalf("Should have save in new form: %s", string(buf))
}
}
func TestLegacyJsonSaveWithNoFile(t *testing.T) {
js := `{"https://index.docker.io/v1/":{"auth":"am9lam9lOmhlbGxv","email":"user@example.com"}}`
config, err := LegacyLoadFromReader(strings.NewReader(js))
err = config.Save()
if err == nil {
t.Fatalf("Expected error. File should not have been able to save with no file name.")
}
tmpHome, err := ioutil.TempDir("", "config-test")
if err != nil {
t.Fatalf("Failed to create a temp dir: %q", err)
}
defer os.RemoveAll(tmpHome)
fn := filepath.Join(tmpHome, ConfigFileName)
f, _ := os.OpenFile(fn, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0600)
err = config.SaveToWriter(f)
if err != nil {
t.Fatalf("Failed saving to file: %q", err)
}
buf, err := ioutil.ReadFile(filepath.Join(tmpHome, ConfigFileName))
if !strings.Contains(string(buf), `"auths":`) ||
!strings.Contains(string(buf), "user@example.com") {
t.Fatalf("Should have save in new form: %s", string(buf))
}
}
+59
View File
@@ -41,6 +41,9 @@ profile /usr/bin/docker (attach_disconnected, complain) {
/sbin/iptables rCx,
/sbin/modprobe rCx,
/sbin/auplink rCx,
/sbin/mke2fs rCx,
/sbin/tune2fs rCx,
/sbin/blkid rCx,
/bin/kmod rCx,
/usr/bin/xz rCx,
/bin/ps rCx,
@@ -148,4 +151,60 @@ profile /usr/bin/docker (attach_disconnected, complain) {
file,
capability,
}
profile /sbin/mke2fs (complain) {
/sbin/mke2fs rm,
/lib/** r,
/apparmor/.null w,
/etc/ld.so.cache r,
/etc/mke2fs.conf r,
/etc/mtab r,
/dev/dm-* rw,
/dev/urandom r,
/dev/null rw,
/proc/swaps r,
/proc/[0-9]*/mounts r,
}
profile /sbin/tune2fs (complain) {
/sbin/tune2fs rm,
/lib/** r,
/apparmor/.null w,
/etc/blkid.conf r,
/etc/mtab r,
/etc/ld.so.cache r,
/dev/null rw,
/dev/.blkid.tab r,
/dev/dm-* rw,
/proc/swaps r,
/proc/[0-9]*/mounts r,
}
profile /sbin/blkid (complain) {
/sbin/blkid rm,
/lib/** r,
/apparmor/.null w,
/etc/ld.so.cache r,
/etc/blkid.conf r,
/dev/null rw,
/dev/.blkid.tab rl,
/dev/.blkid.tab* rwl,
/dev/dm-* r,
/sys/devices/virtual/block/** r,
capability mknod,
mount -> @{DOCKER_GRAPH_PATH}/**,
}
}
+2 -3
View File
@@ -2,10 +2,9 @@
# THIS FILE IS AUTOGENERATED; SEE "contrib/builder/deb/generate.sh"!
#
FROM debian:wheezy
RUN echo deb http://http.debian.net/debian wheezy-backports main > /etc/apt/sources.list.d/wheezy-backports.list
FROM debian:wheezy-backports
RUN apt-get update && apt-get install -y bash-completion btrfs-tools build-essential curl ca-certificates debhelper dh-systemd git libapparmor-dev libdevmapper-dev libsqlite3-dev --no-install-recommends && rm -rf /var/lib/apt/lists/*
RUN apt-get update && apt-get install -y bash-completion btrfs-tools/wheezy-backports build-essential curl ca-certificates debhelper dh-systemd git libapparmor-dev libdevmapper-dev libsqlite3-dev --no-install-recommends && rm -rf /var/lib/apt/lists/*
ENV GO_VERSION 1.4.2
RUN curl -fSL "https://storage.googleapis.com/golang/go${GO_VERSION}.linux-amd64.tar.gz" | tar xzC /usr/local
+13 -7
View File
@@ -22,6 +22,13 @@ for version in "${versions[@]}"; do
suite="${version##*-}"
from="${distro}:${suite}"
case "$from" in
debian:wheezy)
# add -backports, like our users have to
from+='-backports'
;;
esac
mkdir -p "$version"
echo "$version -> FROM $from"
cat > "$version/Dockerfile" <<-EOF
@@ -32,13 +39,6 @@ for version in "${versions[@]}"; do
FROM $from
EOF
case "$from" in
debian:wheezy)
# add -backports, like our users have to
echo "RUN echo deb http://http.debian.net/debian $suite-backports main > /etc/apt/sources.list.d/$suite-backports.list" >> "$version/Dockerfile"
;;
esac
echo >> "$version/Dockerfile"
extraBuildTags=
@@ -73,6 +73,12 @@ for version in "${versions[@]}"; do
extraBuildTags+=' exclude_graphdriver_btrfs'
fi
if [ "$suite" = 'wheezy' ]; then
# pull btrfs-toold from backports
backports="/$suite-backports"
packages=( "${packages[@]/btrfs-tools/btrfs-tools$backports}" )
fi
echo "RUN apt-get update && apt-get install -y ${packages[*]} --no-install-recommends && rm -rf /var/lib/apt/lists/*" >> "$version/Dockerfile"
echo >> "$version/Dockerfile"
@@ -2,7 +2,7 @@
# THIS FILE IS AUTOGENERATED; SEE "contrib/builder/deb/generate.sh"!
#
FROM ubuntu-debootstrap:precise
FROM ubuntu:precise
RUN apt-get update && apt-get install -y bash-completion build-essential curl ca-certificates debhelper git libapparmor-dev libsqlite3-dev --no-install-recommends && rm -rf /var/lib/apt/lists/*
@@ -2,7 +2,7 @@
# THIS FILE IS AUTOGENERATED; SEE "contrib/builder/deb/generate.sh"!
#
FROM ubuntu-debootstrap:wily
FROM ubuntu:trusty
RUN apt-get update && apt-get install -y bash-completion btrfs-tools build-essential curl ca-certificates debhelper dh-systemd git libapparmor-dev libdevmapper-dev libsqlite3-dev --no-install-recommends && rm -rf /var/lib/apt/lists/*
@@ -2,7 +2,7 @@
# THIS FILE IS AUTOGENERATED; SEE "contrib/builder/deb/generate.sh"!
#
FROM ubuntu-debootstrap:vivid
FROM ubuntu:vivid
RUN apt-get update && apt-get install -y bash-completion btrfs-tools build-essential curl ca-certificates debhelper dh-systemd git libapparmor-dev libdevmapper-dev libsqlite3-dev --no-install-recommends && rm -rf /var/lib/apt/lists/*
@@ -2,7 +2,7 @@
# THIS FILE IS AUTOGENERATED; SEE "contrib/builder/deb/generate.sh"!
#
FROM ubuntu-debootstrap:trusty
FROM ubuntu:wily
RUN apt-get update && apt-get install -y bash-completion btrfs-tools build-essential curl ca-certificates debhelper dh-systemd git libapparmor-dev libdevmapper-dev libsqlite3-dev --no-install-recommends && rm -rf /var/lib/apt/lists/*
+1 -1
View File
@@ -6,7 +6,7 @@ FROM centos:7
RUN yum groupinstall -y "Development Tools"
RUN yum -y swap -- remove systemd-container systemd-container-libs -- install systemd systemd-libs
RUN yum install -y btrfs-progs-devel device-mapper-devel glibc-static libselinux-devel sqlite-devel tar
RUN yum install -y btrfs-progs-devel device-mapper-devel glibc-static libselinux-devel selinux-policy selinux-policy-devel sqlite-devel tar
ENV GO_VERSION 1.4.2
RUN curl -fSL "https://storage.googleapis.com/golang/go${GO_VERSION}.linux-amd64.tar.gz" | tar xzC /usr/local
-15
View File
@@ -1,15 +0,0 @@
#
# THIS FILE IS AUTOGENERATED; SEE "contrib/builder/rpm/generate.sh"!
#
FROM fedora:20
RUN yum install -y @development-tools fedora-packager
RUN yum install -y btrfs-progs-devel device-mapper-devel glibc-static libselinux-devel sqlite-devel tar
ENV GO_VERSION 1.4.2
RUN curl -fSL "https://storage.googleapis.com/golang/go${GO_VERSION}.linux-amd64.tar.gz" | tar xzC /usr/local
ENV PATH $PATH:/usr/local/go/bin
ENV AUTO_GOPATH 1
ENV DOCKER_BUILDTAGS selinux
+1 -1
View File
@@ -5,7 +5,7 @@
FROM fedora:21
RUN yum install -y @development-tools fedora-packager
RUN yum install -y btrfs-progs-devel device-mapper-devel glibc-static libselinux-devel sqlite-devel tar
RUN yum install -y btrfs-progs-devel device-mapper-devel glibc-static libselinux-devel selinux-policy selinux-policy-devel sqlite-devel tar
ENV GO_VERSION 1.4.2
RUN curl -fSL "https://storage.googleapis.com/golang/go${GO_VERSION}.linux-amd64.tar.gz" | tar xzC /usr/local
+1 -1
View File
@@ -5,7 +5,7 @@
FROM fedora:22
RUN yum install -y @development-tools fedora-packager
RUN yum install -y btrfs-progs-devel device-mapper-devel glibc-static libselinux-devel sqlite-devel tar
RUN yum install -y btrfs-progs-devel device-mapper-devel glibc-static libselinux-devel selinux-policy selinux-policy-devel sqlite-devel tar
ENV GO_VERSION 1.4.2
RUN curl -fSL "https://storage.googleapis.com/golang/go${GO_VERSION}.linux-amd64.tar.gz" | tar xzC /usr/local
+2
View File
@@ -58,6 +58,8 @@ for version in "${versions[@]}"; do
device-mapper-devel # for "libdevmapper.h"
glibc-static
libselinux-devel # for "libselinux.so"
selinux-policy
selinux-policy-devel
sqlite-devel # for "sqlite3.h"
tar # older versions of dev-tools do not have tar
)
+1 -1
View File
@@ -5,7 +5,7 @@
FROM oraclelinux:6
RUN yum groupinstall -y "Development Tools"
RUN yum install -y btrfs-progs-devel device-mapper-devel glibc-static libselinux-devel sqlite-devel tar
RUN yum install -y btrfs-progs-devel device-mapper-devel glibc-static libselinux-devel selinux-policy selinux-policy-devel sqlite-devel tar
ENV GO_VERSION 1.4.2
RUN curl -fSL "https://storage.googleapis.com/golang/go${GO_VERSION}.linux-amd64.tar.gz" | tar xzC /usr/local
+1 -1
View File
@@ -5,7 +5,7 @@
FROM oraclelinux:7
RUN yum groupinstall -y "Development Tools"
RUN yum install -y --enablerepo=ol7_optional_latest btrfs-progs-devel device-mapper-devel glibc-static libselinux-devel sqlite-devel tar
RUN yum install -y --enablerepo=ol7_optional_latest btrfs-progs-devel device-mapper-devel glibc-static libselinux-devel selinux-policy selinux-policy-devel sqlite-devel tar
ENV GO_VERSION 1.4.2
RUN curl -fSL "https://storage.googleapis.com/golang/go${GO_VERSION}.linux-amd64.tar.gz" | tar xzC /usr/local
+8 -2
View File
@@ -191,11 +191,17 @@ if [ "$kernelMajor" -lt 3 ] || [ "$kernelMajor" -eq 3 -a "$kernelMinor" -le 18 ]
check_flags RESOURCE_COUNTERS
fi
if [ "$kernelMajor" -lt 3 ] || [ "$kernelMajor" -eq 3 -a "$kernelMinor" -le 13 ]; then
netprio=NETPRIO_CGROUP
else
netprio=CGROUP_NET_PRIO
fi
flags=(
BLK_CGROUP IOSCHED_CFQ
BLK_CGROUP IOSCHED_CFQ BLK_DEV_THROTTLING
CGROUP_PERF
CGROUP_HUGETLB
NET_CLS_CGROUP NETPRIO_CGROUP
NET_CLS_CGROUP $netprio
CFS_BANDWIDTH FAIR_GROUP_SCHED RT_GROUP_SCHED
)
check_flags "${flags[@]}"
Executable → Regular
+139 -30
View File
@@ -14,6 +14,22 @@
# - copy this file to e.g. ~/.docker-completion.sh and add the line
# below to your .bashrc after bash completion features are loaded
# . ~/.docker-completion.sh
#
# Configuration:
#
# You can tailor completion for the "events", "history", "inspect", "run",
# "rmi" and "save" commands by settings the following environment
# variables:
#
# DOCKER_COMPLETION_SHOW_IMAGE_IDS
# "none" - Show names only (default)
# "non-intermediate" - Show names and ids, but omit intermediate image IDs
# "all" - Show names and ids, including intermediate image IDs
#
# DOCKER_COMPLETION_SHOW_TAGS
# "yes" - include tags in completion options (default)
# "no" - don't include tags in completion options
#
# Note:
# Currently, the completions will not work if the docker daemon is not
@@ -70,6 +86,40 @@ __docker_container_ids() {
COMPREPLY=( $(compgen -W "${containers[*]}" -- "$cur") )
}
__docker_images() {
local images_args=""
case "$DOCKER_COMPLETION_SHOW_IMAGE_IDS" in
all)
images_args="--no-trunc -a"
;;
non-intermediate)
images_args="--no-trunc"
;;
esac
local repo_print_command
if [ "${DOCKER_COMPLETION_SHOW_TAGS:-yes}" = "yes" ]; then
repo_print_command='print $1; print $1":"$2'
else
repo_print_command='print $1'
fi
local awk_script
case "$DOCKER_COMPLETION_SHOW_IMAGE_IDS" in
all|non-intermediate)
awk_script='NR>1 { print $3; if ($1 != "<none>") { '"$repo_print_command"' } }'
;;
none|*)
awk_script='NR>1 && $1 != "<none>" { '"$repo_print_command"' }'
;;
esac
local images=$(__docker_q images $images_args | awk "$awk_script")
COMPREPLY=( $(compgen -W "$images" -- "$cur") )
__ltrim_colon_completions "$cur"
}
__docker_image_repos() {
local repos="$(__docker_q images | awk 'NR>1 && $1 != "<none>" { print $1 }')"
COMPREPLY=( $(compgen -W "$repos" -- "$cur") )
@@ -81,16 +131,10 @@ __docker_image_repos_and_tags() {
__ltrim_colon_completions "$cur"
}
__docker_image_repos_and_tags_and_ids() {
local images="$(__docker_q images -a --no-trunc | awk 'NR>1 { print $3; if ($1 != "<none>") { print $1; print $1":"$2 } }')"
COMPREPLY=( $(compgen -W "$images" -- "$cur") )
__ltrim_colon_completions "$cur"
}
__docker_containers_and_images() {
__docker_containers_all
local containers=( "${COMPREPLY[@]}" )
__docker_image_repos_and_tags_and_ids
__docker_images
COMPREPLY+=( "${containers[@]}" )
}
@@ -139,7 +183,7 @@ __docker_value_of_option() {
local counter=$((command_pos + 1))
while [ $counter -lt $cword ]; do
case ${words[$counter]} in
$option_glob )
@($option_glob) )
echo ${words[$counter + 1]}
break
;;
@@ -229,11 +273,12 @@ __docker_log_driver_options() {
# see docs/reference/logging/index.md
local fluentd_options="fluentd-address fluentd-tag"
local gelf_options="gelf-address gelf-tag"
local json_file_options="max-file max-size"
local syslog_options="syslog-address syslog-facility syslog-tag"
case $(__docker_value_of_option --log-driver) in
'')
COMPREPLY=( $( compgen -W "$fluentd_options $gelf_options $syslog_options" -S = -- "$cur" ) )
COMPREPLY=( $( compgen -W "$fluentd_options $gelf_options $json_file_options $syslog_options" -S = -- "$cur" ) )
;;
fluentd)
COMPREPLY=( $( compgen -W "$fluentd_options" -S = -- "$cur" ) )
@@ -241,6 +286,9 @@ __docker_log_driver_options() {
gelf)
COMPREPLY=( $( compgen -W "$gelf_options" -S = -- "$cur" ) )
;;
json-file)
COMPREPLY=( $( compgen -W "$json_file_options" -S = -- "$cur" ) )
;;
syslog)
COMPREPLY=( $( compgen -W "$syslog_options" -S = -- "$cur" ) )
;;
@@ -320,7 +368,7 @@ __docker_signals() {
_docker_docker() {
local boolean_options="
$global_boolean_options
--help -h
--help
--version -v
"
@@ -338,8 +386,6 @@ _docker_docker() {
;;
esac
__docker_complete_log_driver_options && return
case "$cur" in
-*)
COMPREPLY=( $( compgen -W "$boolean_options $global_options_with_args" -- "$cur" ) )
@@ -460,7 +506,7 @@ _docker_create() {
_docker_daemon() {
local boolean_options="
$global_boolean_options
--help -h
--help
--icc=false
--ip-forward=false
--ip-masq=false
@@ -512,7 +558,39 @@ _docker_daemon() {
return
;;
--storage-driver|-s)
COMPREPLY=( $( compgen -W "aufs devicemapper btrfs overlay" -- "$(echo $cur | tr '[:upper:]' '[:lower:]')" ) )
COMPREPLY=( $( compgen -W "aufs btrfs devicemapper overlay vfs zfs" -- "$(echo $cur | tr '[:upper:]' '[:lower:]')" ) )
return
;;
--storage-opt)
local devicemapper_options="
dm.basesize
dm.blkdiscard
dm.blocksize
dm.fs
dm.loopdatasize
dm.loopmetadatasize
dm.mkfsarg
dm.mountopt
dm.override_udev_sync_check
dm.thinpooldev
"
local zfs_options="zfs.fsname"
case $(__docker_value_of_option '--storage-driver|-s') in
'')
COMPREPLY=( $( compgen -W "$devicemapper_options $zfs_options" -S = -- "$cur" ) )
;;
devicemapper)
COMPREPLY=( $( compgen -W "$devicemapper_options" -S = -- "$cur" ) )
;;
zfs)
COMPREPLY=( $( compgen -W "$zfs_options" -S = -- "$cur" ) )
;;
*)
return
;;
esac
compopt -o nospace
return
;;
--log-level|-l)
@@ -528,6 +606,28 @@ _docker_daemon() {
;;
esac
__docker_complete_log_driver_options && return
# completions for --storage-opt
case "${words[$cword-2]}$prev=" in
*dm.blkdiscard=*)
COMPREPLY=( $( compgen -W "false true" -- "${cur#=}" ) )
return
;;
*dm.fs=*)
COMPREPLY=( $( compgen -W "ext4 xfs" -- "${cur#=}" ) )
return
;;
*dm.override_udev_sync_check=*)
COMPREPLY=( $( compgen -W "false true" -- "${cur#=}" ) )
return
;;
*dm.thinpooldev=*)
_filedir
return
;;
esac
case "$cur" in
-*)
COMPREPLY=( $( compgen -W "$boolean_options $options_with_args" -- "$cur" ) )
@@ -599,7 +699,7 @@ _docker_events() {
;;
*image=*)
cur="${cur#=}"
__docker_image_repos_and_tags_and_ids
__docker_images
return
;;
esac
@@ -620,7 +720,7 @@ _docker_exec() {
case "$cur" in
-*)
COMPREPLY=( $( compgen -W "--detach -d --help --interactive -i -t --tty -u --user" -- "$cur" ) )
COMPREPLY=( $( compgen -W "--detach -d --help --interactive -i --privileged -t --tty -u --user" -- "$cur" ) )
;;
*)
__docker_containers_running
@@ -657,7 +757,7 @@ _docker_history() {
*)
local counter=$(__docker_pos_first_nonflag)
if [ $cword -eq $counter ]; then
__docker_image_repos_and_tags_and_ids
__docker_images
fi
;;
esac
@@ -750,7 +850,7 @@ _docker_inspect() {
__docker_containers_all
;;
image)
__docker_image_repos_and_tags_and_ids
__docker_images
;;
esac
esac
@@ -865,16 +965,21 @@ _docker_ps() {
__docker_containers_all
;;
--filter|-f)
COMPREPLY=( $( compgen -S = -W "exited id label name status" -- "$cur" ) )
COMPREPLY=( $( compgen -S = -W "ancestor exited id label name status" -- "$cur" ) )
compopt -o nospace
return
;;
-n)
--format|-n)
return
;;
esac
case "${words[$cword-2]}$prev=" in
*ancestor=*)
cur="${cur#=}"
__docker_images
return
;;
*id=*)
cur="${cur#=}"
__docker_container_ids
@@ -893,7 +998,7 @@ _docker_ps() {
case "$cur" in
-*)
COMPREPLY=( $( compgen -W "--all -a --before --filter -f --help --latest -l -n --no-trunc --quiet -q --size -s --since" -- "$cur" ) )
COMPREPLY=( $( compgen -W "--all -a --before --filter -f --format --help --latest -l -n --no-trunc --quiet -q --size -s --since" -- "$cur" ) )
;;
esac
}
@@ -990,7 +1095,7 @@ _docker_rmi() {
COMPREPLY=( $( compgen -W "--force -f --help --no-prune" -- "$cur" ) )
;;
*)
__docker_image_repos_and_tags_and_ids
__docker_images
;;
esac
}
@@ -998,15 +1103,16 @@ _docker_rmi() {
_docker_run() {
local options_with_args="
--add-host
--blkio-weight
--attach -a
--blkio-weight
--cap-add
--cap-drop
--cgroup-parent
--cidfile
--cpuset
--cpu-period
--cpu-quota
--cpuset-cpus
--cpuset-mems
--cpu-shares -c
--device
--dns
@@ -1018,8 +1124,9 @@ _docker_run() {
--group-add
--hostname -h
--ipc
--label -l
--kernel-memory
--label-file
--label -l
--link
--log-driver
--log-opt
@@ -1027,14 +1134,15 @@ _docker_run() {
--mac-address
--memory -m
--memory-swap
--memory-swappiness
--name
--net
--pid
--publish -p
--restart
--security-opt
--user -u
--ulimit
--user -u
--uts
--volumes-from
--volume -v
@@ -1042,8 +1150,10 @@ _docker_run() {
"
local all_options="$options_with_args
--disable-content-trust=false
--help
--interactive -i
--oom-kill-disable
--privileged
--publish-all -P
--read-only
@@ -1053,7 +1163,7 @@ _docker_run() {
[ "$command" = "run" ] && all_options="$all_options
--detach -d
--rm
--sig-proxy
--sig-proxy=false
"
local options_with_args_glob=$(__docker_to_extglob "$options_with_args")
@@ -1195,9 +1305,8 @@ _docker_run() {
;;
*)
local counter=$( __docker_pos_first_nonflag $( __docker_to_alternatives "$options_with_args" ) )
if [ $cword -eq $counter ]; then
__docker_image_repos_and_tags_and_ids
__docker_images
fi
;;
esac
@@ -1216,7 +1325,7 @@ _docker_save() {
COMPREPLY=( $( compgen -W "--help --output -o" -- "$cur" ) )
;;
*)
__docker_image_repos_and_tags_and_ids
__docker_images
;;
esac
}
+4 -4
View File
@@ -134,9 +134,9 @@ complete -c docker -A -f -n '__fish_seen_subcommand_from create' -s i -l interac
complete -c docker -A -f -n '__fish_seen_subcommand_from create' -l ipc -d 'Default is to create a private IPC namespace (POSIX SysV IPC) for the container'
complete -c docker -A -f -n '__fish_seen_subcommand_from create' -l link -d 'Add link to another container in the form of <name|id>:alias'
complete -c docker -A -f -n '__fish_seen_subcommand_from create' -l lxc-conf -d '(lxc exec-driver only) Add custom lxc options --lxc-conf="lxc.cgroup.cpuset.cpus = 0,1"'
complete -c docker -A -f -n '__fish_seen_subcommand_from create' -s m -l memory -d 'Memory limit (format: <number><optional unit>, where unit = b, k, m or g)'
complete -c docker -A -f -n '__fish_seen_subcommand_from create' -s m -l memory -d 'Memory limit (format: <number>[<unit>], where unit = b, k, m or g)'
complete -c docker -A -f -n '__fish_seen_subcommand_from create' -l mac-address -d 'Container MAC address (e.g. 92:d0:c6:0a:29:33)'
complete -c docker -A -f -n '__fish_seen_subcommand_from create' -l memory-swap -d "Total memory usage (memory + swap), set '-1' to disable swap (format: <number><optional unit>, where unit = b, k, m or g)"
complete -c docker -A -f -n '__fish_seen_subcommand_from create' -l memory-swap -d "Total memory usage (memory + swap), set '-1' to disable swap (format: <number>[<unit>], where unit = b, k, m or g)"
complete -c docker -A -f -n '__fish_seen_subcommand_from create' -l name -d 'Assign a name to the container'
complete -c docker -A -f -n '__fish_seen_subcommand_from create' -l net -d 'Set the Network mode for the container'
complete -c docker -A -f -n '__fish_seen_subcommand_from create' -s P -l publish-all -d 'Publish all exposed ports to random ports on the host interfaces'
@@ -321,9 +321,9 @@ complete -c docker -A -f -n '__fish_seen_subcommand_from run' -s i -l interactiv
complete -c docker -A -f -n '__fish_seen_subcommand_from run' -l ipc -d 'Default is to create a private IPC namespace (POSIX SysV IPC) for the container'
complete -c docker -A -f -n '__fish_seen_subcommand_from run' -l link -d 'Add link to another container in the form of <name|id>:alias'
complete -c docker -A -f -n '__fish_seen_subcommand_from run' -l lxc-conf -d '(lxc exec-driver only) Add custom lxc options --lxc-conf="lxc.cgroup.cpuset.cpus = 0,1"'
complete -c docker -A -f -n '__fish_seen_subcommand_from run' -s m -l memory -d 'Memory limit (format: <number><optional unit>, where unit = b, k, m or g)'
complete -c docker -A -f -n '__fish_seen_subcommand_from run' -s m -l memory -d 'Memory limit (format: <number>[<unit>], where unit = b, k, m or g)'
complete -c docker -A -f -n '__fish_seen_subcommand_from run' -l mac-address -d 'Container MAC address (e.g. 92:d0:c6:0a:29:33)'
complete -c docker -A -f -n '__fish_seen_subcommand_from run' -l memory-swap -d "Total memory usage (memory + swap), set '-1' to disable swap (format: <number><optional unit>, where unit = b, k, m or g)"
complete -c docker -A -f -n '__fish_seen_subcommand_from run' -l memory-swap -d "Total memory usage (memory + swap), set '-1' to disable swap (format: <number>[<unit>], where unit = b, k, m or g)"
complete -c docker -A -f -n '__fish_seen_subcommand_from run' -l name -d 'Assign a name to the container'
complete -c docker -A -f -n '__fish_seen_subcommand_from run' -l net -d 'Set the Network mode for the container'
complete -c docker -A -f -n '__fish_seen_subcommand_from run' -s P -l publish-all -d 'Publish all exposed ports to random ports on the host interfaces'
+502
View File
@@ -0,0 +1,502 @@
GNU LESSER GENERAL PUBLIC LICENSE
Version 2.1, February 1999
Copyright (C) 1991, 1999 Free Software Foundation, Inc.
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
[This is the first released version of the Lesser GPL. It also counts
as the successor of the GNU Library Public License, version 2, hence
the version number 2.1.]
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
Licenses are intended to guarantee your freedom to share and change
free software--to make sure the software is free for all its users.
This license, the Lesser General Public License, applies to some
specially designated software packages--typically libraries--of the
Free Software Foundation and other authors who decide to use it. You
can use it too, but we suggest you first think carefully about whether
this license or the ordinary General Public License is the better
strategy to use in any particular case, based on the explanations below.
When we speak of free software, we are referring to freedom of use,
not price. Our General Public Licenses are designed to make sure that
you have the freedom to distribute copies of free software (and charge
for this service if you wish); that you receive source code or can get
it if you want it; that you can change the software and use pieces of
it in new free programs; and that you are informed that you can do
these things.
To protect your rights, we need to make restrictions that forbid
distributors to deny you these rights or to ask you to surrender these
rights. These restrictions translate to certain responsibilities for
you if you distribute copies of the library or if you modify it.
For example, if you distribute copies of the library, whether gratis
or for a fee, you must give the recipients all the rights that we gave
you. You must make sure that they, too, receive or can get the source
code. If you link other code with the library, you must provide
complete object files to the recipients, so that they can relink them
with the library after making changes to the library and recompiling
it. And you must show them these terms so they know their rights.
We protect your rights with a two-step method: (1) we copyright the
library, and (2) we offer you this license, which gives you legal
permission to copy, distribute and/or modify the library.
To protect each distributor, we want to make it very clear that
there is no warranty for the free library. Also, if the library is
modified by someone else and passed on, the recipients should know
that what they have is not the original version, so that the original
author's reputation will not be affected by problems that might be
introduced by others.
Finally, software patents pose a constant threat to the existence of
any free program. We wish to make sure that a company cannot
effectively restrict the users of a free program by obtaining a
restrictive license from a patent holder. Therefore, we insist that
any patent license obtained for a version of the library must be
consistent with the full freedom of use specified in this license.
Most GNU software, including some libraries, is covered by the
ordinary GNU General Public License. This license, the GNU Lesser
General Public License, applies to certain designated libraries, and
is quite different from the ordinary General Public License. We use
this license for certain libraries in order to permit linking those
libraries into non-free programs.
When a program is linked with a library, whether statically or using
a shared library, the combination of the two is legally speaking a
combined work, a derivative of the original library. The ordinary
General Public License therefore permits such linking only if the
entire combination fits its criteria of freedom. The Lesser General
Public License permits more lax criteria for linking other code with
the library.
We call this license the "Lesser" General Public License because it
does Less to protect the user's freedom than the ordinary General
Public License. It also provides other free software developers Less
of an advantage over competing non-free programs. These disadvantages
are the reason we use the ordinary General Public License for many
libraries. However, the Lesser license provides advantages in certain
special circumstances.
For example, on rare occasions, there may be a special need to
encourage the widest possible use of a certain library, so that it becomes
a de-facto standard. To achieve this, non-free programs must be
allowed to use the library. A more frequent case is that a free
library does the same job as widely used non-free libraries. In this
case, there is little to gain by limiting the free library to free
software only, so we use the Lesser General Public License.
In other cases, permission to use a particular library in non-free
programs enables a greater number of people to use a large body of
free software. For example, permission to use the GNU C Library in
non-free programs enables many more people to use the whole GNU
operating system, as well as its variant, the GNU/Linux operating
system.
Although the Lesser General Public License is Less protective of the
users' freedom, it does ensure that the user of a program that is
linked with the Library has the freedom and the wherewithal to run
that program using a modified version of the Library.
The precise terms and conditions for copying, distribution and
modification follow. Pay close attention to the difference between a
"work based on the library" and a "work that uses the library". The
former contains code derived from the library, whereas the latter must
be combined with the library in order to run.
GNU LESSER GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License Agreement applies to any software library or other
program which contains a notice placed by the copyright holder or
other authorized party saying it may be distributed under the terms of
this Lesser General Public License (also called "this License").
Each licensee is addressed as "you".
A "library" means a collection of software functions and/or data
prepared so as to be conveniently linked with application programs
(which use some of those functions and data) to form executables.
The "Library", below, refers to any such software library or work
which has been distributed under these terms. A "work based on the
Library" means either the Library or any derivative work under
copyright law: that is to say, a work containing the Library or a
portion of it, either verbatim or with modifications and/or translated
straightforwardly into another language. (Hereinafter, translation is
included without limitation in the term "modification".)
"Source code" for a work means the preferred form of the work for
making modifications to it. For a library, complete source code means
all the source code for all modules it contains, plus any associated
interface definition files, plus the scripts used to control compilation
and installation of the library.
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running a program using the Library is not restricted, and output from
such a program is covered only if its contents constitute a work based
on the Library (independent of the use of the Library in a tool for
writing it). Whether that is true depends on what the Library does
and what the program that uses the Library does.
1. You may copy and distribute verbatim copies of the Library's
complete source code as you receive it, in any medium, provided that
you conspicuously and appropriately publish on each copy an
appropriate copyright notice and disclaimer of warranty; keep intact
all the notices that refer to this License and to the absence of any
warranty; and distribute a copy of this License along with the
Library.
You may charge a fee for the physical act of transferring a copy,
and you may at your option offer warranty protection in exchange for a
fee.
2. You may modify your copy or copies of the Library or any portion
of it, thus forming a work based on the Library, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) The modified work must itself be a software library.
b) You must cause the files modified to carry prominent notices
stating that you changed the files and the date of any change.
c) You must cause the whole of the work to be licensed at no
charge to all third parties under the terms of this License.
d) If a facility in the modified Library refers to a function or a
table of data to be supplied by an application program that uses
the facility, other than as an argument passed when the facility
is invoked, then you must make a good faith effort to ensure that,
in the event an application does not supply such function or
table, the facility still operates, and performs whatever part of
its purpose remains meaningful.
(For example, a function in a library to compute square roots has
a purpose that is entirely well-defined independent of the
application. Therefore, Subsection 2d requires that any
application-supplied function or table used by this function must
be optional: if the application does not supply it, the square
root function must still compute square roots.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Library,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Library, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote
it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Library.
In addition, mere aggregation of another work not based on the Library
with the Library (or with a work based on the Library) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may opt to apply the terms of the ordinary GNU General Public
License instead of this License to a given copy of the Library. To do
this, you must alter all the notices that refer to this License, so
that they refer to the ordinary GNU General Public License, version 2,
instead of to this License. (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.) Do not make any other change in
these notices.
Once this change is made in a given copy, it is irreversible for
that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.
This option is useful when you wish to copy part of the code of
the Library into a program that is not a library.
4. You may copy and distribute the Library (or a portion or
derivative of it, under Section 2) in object code or executable form
under the terms of Sections 1 and 2 above provided that you accompany
it with the complete corresponding machine-readable source code, which
must be distributed under the terms of Sections 1 and 2 above on a
medium customarily used for software interchange.
If distribution of object code is made by offering access to copy
from a designated place, then offering equivalent access to copy the
source code from the same place satisfies the requirement to
distribute the source code, even though third parties are not
compelled to copy the source along with the object code.
5. A program that contains no derivative of any portion of the
Library, but is designed to work with the Library by being compiled or
linked with it, is called a "work that uses the Library". Such a
work, in isolation, is not a derivative work of the Library, and
therefore falls outside the scope of this License.
However, linking a "work that uses the Library" with the Library
creates an executable that is a derivative of the Library (because it
contains portions of the Library), rather than a "work that uses the
library". The executable is therefore covered by this License.
Section 6 states terms for distribution of such executables.
When a "work that uses the Library" uses material from a header file
that is part of the Library, the object code for the work may be a
derivative work of the Library even though the source code is not.
Whether this is true is especially significant if the work can be
linked without the Library, or if the work is itself a library. The
threshold for this to be true is not precisely defined by law.
If such an object file uses only numerical parameters, data
structure layouts and accessors, and small macros and small inline
functions (ten lines or less in length), then the use of the object
file is unrestricted, regardless of whether it is legally a derivative
work. (Executables containing this object code plus portions of the
Library will still fall under Section 6.)
Otherwise, if the work is a derivative of the Library, you may
distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.
6. As an exception to the Sections above, you may also combine or
link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
under terms of your choice, provided that the terms permit
modification of the work for the customer's own use and reverse
engineering for debugging such modifications.
You must give prominent notice with each copy of the work that the
Library is used in it and that the Library and its use are covered by
this License. You must supply a copy of this License. If the work
during execution displays copyright notices, you must include the
copyright notice for the Library among them, as well as a reference
directing the user to the copy of this License. Also, you must do one
of these things:
a) Accompany the work with the complete corresponding
machine-readable source code for the Library including whatever
changes were used in the work (which must be distributed under
Sections 1 and 2 above); and, if the work is an executable linked
with the Library, with the complete machine-readable "work that
uses the Library", as object code and/or source code, so that the
user can modify the Library and then relink to produce a modified
executable containing the modified Library. (It is understood
that the user who changes the contents of definitions files in the
Library will not necessarily be able to recompile the application
to use the modified definitions.)
b) Use a suitable shared library mechanism for linking with the
Library. A suitable mechanism is one that (1) uses at run time a
copy of the library already present on the user's computer system,
rather than copying library functions into the executable, and (2)
will operate properly with a modified version of the library, if
the user installs one, as long as the modified version is
interface-compatible with the version that the work was made with.
c) Accompany the work with a written offer, valid for at
least three years, to give the same user the materials
specified in Subsection 6a, above, for a charge no more
than the cost of performing this distribution.
d) If distribution of the work is made by offering access to copy
from a designated place, offer equivalent access to copy the above
specified materials from the same place.
e) Verify that the user has already received a copy of these
materials or that you have already sent this user a copy.
For an executable, the required form of the "work that uses the
Library" must include any data and utility programs needed for
reproducing the executable from it. However, as a special exception,
the materials to be distributed need not include anything that is
normally distributed (in either source or binary form) with the major
components (compiler, kernel, and so on) of the operating system on
which the executable runs, unless that component itself accompanies
the executable.
It may happen that this requirement contradicts the license
restrictions of other proprietary libraries that do not normally
accompany the operating system. Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.
7. You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
library, provided that the separate distribution of the work based on
the Library and of the other library facilities is otherwise
permitted, and provided that you do these two things:
a) Accompany the combined library with a copy of the same work
based on the Library, uncombined with any other library
facilities. This must be distributed under the terms of the
Sections above.
b) Give prominent notice with the combined library of the fact
that part of it is a work based on the Library, and explaining
where to find the accompanying uncombined form of the same work.
8. You may not copy, modify, sublicense, link with, or distribute
the Library except as expressly provided under this License. Any
attempt otherwise to copy, modify, sublicense, link with, or
distribute the Library is void, and will automatically terminate your
rights under this License. However, parties who have received copies,
or rights, from you under this License will not have their licenses
terminated so long as such parties remain in full compliance.
9. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Library or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Library (or any work based on the
Library), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Library or works based on it.
10. Each time you redistribute the Library (or any work based on the
Library), the recipient automatically receives a license from the
original licensor to copy, distribute, link with or modify the Library
subject to these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties with
this License.
11. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Library at all. For example, if a patent
license would not permit royalty-free redistribution of the Library by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Library.
If any portion of this section is held invalid or unenforceable under any
particular circumstance, the balance of the section is intended to apply,
and the section as a whole is intended to apply in other circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
12. If the distribution and/or use of the Library is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Library under this License may add
an explicit geographical distribution limitation excluding those countries,
so that distribution is permitted only in or among countries not thus
excluded. In such case, this License incorporates the limitation as if
written in the body of this License.
13. The Free Software Foundation may publish revised and/or new
versions of the Lesser General Public License from time to time.
Such new versions will be similar in spirit to the present version,
but may differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the Library
specifies a version number of this License which applies to it and
"any later version", you have the option of following the terms and
conditions either of that version or of any later version published by
the Free Software Foundation. If the Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.
14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
write to the author to ask for permission. For software which is
copyrighted by the Free Software Foundation, write to the Free
Software Foundation; we sometimes make exceptions for this. Our
decision will be guided by the two goals of preserving the free status
of all derivatives of our free software and of promoting the sharing
and reuse of software generally.
NO WARRANTY
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Libraries
If you develop a new library, and you want it to be of the greatest
possible use to the public, we recommend making it free software that
everyone can redistribute and change. You can do so by permitting
redistribution under these terms (or, alternatively, under the terms of the
ordinary General Public License).
To apply these terms, attach the following notices to the library. It is
safest to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least the
"copyright" line and a pointer to where the full notice is found.
<one line to give the library's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Also add information on how to contact you by electronic and paper mail.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the library, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the
library `Frob' (a library for tweaking knobs) written by James Random Hacker.
<signature of Ty Coon>, 1 April 1990
Ty Coon, President of Vice
That's all there is to it!
+16
View File
@@ -0,0 +1,16 @@
TARGETS?=docker
MODULES?=${TARGETS:=.pp.bz2}
SHAREDIR?=/usr/share
all: ${TARGETS:=.pp.bz2}
%.pp.bz2: %.pp
@echo Compressing $^ -\> $@
bzip2 -9 $^
%.pp: %.te
make -f ${SHAREDIR}/selinux/devel/Makefile $@
clean:
rm -f *~ *.tc *.pp *.pp.bz2
rm -rf tmp *.tar.gz
+24
View File
@@ -0,0 +1,24 @@
/root/\.docker gen_context(system_u:object_r:docker_home_t,s0)
/usr/bin/docker -- gen_context(system_u:object_r:docker_exec_t,s0)
/usr/lib/systemd/system/docker.service -- gen_context(system_u:object_r:docker_unit_file_t,s0)
/etc/docker(/.*)? gen_context(system_u:object_r:docker_config_t,s0)
/var/lib/docker(/.*)? gen_context(system_u:object_r:docker_var_lib_t,s0)
/var/lib/kublet(/.*)? gen_context(system_u:object_r:docker_var_lib_t,s0)
/var/lib/docker/vfs(/.*)? gen_context(system_u:object_r:svirt_sandbox_file_t,s0)
/var/run/docker\.pid -- gen_context(system_u:object_r:docker_var_run_t,s0)
/var/run/docker\.sock -s gen_context(system_u:object_r:docker_var_run_t,s0)
/var/run/docker-client(/.*)? gen_context(system_u:object_r:docker_var_run_t,s0)
/var/lock/lxc(/.*)? gen_context(system_u:object_r:docker_lock_t,s0)
/var/log/lxc(/.*)? gen_context(system_u:object_r:docker_log_t,s0)
/var/lib/docker/init(/.*)? gen_context(system_u:object_r:docker_share_t,s0)
/var/lib/docker/containers/.*/hosts gen_context(system_u:object_r:docker_share_t,s0)
/var/lib/docker/containers/.*/hostname gen_context(system_u:object_r:docker_share_t,s0)
/var/lib/docker/.*/config\.env gen_context(system_u:object_r:docker_share_t,s0)
+467
View File
@@ -0,0 +1,467 @@
## <summary>The open-source application container engine.</summary>
########################################
## <summary>
## Execute docker in the docker domain.
## </summary>
## <param name="domain">
## <summary>
## Domain allowed to transition.
## </summary>
## </param>
#
interface(`docker_domtrans',`
gen_require(`
type docker_t, docker_exec_t;
')
corecmd_search_bin($1)
domtrans_pattern($1, docker_exec_t, docker_t)
')
########################################
## <summary>
## Execute docker in the caller domain.
## </summary>
## <param name="domain">
## <summary>
## Domain allowed to transition.
## </summary>
## </param>
#
interface(`docker_exec',`
gen_require(`
type docker_exec_t;
')
corecmd_search_bin($1)
can_exec($1, docker_exec_t)
')
########################################
## <summary>
## Search docker lib directories.
## </summary>
## <param name="domain">
## <summary>
## Domain allowed access.
## </summary>
## </param>
#
interface(`docker_search_lib',`
gen_require(`
type docker_var_lib_t;
')
allow $1 docker_var_lib_t:dir search_dir_perms;
files_search_var_lib($1)
')
########################################
## <summary>
## Execute docker lib directories.
## </summary>
## <param name="domain">
## <summary>
## Domain allowed access.
## </summary>
## </param>
#
interface(`docker_exec_lib',`
gen_require(`
type docker_var_lib_t;
')
allow $1 docker_var_lib_t:dir search_dir_perms;
can_exec($1, docker_var_lib_t)
')
########################################
## <summary>
## Read docker lib files.
## </summary>
## <param name="domain">
## <summary>
## Domain allowed access.
## </summary>
## </param>
#
interface(`docker_read_lib_files',`
gen_require(`
type docker_var_lib_t;
')
files_search_var_lib($1)
read_files_pattern($1, docker_var_lib_t, docker_var_lib_t)
')
########################################
## <summary>
## Read docker share files.
## </summary>
## <param name="domain">
## <summary>
## Domain allowed access.
## </summary>
## </param>
#
interface(`docker_read_share_files',`
gen_require(`
type docker_share_t;
')
files_search_var_lib($1)
read_files_pattern($1, docker_share_t, docker_share_t)
')
########################################
## <summary>
## Manage docker lib files.
## </summary>
## <param name="domain">
## <summary>
## Domain allowed access.
## </summary>
## </param>
#
interface(`docker_manage_lib_files',`
gen_require(`
type docker_var_lib_t;
')
files_search_var_lib($1)
manage_files_pattern($1, docker_var_lib_t, docker_var_lib_t)
manage_lnk_files_pattern($1, docker_var_lib_t, docker_var_lib_t)
')
########################################
## <summary>
## Manage docker lib directories.
## </summary>
## <param name="domain">
## <summary>
## Domain allowed access.
## </summary>
## </param>
#
interface(`docker_manage_lib_dirs',`
gen_require(`
type docker_var_lib_t;
')
files_search_var_lib($1)
manage_dirs_pattern($1, docker_var_lib_t, docker_var_lib_t)
')
########################################
## <summary>
## Create objects in a docker var lib directory
## with an automatic type transition to
## a specified private type.
## </summary>
## <param name="domain">
## <summary>
## Domain allowed access.
## </summary>
## </param>
## <param name="private_type">
## <summary>
## The type of the object to create.
## </summary>
## </param>
## <param name="object_class">
## <summary>
## The class of the object to be created.
## </summary>
## </param>
## <param name="name" optional="true">
## <summary>
## The name of the object being created.
## </summary>
## </param>
#
interface(`docker_lib_filetrans',`
gen_require(`
type docker_var_lib_t;
')
filetrans_pattern($1, docker_var_lib_t, $2, $3, $4)
')
########################################
## <summary>
## Read docker PID files.
## </summary>
## <param name="domain">
## <summary>
## Domain allowed access.
## </summary>
## </param>
#
interface(`docker_read_pid_files',`
gen_require(`
type docker_var_run_t;
')
files_search_pids($1)
read_files_pattern($1, docker_var_run_t, docker_var_run_t)
')
########################################
## <summary>
## Execute docker server in the docker domain.
## </summary>
## <param name="domain">
## <summary>
## Domain allowed to transition.
## </summary>
## </param>
#
interface(`docker_systemctl',`
gen_require(`
type docker_t;
type docker_unit_file_t;
')
systemd_exec_systemctl($1)
init_reload_services($1)
systemd_read_fifo_file_passwd_run($1)
allow $1 docker_unit_file_t:file read_file_perms;
allow $1 docker_unit_file_t:service manage_service_perms;
ps_process_pattern($1, docker_t)
')
########################################
## <summary>
## Read and write docker shared memory.
## </summary>
## <param name="domain">
## <summary>
## Domain allowed access.
## </summary>
## </param>
#
interface(`docker_rw_sem',`
gen_require(`
type docker_t;
')
allow $1 docker_t:sem rw_sem_perms;
')
#######################################
## <summary>
## Read and write the docker pty type.
## </summary>
## <param name="domain">
## <summary>
## Domain allowed access.
## </summary>
## </param>
#
interface(`docker_use_ptys',`
gen_require(`
type docker_devpts_t;
')
allow $1 docker_devpts_t:chr_file rw_term_perms;
')
#######################################
## <summary>
## Allow domain to create docker content
## </summary>
## <param name="domain">
## <summary>
## Domain allowed access.
## </summary>
## </param>
#
interface(`docker_filetrans_named_content',`
gen_require(`
type docker_var_lib_t;
type docker_share_t;
type docker_log_t;
type docker_var_run_t;
type docker_home_t;
')
files_pid_filetrans($1, docker_var_run_t, file, "docker.pid")
files_pid_filetrans($1, docker_var_run_t, sock_file, "docker.sock")
files_pid_filetrans($1, docker_var_run_t, dir, "docker-client")
logging_log_filetrans($1, docker_log_t, dir, "lxc")
files_var_lib_filetrans($1, docker_var_lib_t, dir, "docker")
filetrans_pattern($1, docker_var_lib_t, docker_share_t, file, "config.env")
filetrans_pattern($1, docker_var_lib_t, docker_share_t, file, "hosts")
filetrans_pattern($1, docker_var_lib_t, docker_share_t, file, "hostname")
filetrans_pattern($1, docker_var_lib_t, docker_share_t, file, "resolv.conf")
filetrans_pattern($1, docker_var_lib_t, docker_share_t, dir, "init")
userdom_admin_home_dir_filetrans($1, docker_home_t, dir, ".docker")
')
########################################
## <summary>
## Connect to docker over a unix stream socket.
## </summary>
## <param name="domain">
## <summary>
## Domain allowed access.
## </summary>
## </param>
#
interface(`docker_stream_connect',`
gen_require(`
type docker_t, docker_var_run_t;
')
files_search_pids($1)
stream_connect_pattern($1, docker_var_run_t, docker_var_run_t, docker_t)
')
########################################
## <summary>
## Connect to SPC containers over a unix stream socket.
## </summary>
## <param name="domain">
## <summary>
## Domain allowed access.
## </summary>
## </param>
#
interface(`docker_spc_stream_connect',`
gen_require(`
type spc_t, spc_var_run_t;
')
files_search_pids($1)
files_write_all_pid_sockets($1)
allow $1 spc_t:unix_stream_socket connectto;
')
########################################
## <summary>
## All of the rules required to administrate
## an docker environment
## </summary>
## <param name="domain">
## <summary>
## Domain allowed access.
## </summary>
## </param>
#
interface(`docker_admin',`
gen_require(`
type docker_t;
type docker_var_lib_t, docker_var_run_t;
type docker_unit_file_t;
type docker_lock_t;
type docker_log_t;
type docker_config_t;
')
allow $1 docker_t:process { ptrace signal_perms };
ps_process_pattern($1, docker_t)
admin_pattern($1, docker_config_t)
files_search_var_lib($1)
admin_pattern($1, docker_var_lib_t)
files_search_pids($1)
admin_pattern($1, docker_var_run_t)
files_search_locks($1)
admin_pattern($1, docker_lock_t)
logging_search_logs($1)
admin_pattern($1, docker_log_t)
docker_systemctl($1)
admin_pattern($1, docker_unit_file_t)
allow $1 docker_unit_file_t:service all_service_perms;
optional_policy(`
systemd_passwd_agent_exec($1)
systemd_read_fifo_file_passwd_run($1)
')
')
interface(`domain_stub_named_filetrans_domain',`
gen_require(`
attribute named_filetrans_domain;
')
')
interface(`lvm_stub',`
gen_require(`
type lvm_t;
')
')
interface(`staff_stub',`
gen_require(`
type staff_t;
')
')
interface(`virt_stub_lxc',`
gen_require(`
type virtd_lxc_t;
')
')
interface(`virt_stub_svirt_sandbox_domain',`
gen_require(`
attribute svirt_sandbox_domain;
')
')
interface(`virt_stub_svirt_sandbox_file',`
gen_require(`
type svirt_sandbox_file_t;
')
')
interface(`fs_dontaudit_remount_tmpfs',`
gen_require(`
type tmpfs_t;
')
dontaudit $1 tmpfs_t:filesystem remount;
')
interface(`dev_dontaudit_list_all_dev_nodes',`
gen_require(`
type device_t;
')
dontaudit $1 device_t:dir list_dir_perms;
')
interface(`kernel_unlabeled_entry_type',`
gen_require(`
type unlabeled_t;
')
domain_entry_file($1, unlabeled_t)
')
interface(`kernel_unlabeled_domtrans',`
gen_require(`
type unlabeled_t;
')
read_lnk_files_pattern($1, unlabeled_t, unlabeled_t)
domain_transition_pattern($1, unlabeled_t, $2)
type_transition $1 unlabeled_t:process $2;
')
interface(`files_write_all_pid_sockets',`
gen_require(`
attribute pidfile;
')
allow $1 pidfile:sock_file write_sock_file_perms;
')
interface(`dev_dontaudit_mounton_sysfs',`
gen_require(`
type sysfs_t;
')
dontaudit $1 sysfs_t:dir mounton;
')
+418
View File
@@ -0,0 +1,418 @@
policy_module(docker, 1.0.0)
########################################
#
# Declarations
#
## <desc>
## <p>
## Allow sandbox containers manage fuse files
## </p>
## </desc>
gen_tunable(virt_sandbox_use_fusefs, false)
## <desc>
## <p>
## Determine whether docker can
## connect to all TCP ports.
## </p>
## </desc>
gen_tunable(docker_connect_any, false)
type docker_t;
type docker_exec_t;
init_daemon_domain(docker_t, docker_exec_t)
domain_subj_id_change_exemption(docker_t)
domain_role_change_exemption(docker_t)
type spc_t;
domain_type(spc_t)
role system_r types spc_t;
type spc_var_run_t;
files_pid_file(spc_var_run_t)
type docker_var_lib_t;
files_type(docker_var_lib_t)
type docker_home_t;
userdom_user_home_content(docker_home_t)
type docker_config_t;
files_config_file(docker_config_t)
type docker_lock_t;
files_lock_file(docker_lock_t)
type docker_log_t;
logging_log_file(docker_log_t)
type docker_tmp_t;
files_tmp_file(docker_tmp_t)
type docker_tmpfs_t;
files_tmpfs_file(docker_tmpfs_t)
type docker_var_run_t;
files_pid_file(docker_var_run_t)
type docker_unit_file_t;
systemd_unit_file(docker_unit_file_t)
type docker_devpts_t;
term_pty(docker_devpts_t)
type docker_share_t;
files_type(docker_share_t)
########################################
#
# docker local policy
#
allow docker_t self:capability { chown kill fowner fsetid mknod net_admin net_bind_service net_raw setfcap };
allow docker_t self:tun_socket relabelto;
allow docker_t self:process { getattr signal_perms setrlimit setfscreate };
allow docker_t self:fifo_file rw_fifo_file_perms;
allow docker_t self:unix_stream_socket create_stream_socket_perms;
allow docker_t self:tcp_socket create_stream_socket_perms;
allow docker_t self:udp_socket create_socket_perms;
allow docker_t self:capability2 block_suspend;
manage_files_pattern(docker_t, docker_home_t, docker_home_t)
manage_dirs_pattern(docker_t, docker_home_t, docker_home_t)
manage_lnk_files_pattern(docker_t, docker_home_t, docker_home_t)
userdom_admin_home_dir_filetrans(docker_t, docker_home_t, dir, ".docker")
manage_dirs_pattern(docker_t, docker_config_t, docker_config_t)
manage_files_pattern(docker_t, docker_config_t, docker_config_t)
files_etc_filetrans(docker_t, docker_config_t, dir, "docker")
manage_dirs_pattern(docker_t, docker_lock_t, docker_lock_t)
manage_files_pattern(docker_t, docker_lock_t, docker_lock_t)
files_lock_filetrans(docker_t, docker_lock_t, { dir file }, "lxc")
manage_dirs_pattern(docker_t, docker_log_t, docker_log_t)
manage_files_pattern(docker_t, docker_log_t, docker_log_t)
manage_lnk_files_pattern(docker_t, docker_log_t, docker_log_t)
logging_log_filetrans(docker_t, docker_log_t, { dir file lnk_file })
allow docker_t docker_log_t:dir_file_class_set { relabelfrom relabelto };
manage_dirs_pattern(docker_t, docker_tmp_t, docker_tmp_t)
manage_files_pattern(docker_t, docker_tmp_t, docker_tmp_t)
manage_lnk_files_pattern(docker_t, docker_tmp_t, docker_tmp_t)
files_tmp_filetrans(docker_t, docker_tmp_t, { dir file lnk_file })
manage_dirs_pattern(docker_t, docker_tmpfs_t, docker_tmpfs_t)
manage_files_pattern(docker_t, docker_tmpfs_t, docker_tmpfs_t)
manage_lnk_files_pattern(docker_t, docker_tmpfs_t, docker_tmpfs_t)
manage_fifo_files_pattern(docker_t, docker_tmpfs_t, docker_tmpfs_t)
manage_chr_files_pattern(docker_t, docker_tmpfs_t, docker_tmpfs_t)
manage_blk_files_pattern(docker_t, docker_tmpfs_t, docker_tmpfs_t)
allow docker_t docker_tmpfs_t:dir relabelfrom;
can_exec(docker_t, docker_tmpfs_t)
fs_tmpfs_filetrans(docker_t, docker_tmpfs_t, { dir file })
allow docker_t docker_tmpfs_t:chr_file mounton;
manage_dirs_pattern(docker_t, docker_share_t, docker_share_t)
manage_files_pattern(docker_t, docker_share_t, docker_share_t)
manage_lnk_files_pattern(docker_t, docker_share_t, docker_share_t)
allow docker_t docker_share_t:dir_file_class_set { relabelfrom relabelto };
can_exec(docker_t, docker_share_t)
#docker_filetrans_named_content(docker_t)
manage_dirs_pattern(docker_t, docker_var_lib_t, docker_var_lib_t)
manage_chr_files_pattern(docker_t, docker_var_lib_t, docker_var_lib_t)
manage_blk_files_pattern(docker_t, docker_var_lib_t, docker_var_lib_t)
manage_files_pattern(docker_t, docker_var_lib_t, docker_var_lib_t)
manage_lnk_files_pattern(docker_t, docker_var_lib_t, docker_var_lib_t)
allow docker_t docker_var_lib_t:dir_file_class_set { relabelfrom relabelto };
files_var_lib_filetrans(docker_t, docker_var_lib_t, { dir file lnk_file })
manage_dirs_pattern(docker_t, docker_var_run_t, docker_var_run_t)
manage_files_pattern(docker_t, docker_var_run_t, docker_var_run_t)
manage_sock_files_pattern(docker_t, docker_var_run_t, docker_var_run_t)
manage_lnk_files_pattern(docker_t, docker_var_run_t, docker_var_run_t)
files_pid_filetrans(docker_t, docker_var_run_t, { dir file lnk_file sock_file })
allow docker_t docker_devpts_t:chr_file { relabelfrom rw_chr_file_perms setattr_chr_file_perms };
term_create_pty(docker_t, docker_devpts_t)
kernel_read_system_state(docker_t)
kernel_read_network_state(docker_t)
kernel_read_all_sysctls(docker_t)
kernel_rw_net_sysctls(docker_t)
kernel_setsched(docker_t)
kernel_read_all_proc(docker_t)
domain_use_interactive_fds(docker_t)
domain_dontaudit_read_all_domains_state(docker_t)
corecmd_exec_bin(docker_t)
corecmd_exec_shell(docker_t)
corenet_tcp_bind_generic_node(docker_t)
corenet_tcp_sendrecv_generic_if(docker_t)
corenet_tcp_sendrecv_generic_node(docker_t)
corenet_tcp_sendrecv_generic_port(docker_t)
corenet_tcp_bind_all_ports(docker_t)
corenet_tcp_connect_http_port(docker_t)
corenet_tcp_connect_commplex_main_port(docker_t)
corenet_udp_sendrecv_generic_if(docker_t)
corenet_udp_sendrecv_generic_node(docker_t)
corenet_udp_sendrecv_all_ports(docker_t)
corenet_udp_bind_generic_node(docker_t)
corenet_udp_bind_all_ports(docker_t)
files_read_config_files(docker_t)
files_dontaudit_getattr_all_dirs(docker_t)
files_dontaudit_getattr_all_files(docker_t)
fs_read_cgroup_files(docker_t)
fs_read_tmpfs_symlinks(docker_t)
fs_search_all(docker_t)
fs_getattr_all_fs(docker_t)
storage_raw_rw_fixed_disk(docker_t)
auth_use_nsswitch(docker_t)
auth_dontaudit_getattr_shadow(docker_t)
init_read_state(docker_t)
init_status(docker_t)
logging_send_audit_msgs(docker_t)
logging_send_syslog_msg(docker_t)
miscfiles_read_localization(docker_t)
mount_domtrans(docker_t)
seutil_read_default_contexts(docker_t)
seutil_read_config(docker_t)
sysnet_dns_name_resolve(docker_t)
sysnet_exec_ifconfig(docker_t)
optional_policy(`
rpm_exec(docker_t)
rpm_read_db(docker_t)
rpm_exec(docker_t)
')
optional_policy(`
fstools_domtrans(docker_t)
')
optional_policy(`
iptables_domtrans(docker_t)
')
optional_policy(`
openvswitch_stream_connect(docker_t)
')
#
# lxc rules
#
allow docker_t self:capability { dac_override setgid setpcap setuid sys_admin sys_boot sys_chroot sys_ptrace };
allow docker_t self:process { getcap setcap setexec setpgid setsched signal_perms };
allow docker_t self:netlink_route_socket rw_netlink_socket_perms;;
allow docker_t self:netlink_audit_socket create_netlink_socket_perms;
allow docker_t self:unix_dgram_socket { create_socket_perms sendto };
allow docker_t self:unix_stream_socket { create_stream_socket_perms connectto };
allow docker_t docker_var_lib_t:dir mounton;
allow docker_t docker_var_lib_t:chr_file mounton;
can_exec(docker_t, docker_var_lib_t)
kernel_dontaudit_setsched(docker_t)
kernel_get_sysvipc_info(docker_t)
kernel_request_load_module(docker_t)
kernel_mounton_messages(docker_t)
kernel_mounton_all_proc(docker_t)
kernel_mounton_all_sysctls(docker_t)
kernel_unlabeled_entry_type(spc_t)
kernel_unlabeled_domtrans(docker_t, spc_t)
dev_getattr_all(docker_t)
dev_getattr_sysfs_fs(docker_t)
dev_read_urand(docker_t)
dev_read_lvm_control(docker_t)
dev_rw_sysfs(docker_t)
dev_rw_loop_control(docker_t)
dev_rw_lvm_control(docker_t)
files_getattr_isid_type_dirs(docker_t)
files_manage_isid_type_dirs(docker_t)
files_manage_isid_type_files(docker_t)
files_manage_isid_type_symlinks(docker_t)
files_manage_isid_type_chr_files(docker_t)
files_manage_isid_type_blk_files(docker_t)
files_exec_isid_files(docker_t)
files_mounton_isid(docker_t)
files_mounton_non_security(docker_t)
files_mounton_isid_type_chr_file(docker_t)
fs_mount_all_fs(docker_t)
fs_unmount_all_fs(docker_t)
fs_remount_all_fs(docker_t)
files_mounton_isid(docker_t)
fs_manage_cgroup_dirs(docker_t)
fs_manage_cgroup_files(docker_t)
fs_relabelfrom_xattr_fs(docker_t)
fs_relabelfrom_tmpfs(docker_t)
fs_read_tmpfs_symlinks(docker_t)
fs_list_hugetlbfs(docker_t)
term_use_generic_ptys(docker_t)
term_use_ptmx(docker_t)
term_getattr_pty_fs(docker_t)
term_relabel_pty_fs(docker_t)
term_mounton_unallocated_ttys(docker_t)
modutils_domtrans_insmod(docker_t)
systemd_status_all_unit_files(docker_t)
systemd_start_systemd_services(docker_t)
userdom_stream_connect(docker_t)
userdom_search_user_home_content(docker_t)
userdom_read_all_users_state(docker_t)
userdom_relabel_user_home_files(docker_t)
userdom_relabel_user_tmp_files(docker_t)
userdom_relabel_user_tmp_dirs(docker_t)
optional_policy(`
gpm_getattr_gpmctl(docker_t)
')
optional_policy(`
dbus_system_bus_client(docker_t)
init_dbus_chat(docker_t)
init_start_transient_unit(docker_t)
optional_policy(`
systemd_dbus_chat_logind(docker_t)
')
optional_policy(`
firewalld_dbus_chat(docker_t)
')
')
optional_policy(`
udev_read_db(docker_t)
')
optional_policy(`
virt_read_config(docker_t)
virt_exec(docker_t)
virt_stream_connect(docker_t)
virt_stream_connect_sandbox(docker_t)
virt_exec_sandbox_files(docker_t)
virt_manage_sandbox_files(docker_t)
virt_relabel_sandbox_filesystem(docker_t)
# for lxc
virt_transition_svirt_sandbox(docker_t, system_r)
virt_mounton_sandbox_file(docker_t)
# virt_attach_sandbox_tun_iface(docker_t)
allow docker_t svirt_sandbox_domain:tun_socket relabelfrom;
')
tunable_policy(`docker_connect_any',`
corenet_tcp_connect_all_ports(docker_t)
corenet_sendrecv_all_packets(docker_t)
corenet_tcp_sendrecv_all_ports(docker_t)
')
########################################
#
# spc local policy
#
domain_entry_file(spc_t, docker_share_t)
domain_entry_file(spc_t, docker_var_lib_t)
role system_r types spc_t;
domain_entry_file(spc_t, docker_share_t)
domain_entry_file(spc_t, docker_var_lib_t)
domtrans_pattern(docker_t, docker_share_t, spc_t)
domtrans_pattern(docker_t, docker_var_lib_t, spc_t)
allow docker_t spc_t:process { setsched signal_perms };
ps_process_pattern(docker_t, spc_t)
allow docker_t spc_t:socket_class_set { relabelto relabelfrom };
optional_policy(`
dbus_chat_system_bus(spc_t)
')
optional_policy(`
unconfined_domain_noaudit(spc_t)
')
optional_policy(`
unconfined_domain(docker_t)
')
optional_policy(`
virt_transition_svirt_sandbox(spc_t, system_r)
')
########################################
#
# docker upstream policy
#
optional_policy(`
# domain_stub_named_filetrans_domain()
gen_require(`
attribute named_filetrans_domain;
')
docker_filetrans_named_content(named_filetrans_domain)
')
optional_policy(`
lvm_stub()
docker_rw_sem(lvm_t)
')
optional_policy(`
staff_stub()
docker_stream_connect(staff_t)
docker_exec(staff_t)
')
optional_policy(`
virt_stub_lxc()
docker_exec_lib(virtd_lxc_t)
')
optional_policy(`
virt_stub_svirt_sandbox_domain()
virt_stub_svirt_sandbox_file()
allow svirt_sandbox_domain self:netlink_kobject_uevent_socket create_socket_perms;
docker_read_share_files(svirt_sandbox_domain)
docker_lib_filetrans(svirt_sandbox_domain,svirt_sandbox_file_t, sock_file)
docker_use_ptys(svirt_sandbox_domain)
docker_spc_stream_connect(svirt_sandbox_domain)
fs_list_tmpfs(svirt_sandbox_domain)
fs_rw_hugetlbfs_files(svirt_sandbox_domain)
fs_dontaudit_remount_tmpfs(svirt_sandbox_domain)
dev_dontaudit_mounton_sysfs(svirt_sandbox_domain)
tunable_policy(`virt_sandbox_use_fusefs',`
fs_manage_fusefs_dirs(svirt_sandbox_domain)
fs_manage_fusefs_files(svirt_sandbox_domain)
fs_manage_fusefs_symlinks(svirt_sandbox_domain)
')
gen_require(`
attribute domain;
')
dontaudit svirt_sandbox_domain domain:key {search link};
')
Binary file not shown.
Executable → Regular
+9 -24
View File
@@ -1,34 +1,19 @@
#!/sbin/runscript
#!/sbin/openrc-run
# Copyright 1999-2013 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $
DOCKER_LOGFILE=${DOCKER_LOGFILE:-/var/log/${SVCNAME}.log}
DOCKER_PIDFILE=${DOCKER_PIDFILE:-/run/${SVCNAME}.pid}
DOCKER_BINARY=${DOCKER_BINARY:-/usr/bin/docker}
DOCKER_OPTS=${DOCKER_OPTS:-}
command="${DOCKER_BINARY:-/usr/bin/docker}"
pidfile="${DOCKER_PIDFILE:-/run/${RC_SVCNAME}.pid}"
command_args="daemon -p \"${pidfile}\" ${DOCKER_OPTS}"
DOCKER_LOGFILE="${DOCKER_LOGFILE:-/var/log/${RC_SVCNAME}.log}"
start_stop_daemon_args="--background \
--stderr \"${DOCKER_LOGFILE}\" --stdout \"${DOCKER_LOGFILE}\""
start() {
start_pre() {
checkpath -f -m 0644 -o root:docker "$DOCKER_LOGFILE"
ulimit -n 1048576
ulimit -u 1048576
ebegin "Starting docker daemon"
start-stop-daemon --start --background \
--exec "$DOCKER_BINARY" \
--pidfile "$DOCKER_PIDFILE" \
--stdout "$DOCKER_LOGFILE" \
--stderr "$DOCKER_LOGFILE" \
-- daemon -p "$DOCKER_PIDFILE" \
$DOCKER_OPTS
eend $?
}
stop() {
ebegin "Stopping docker daemon"
start-stop-daemon --stop \
--exec "$DOCKER_BINARY" \
--pidfile "$DOCKER_PIDFILE"
eend $?
return 0
}
+14 -1
View File
@@ -41,7 +41,14 @@ prestart() {
}
start() {
[ -x $exec ] || exit 5
if [ ! -x $exec ]; then
if [ ! -e $exec ]; then
echo "Docker executable $exec not found"
else
echo "You do not have permission to execute the Docker executable $exec"
fi
exit 5
fi
check_for_cleanup
@@ -58,7 +65,13 @@ start() {
while [ ! -f $pidfile -a $tries -lt 10 ]; do
sleep 1
tries=$((tries + 1))
echo -n '.'
done
if [ ! -f $pidfile ]; then
failure
echo
exit 1
fi
success
echo
else
+1 -1
View File
@@ -31,7 +31,7 @@
*
* This sample list was compiled as a combination of all the syscalls
* available on i386 and amd64 on Ubuntu Precise, as such it may not contain
* everything and not everything may be relevent for your system. This
* everything and not everything may be relevant for your system. This
* shouldn't be a problem.
*/
+2 -1
View File
@@ -8,4 +8,5 @@ targets_from() {
git ls-tree -r --name-only origin/master contrib/builder/deb | grep '/Dockerfile$' | sed -r 's!^contrib/builder/deb/|-debootstrap|/Dockerfile$!!g'
}
{ targets_from master; targets_from release; } | sort -u
release_branch=$(git ls-remote --heads https://github.com/docker/docker.git | awk -F 'refs/heads/' '$2 ~ /^release/ { print $2 }' | sort -V | tail -1)
{ targets_from master; targets_from "$release_branch"; } | sort -u
+1 -1
View File
@@ -31,7 +31,7 @@ stop on runlevel [!2345]
respawn
script
/usr/bin/docker -d -H=tcp://0.0.0.0:2375
/usr/bin/docker daemon -H=tcp://0.0.0.0:2375
end script
```
-1
View File
@@ -3,7 +3,6 @@ This directory contains code pertaining to running containers and storing images
Code pertaining to running containers:
- execdriver
- networkdriver
Code pertaining to storing images:
+28 -28
View File
@@ -5,6 +5,7 @@ import (
"io"
"os"
"path/filepath"
"strings"
"github.com/docker/docker/api/types"
"github.com/docker/docker/pkg/archive"
@@ -17,7 +18,7 @@ import (
// path does not refer to a directory.
var ErrExtractPointNotDirectory = errors.New("extraction point is not a directory")
// ContainerCopy performs a depracated operation of archiving the resource at
// ContainerCopy performs a deprecated operation of archiving the resource at
// the specified path in the conatiner identified by the given name.
func (daemon *Daemon) ContainerCopy(name string, res string) (io.ReadCloser, error) {
container, err := daemon.Get(name)
@@ -25,11 +26,11 @@ func (daemon *Daemon) ContainerCopy(name string, res string) (io.ReadCloser, err
return nil, err
}
if res[0] == '/' {
if res[0] == '/' || res[0] == '\\' {
res = res[1:]
}
return container.Copy(res)
return container.copy(res)
}
// ContainerStatPath stats the filesystem resource at the specified path in the
@@ -95,7 +96,7 @@ func (container *Container) resolvePath(path string) (resolvedPath, absPath stri
}
// statPath is the unexported version of StatPath. Locks and mounts should
// be aquired before calling this method and the given path should be fully
// be acquired before calling this method and the given path should be fully
// resolved to a path on the host corresponding to the given absolute path
// inside the container.
func (container *Container) statPath(resolvedPath, absPath string) (stat *types.ContainerPathStat, err error) {
@@ -142,7 +143,7 @@ func (container *Container) StatPath(path string) (stat *types.ContainerPathStat
defer container.Unmount()
err = container.mountVolumes()
defer container.UnmountVolumes(true)
defer container.unmountVolumes(true)
if err != nil {
return nil, err
}
@@ -177,7 +178,7 @@ func (container *Container) ArchivePath(path string) (content io.ReadCloser, sta
defer func() {
if err != nil {
// unmount any volumes
container.UnmountVolumes(true)
container.unmountVolumes(true)
// unmount the container's rootfs
container.Unmount()
}
@@ -212,13 +213,13 @@ func (container *Container) ArchivePath(path string) (content io.ReadCloser, sta
content = ioutils.NewReadCloserWrapper(data, func() error {
err := data.Close()
container.UnmountVolumes(true)
container.unmountVolumes(true)
container.Unmount()
container.Unlock()
return err
})
container.LogEvent("archive-path")
container.logEvent("archive-path")
return content, stat, nil
}
@@ -239,7 +240,7 @@ func (container *Container) ExtractToDir(path string, noOverwriteDirNonDir bool,
defer container.Unmount()
err = container.mountVolumes()
defer container.UnmountVolumes(true)
defer container.unmountVolumes(true)
if err != nil {
return err
}
@@ -275,7 +276,22 @@ func (container *Container) ExtractToDir(path string, noOverwriteDirNonDir bool,
// Use the resolved path relative to the container rootfs as the new
// absPath. This way we fully follow any symlinks in a volume that may
// lead back outside the volume.
baseRel, err := filepath.Rel(container.basefs, resolvedPath)
//
// The Windows implementation of filepath.Rel in golang 1.4 does not
// support volume style file path semantics. On Windows when using the
// filter driver, we are guaranteed that the path will always be
// a volume file path.
var baseRel string
if strings.HasPrefix(resolvedPath, `\\?\Volume{`) {
if strings.HasPrefix(resolvedPath, container.basefs) {
baseRel = resolvedPath[len(container.basefs):]
if baseRel[:1] == `\` {
baseRel = baseRel[1:]
}
}
} else {
baseRel, err = filepath.Rel(container.basefs, resolvedPath)
}
if err != nil {
return err
}
@@ -288,7 +304,7 @@ func (container *Container) ExtractToDir(path string, noOverwriteDirNonDir bool,
}
if !toVolume && container.hostConfig.ReadonlyRootfs {
return ErrContainerRootfsReadonly
return ErrRootFSReadOnly
}
options := &archive.TarOptions{
@@ -302,23 +318,7 @@ func (container *Container) ExtractToDir(path string, noOverwriteDirNonDir bool,
return err
}
container.LogEvent("extract-to-dir")
container.logEvent("extract-to-dir")
return nil
}
// checkIfPathIsInAVolume checks if the path is in a volume. If it is, it
// cannot be in a read-only volume. If it is not in a volume, the container
// cannot be configured with a read-only rootfs.
func checkIfPathIsInAVolume(container *Container, absPath string) (bool, error) {
var toVolume bool
for _, mnt := range container.MountPoints {
if toVolume = mnt.hasResource(absPath); toVolume {
if mnt.RW {
break
}
return false, ErrVolumeReadonly
}
}
return toVolume, nil
}
+19
View File
@@ -0,0 +1,19 @@
// +build !windows
package daemon
// checkIfPathIsInAVolume checks if the path is in a volume. If it is, it
// cannot be in a read-only volume. If it is not in a volume, the container
// cannot be configured with a read-only rootfs.
func checkIfPathIsInAVolume(container *Container, absPath string) (bool, error) {
var toVolume bool
for _, mnt := range container.MountPoints {
if toVolume = mnt.hasResource(absPath); toVolume {
if mnt.RW {
break
}
return false, ErrVolumeReadonly
}
}
return toVolume, nil
}
+10
View File
@@ -0,0 +1,10 @@
package daemon
// checkIfPathIsInAVolume checks if the path is in a volume. If it is, it
// cannot be in a read-only volume. If it is not in a volume, the container
// cannot be configured with a read-only rootfs.
//
// This is a no-op on Windows which does not support volumes.
func checkIfPathIsInAVolume(container *Container, absPath string) (bool, error) {
return false, nil
}
+7 -2
View File
@@ -6,6 +6,7 @@ import (
"github.com/docker/docker/pkg/stdcopy"
)
// ContainerAttachWithLogsConfig holds the streams to use when connecting to a container to view logs.
type ContainerAttachWithLogsConfig struct {
InStream io.ReadCloser
OutStream io.Writer
@@ -13,6 +14,7 @@ type ContainerAttachWithLogsConfig struct {
Logs, Stream bool
}
// ContainerAttachWithLogs attaches to logs according to the config passed in. See ContainerAttachWithLogsConfig.
func (daemon *Daemon) ContainerAttachWithLogs(container *Container, c *ContainerAttachWithLogsConfig) error {
var errStream io.Writer
@@ -36,15 +38,18 @@ func (daemon *Daemon) ContainerAttachWithLogs(container *Container, c *Container
stderr = errStream
}
return container.AttachWithLogs(stdin, stdout, stderr, c.Logs, c.Stream)
return container.attachWithLogs(stdin, stdout, stderr, c.Logs, c.Stream)
}
// ContainerWsAttachWithLogsConfig attach with websockets, since all
// stream data is delegated to the websocket to handle, there
type ContainerWsAttachWithLogsConfig struct {
InStream io.ReadCloser
OutStream, ErrStream io.Writer
Logs, Stream bool
}
// ContainerWsAttachWithLogs websocket connection
func (daemon *Daemon) ContainerWsAttachWithLogs(container *Container, c *ContainerWsAttachWithLogsConfig) error {
return container.AttachWithLogs(c.InStream, c.OutStream, c.ErrStream, c.Logs, c.Stream)
return container.attachWithLogs(c.InStream, c.OutStream, c.ErrStream, c.Logs, c.Stream)
}

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