Compare commits

...

247 commits

Author SHA1 Message Date
Daniel Nephin
d2556a1347 Bump 1.6.0-rc1
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2016-01-18 14:50:56 -05:00
Aanand Prasad
237f134a00 Allow custom ipam config
Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2016-01-18 14:50:56 -05:00
Aanand Prasad
d4720f85ef Update networking docs
Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2016-01-18 14:03:52 -05:00
Aanand Prasad
64fc2b85cb Allow overriding of config for the default network
Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2016-01-18 12:14:12 -05:00
Aanand Prasad
a22d248390 Quote network names in error messages
Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2016-01-18 12:14:12 -05:00
Daniel Nephin
fffedfc87b Test against 1.10rc1.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2016-01-16 11:35:04 -05:00
Daniel Nephin
34fd042dbf Increase the timeout for all acceptance tests.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2016-01-15 18:12:57 -05:00
Daniel Nephin
89e31f7a8d Validate that an extended config file has the same version as the base.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2016-01-15 18:12:56 -05:00
Daniel Nephin
b446c09735 Merge remote-tracking branch 'docker/release' into bump-1.6.0-rc1 2016-01-15 17:02:06 -05:00
Daniel Nephin
8f48fa4747 Merge pull request #2491 from dnephin/bump-1.5.2
WIP: Bump 1.5.2
2015-12-03 17:11:51 -08:00
Daniel Nephin
7240ff35ee Bump 1.5.2
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-12-03 11:18:32 -08:00
Daniel Nephin
aaf66e3485 FAQ document for Compose
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-12-03 11:05:06 -08:00
Aanand Prasad
96f4a42a35 Validate the 'expose' option
Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-12-03 11:05:05 -08:00
Aanand Prasad
e6fbca42a1 Split out ports validation tests into type, uniqueness, format
Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-12-03 11:05:05 -08:00
Aanand Prasad
527bf3b023 Fix ports validation message
- The `raises` kwarg to the `cls_check` decorator was being used
  incorrectly (it should be an exception class, not an object).

- We need to check for `error.cause` and get the message out of the
  exception object.

NB: The particular case where validation fails in the case of `ports` is
only when ranges don't match in length - no further validation is
currently performed client-side.

Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-12-03 11:05:05 -08:00
Aanand Prasad
ab36c9c6cd Refactor ports section of fields schema
Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-12-03 11:05:05 -08:00
Aanand Prasad
e67419065a Fix ports validation test
We were essentially only testing that *at least one* of the invalid
values fails the validation check, rather than that *all* of them fail.

Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-12-03 11:05:05 -08:00
Daniel Nephin
69e956ce8b Add integration test and docs for build with a git url.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-12-03 11:05:05 -08:00
Jonas Eckerström
0dbd99bad2 Added support for url buid paths
Signed-off-by: Jonas Eckerström <jonaseck@gmail.com>
2015-12-03 11:05:05 -08:00
Daniel Nephin
fa975d7fbe Properly resolve environment from all sources.
Split env resolving into two phases. The first phase is to expand the paths
of env_files, which is done before merging extends. Once all files are merged
together, the final phase is to read the env_files and use them as the base
for environment variables.

Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-12-03 11:05:01 -08:00
Daniel Nephin
81f0e72bd2 Move service sorting to config package.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-12-02 17:31:48 -08:00
Daniel Nephin
da27f8e7e2 Remove unnecessary intermediate variables in get_container_host_config.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-12-02 17:31:48 -08:00
Daniel Nephin
8572d50903 Move volume parsing to config.types module
This removes the last of the old service.ConfigError

Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-12-02 17:31:48 -08:00
Daniel Nephin
5d39813e1b Fixes #2008 - re-use list_or_dict schema for all the types
At the same time, moves extra_hosts validation to the config module.

Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-12-02 17:31:48 -08:00
Daniel Nephin
b19315b57e Move restart spec to the config.types module.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-12-02 17:31:48 -08:00
Daniel Nephin
e549875e89 Move parsing of volumes_from to the last step of config parsing.
Includes creating a new compose.config.types module for all the domain objects.

Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-12-02 17:31:48 -08:00
Daniel Nephin
7e21b05f05 Remove project name validation
project name is already normalized to a valid name before creating a service.

Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-12-02 17:31:48 -08:00
Daniel Nephin
bea2072b95 Add the git sha to version output
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-12-02 17:31:48 -08:00
Daniel Nephin
3b6cc7a7bb Add missing assert and autospec.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-12-02 17:31:48 -08:00
Daniel Nephin
a264470cc0 Make sure we always have the latest busybox image, so that build --pull tests don't flake.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-12-02 17:31:48 -08:00
Daniel Nephin
844e2c3d26 Fix use case link in readme.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-12-02 17:31:48 -08:00
Daniel Nephin
210a14cf28 Add note about required pip version.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-12-02 17:31:48 -08:00
Brandon Burton
9ce4024951 Fixing matrix include so os: linux goes to trusty
Signed-off-by: Brandon Burton <brandon@inatree.org>
2015-12-02 17:31:48 -08:00
Daniel Nephin
8fb6fb7b19 Fix env_file and environment when used with extends.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-12-02 17:31:48 -08:00
Daniel Nephin
83760d0e9e Handle both SIGINT and SIGTERM for docker-compose run.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-12-02 17:31:48 -08:00
Daniel Nephin
be5b7b6f0e Handle both SIGINT and SIGTERM for docker-compose up.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-12-02 17:31:48 -08:00
Daniel Nephin
e5a02d3052 Fix extra warnings on masked volumes.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-12-02 17:31:48 -08:00
Stéphane Seguin
3a395892fc Fix restart with stopped containers. Fixes #1814
Signed-off-by: Stéphane Seguin <stephseguin93@gmail.com>
2015-12-02 17:31:48 -08:00
Daniel Nephin
09f6a876cf Fixes #2398 - the build progress stream can contain empty json objects.
Previously these empty objects would hit a bug in splitting objects causing it crash.
With this fix the empty objects are returned properly.

Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-12-02 17:31:48 -08:00
Stefan Scherer
0117148a36 Use uname to build target name for different platforms
Signed-off-by: Stefan Scherer <scherer_stefan@icloud.com>
2015-12-02 17:31:48 -08:00
Simon van der Veldt
8f70c8cdeb run.sh script: Also pass DOCKER_TLS_VERIFY and DOCKER_CERT_PATH env vars to compose container
Signed-off-by: Simon van der Veldt <simon.vanderveldt@gmail.com>
2015-12-02 17:31:48 -08:00
Daniel Nephin
16a74f3797 Fix texttable dep. 0.8.2 was removed from pypi.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-12-02 17:31:48 -08:00
Viranch Mehta
c42918ec7c Fix specifies_host_port() to handle port binding with host IP but no host port
Signed-off-by: Viranch Mehta <viranch.mehta@gmail.com>
2015-12-02 17:31:48 -08:00
Mazz Mosley
d28b2027b8 Clarify dockerfile requires build key
Credit to @funkyfuture for the first PR addressing the clarification.
https://github.com/docker/compose/pull/1767

Signed-off-by: Mazz Mosley <mazz@houseofmnowster.com>
2015-12-02 17:31:48 -08:00
Mazz Mosley
8d816fc2f3 Add cross references for env/cli
Signed-off-by: Mazz Mosley <mazz@houseofmnowster.com>
2015-12-02 17:31:48 -08:00
Daniel Nephin
f476436027 Merge remote-tracking branch 'docker/release' into bump-1.5.2 2015-12-02 16:56:55 -08:00
Daniel Nephin
fae20305ec Merge pull request #2384 from dnephin/bump-1.5.1
**WIP** Bump 1.5.1
2015-11-12 17:29:43 -05:00
Daniel Nephin
4628e93fb2 Bump 1.5.1
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-11-12 15:02:12 -05:00
Daniel Nephin
82086a4e92 Remove name field from the list of ALLOWED_KEYS
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-11-12 15:02:12 -05:00
Daniel Nephin
96e9b47059 Inclide the filename in validation errors.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-11-12 15:02:12 -05:00
Daniel Nephin
34166ef5a4 Refactor process_errors into smaller functions
So that it passed new max-complexity requirement

Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-11-12 15:02:12 -05:00
Daniel Nephin
285e52cc7c Add ids to config schemas
Also enforce a max complexity for functions and add some new tests for config.

Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-11-12 15:02:12 -05:00
Joffrey F
d52c969f94 Add test for environment variable dashes support
Signed-off-by: Joffrey F <joffrey@docker.com>
2015-11-12 13:54:41 -05:00
Joffrey F
63c3e6f58c Allow dashes in environment variable names
See http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html
Environment variable names used by the utilities in the Shell and
Utilities volume of POSIX.1-2008 consist solely of uppercase letters,
digits, and the <underscore> ( '_' ) from the characters defined in
Portable Character Set and do not begin with a digit. Other characters may
be permitted by an implementation; applications shall tolerate the
presence of such names.

Signed-off-by: Joffrey F <joffrey@docker.com>
2015-11-12 13:54:41 -05:00
Daniel Nephin
0ab76bb8bc Add a test for invalid field 'name', and fix an existing test for invalid service names.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-11-12 13:54:41 -05:00
Daniel Nephin
7fc577c31d Remove name from config schema.
Refactors config validation of a service to use a ServiceConfig data object.
Instead of passing around a bunch of related scalars, we can use the
ServiceConfig object as a parameter to most of the service validation functions.

This allows for a fix to the config schema, where the name is a field in the
schema, but not actually in the configuration. My passing the name around as
part of the ServiceConfig object, we don't need to add it to the config options.
Fixes #2299

validate_against_service_schema() is moved from a conditional branch in
ServiceExtendsResolver() to happen as one of the last steps after all
configuration is merged. This schema only contains constraints which only need
to be true at the very end of merging.

Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-11-12 13:54:41 -05:00
Daniel Nephin
3a43110f06 Fix a bug in ExtendsResolver where the service name of the extended service was wrong.
This bug can be seen by the change to the test case. When the extended service
uses a different name, the error was reported incorrectly.

By fixing this bug we can simplify self.signature and self.detect_cycles to
always use self.service_name.

Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-11-12 13:54:41 -05:00
Daniel Nephin
87d79d4d99 Rename ServiceLoader to ServiceExtendsResolver
ServiceLoader has evolved to be not really all that related to "loading" a
service. It's responsibility is more to do with handling the `extends`
field, which is only part of loading.  The class and its primary method
(make_service_dict()) were renamed to better reflect their responsibility.

As part of that change process_container_options() was removed from
make_service_dict() and renamed to process_service().  It contains logic for
handling the non-extends options.

This change allows us to remove the hacks from testcase.py and only call
the functions we need to format a service dict correctly for integration tests.

Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-11-12 13:54:41 -05:00
Daniel Nephin
83581c3a0f Validate additional files before merging them.
Consolidates all the top level config handling into `process_config_file` which
is now used for both files and merge sources.

Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-11-12 13:54:41 -05:00
Joffrey F
ba90f55075 Reorganize conditional branches to improve readability
Signed-off-by: Joffrey F <joffrey@docker.com>
2015-11-12 13:54:41 -05:00
Yves Peter
3313dcb1ce Fixes #1490 progress_stream would print a lot of new lines on "docker-compose pull" if there's no tty.
Signed-off-by: Yves Peter <ypdraw@gmail.com>
2015-11-12 13:54:41 -05:00
Daniel Nephin
92d56fab47 Add a warning when the host volume config is being ignored.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-11-12 13:54:41 -05:00
Daniel Nephin
1208f92d9c Update doc wording for ulimits.
and move tests to the correct module

Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-11-12 13:54:41 -05:00
Kevin Greene
8444551373 Added ulimits functionality to docker compose
Signed-off-by: Kevin Greene <kevin@spantree.net>
2015-11-12 13:54:41 -05:00
Daniel Nephin
73ebd7e560 Only create the default network if at least one service needs it.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-11-12 13:54:41 -05:00
Daniel Nephin
0a96f86f74 Cleanup workaround in testcase.py
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-11-12 13:54:41 -05:00
Daniel Nephin
36176befb0 Fix #1549 - flush after each line of logs.
Includes some refactoring of log_printer_test to support checking for flush(), and so that each test calls the unit-under-test directly, instead of through a helper function.

Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-11-12 13:54:41 -05:00
Daniel Nephin
de08da278d Re-order flags in bash completion
and remove unnecessary variables from build command.

Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-11-12 13:54:41 -05:00
Adrian Budau
4c2eb17ccd Added --force-rm to compose build.
It's a flag passed to docker build that removes the intermediate
containers left behind on fail builds.

Signed-off-by: Adrian Budau <budau.adi@gmail.com>
2015-11-12 13:54:41 -05:00
Daniel Nephin
8fb44db92b Cleanup some unit tests and whitespace.
Remove some unnecessary newlines.
Remove a unittest that was attempting to test behaviour that was removed a while ago, so isn't testing anything.
Updated some unit tests to use mocks instead of a custom fake.

Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-11-12 13:54:41 -05:00
Daniel Nephin
4105c3017c Move cli tests to a new testing package.
These cli tests are now a different kind of that that run the compose binary. They are not the same as integration tests that test some internal interface.

Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-11-12 13:54:40 -05:00
Daniel Nephin
7f2f4eef48 Update cli tests to use subprocess.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-11-12 13:54:40 -05:00
Joffrey F
666c3cb1c7 Use exit code 1 when encountering a ReadTimeout
Signed-off-by: Joffrey F <joffrey@docker.com>
2015-11-12 13:54:40 -05:00
Daniel Nephin
886134c1f3 Recreate dependents when a dependency is created (not just when it's recreated).
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-11-12 13:54:40 -05:00
Daniel Nephin
ba61a6c5fb Don't set the hostname to the service name with networking.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-11-12 13:54:40 -05:00
Daniel Nephin
3f14df374f Handle non-utf8 unicode without raising an error.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-11-12 13:54:40 -05:00
Daniel Nephin
e6755d1e7c Use VolumeSpec instead of re-parsing the volume string.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-11-12 13:54:40 -05:00
Daniel Nephin
c4f59e731d Make working_dir consistent in the config package.
- make it a positional arg, since it's required
- make it the first argument for all functions that require it
- remove an unnecessary one-line function that was only called in one place

Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-11-12 13:54:39 -05:00
Daniel Nephin
805ed344c0 Refactor ServiceLoader to be immutable.
Mutable objects are harder to debug and harder to reason about. ServiceLoader was almost immutable. There was just a single function which set fields for a second function. Instead of mutating the object, we can pass those values as parameters to the next function.

Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-11-12 13:54:39 -05:00
Daniel Nephin
a5959d9be2 Some minor style cleanup
- fixed a docstring to make it PEP257 compliant
- wrapped some long lines
- used a more specific error

Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-11-12 13:54:39 -05:00
Mazz Mosley
0375dccf64 Handle non-ascii chars in volume directories
Signed-off-by: Mazz Mosley <mazz@houseofmnowster.com>
2015-11-12 13:54:39 -05:00
Daniel Nephin
3c4bb5358e Upgrade pyyaml to 3.11
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-11-12 13:54:39 -05:00
Daniel Nephin
e317d2db9d Remove service.start_container()
It has been an unnecessary wrapper around container.start() for a little while now, so we can call it directly.

Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-11-12 13:54:39 -05:00
Joffrey F
3daecfa8e4 Update service config_dict computation to include volumes_from mode
Ensure config_hash is updated when volumes_from mode is changed, and
service is recreated on next up as a result.

Signed-off-by: Joffrey F <joffrey@docker.com>
2015-11-12 13:54:39 -05:00
Aanand Prasad
cf93362368 Fix parallel output
We were outputting an extra line, which in *some* cases, on *some*
terminals, was causing the output of parallel actions to get messed up.

In particular, it would happen when the terminal had just been cleared
or hadn't yet filled up with a screen's worth of text.

Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-11-12 13:54:39 -05:00
Daniel Nephin
23d4eda2a5 Fix service recreate when image changes to build.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-11-12 13:54:39 -05:00
Daniel Nephin
718ae13ae1 Move config hash tests to service_test.py
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-11-12 13:54:39 -05:00
Daniel Nephin
cddbe9fbf1 Merge remote-tracking branch 'docker/release' into bump-1.5.1 2015-11-12 13:03:47 -05:00
Aanand Prasad
9c8173dbfd Merge pull request #2309 from dnephin/bump-1.5.0
WIP: Bump 1.5.0
2015-11-03 18:31:56 +00:00
Daniel Nephin
77ff37a853 Bump 1.5.0
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-11-03 12:36:30 -05:00
Daniel Nephin
40341674bd Re-order extends docs.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-11-03 12:36:30 -05:00
Daniel Nephin
62ebdce5a9 Replace composition with Compose app.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-11-03 12:36:30 -05:00
Daniel Nephin
58de4e0c26 Document using multiple Compose files use cases.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-11-03 12:36:30 -05:00
Daniel Nephin
dbd6c62b70 Changes to production.md for working with multiple Compose files.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-11-03 12:36:30 -05:00
Daniel Nephin
887c6753f8 Support a volume to the docs directory and add --watch, so docs can be refreshed.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-11-03 12:36:30 -05:00
Daniel Nephin
bd35896892 Remove duplication from extends docs.
Start restructuring extends docs in preparation for adding documentation about using multiple compose files.

Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-11-03 12:36:30 -05:00
Daniel Nephin
9286e62449 On a test failure only show the last 100 lines of daemon output.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-11-03 11:54:59 -05:00
Daniel Nephin
621d1a5167 Fix networking tests to work with new API in engine rc4 (https://github.com/docker/docker/pull/17536)
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-11-03 11:54:59 -05:00
Daniel Nephin
83714fbac2 Touch up intro paragraph with feedback from @moxiegirl.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-11-03 11:33:23 -05:00
Daniel Nephin
413921a287 Add another feature to the docs - multiple environments per host.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-11-03 11:33:23 -05:00
Daniel Nephin
7ee36829ac Update intro docs based on feedback.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-11-03 11:33:23 -05:00
Daniel Nephin
bfb46b37d3 Updates to gettingstarted guide from PR feedback.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-11-03 11:33:23 -05:00
Daniel Nephin
09d2bdbb21 Flush out features and use cases.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-11-03 11:33:23 -05:00
Daniel Nephin
8733d09a9c Extract the getting started guide from the index page.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-11-03 11:33:23 -05:00
Daniel Nephin
e524cce222 Add missing title to compose file reference.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-11-03 11:33:23 -05:00
Daniel Nephin
be6b811c4e Bump 1.5.0rc3
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-10-30 15:53:17 -04:00
Daniel Nephin
bdb9a280bc Make storage driver configurable in CI
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-10-30 15:53:16 -04:00
Daniel Nephin
73ca4eb599 On error print daemon logs
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-10-30 15:46:57 -04:00
Daniel Nephin
569ccbadec Convert the README to rst and fix the logo url before packaging it up for pypi.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-10-30 15:46:57 -04:00
Daniel Nephin
ed1b584c42 Fix release script notes about software and typos.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-10-30 15:46:57 -04:00
Daniel Nephin
2f2e946907 Don't set a default network driver, let the server decide.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-10-30 15:36:15 -04:00
Daniel Nephin
d392f70cc6 Fixes #1843, #1936 - chown files back to host user in django example.
Also add a missing 'touch Gemfile.lock' to fix the rails tutorial.

Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-10-30 15:36:15 -04:00
Daniel Nephin
db164cefd3 Remove the duplicate 'Warning' prefix now that the logger adds the prefix.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-10-30 15:36:15 -04:00
Daniel Nephin
4d613d3ba7 Use colors when logging warnings or errors, so they are more obvious.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-10-30 15:36:15 -04:00
Joffrey F
1f26841e23 Integration test for run command with networking enabled
Signed-off-by: Joffrey F <joffrey@docker.com>
2015-10-30 15:36:15 -04:00
Joffrey F
9370cb033c Ensure network exists when calling run before up
Otherwise the daemon will error out because the network doesn't exist
yet.

Signed-off-by: Joffrey F <joffrey@docker.com>
2015-10-30 15:36:15 -04:00
Mazz Mosley
ab0ddb593f Clarify the command is an example
Signed-off-by: Mazz Mosley <mazz@houseofmnowster.com>
2015-10-29 15:01:33 -04:00
Daniel Nephin
f67503d9fd Logs are available for all log drivers except for none.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-10-29 15:01:33 -04:00
Daniel Nephin
ce729b0721 Update docs about networking for current release.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-10-29 15:01:33 -04:00
Daniel Nephin
8156cdc56e Disable a test against docker 1.8.3 because it fails due to a bug in docker engine.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-10-29 15:01:33 -04:00
Daniel Nephin
8cc8e61474 Bump 1.5.0rc2
Signed-off-by: Daniel Nephin <dnephin@docker.com>

Fill out 1.5.0 release notes

Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-10-27 19:48:54 -04:00
Sven Dowideit
29b0ffe5e9 Possible link fixes
Signed-off-by: Sven Dowideit <SvenDowideit@home.org.au>
2015-10-27 19:33:28 -04:00
Mazz Mosley
a772a0d7d7 Remove redundant try/except
Code cleanup. We no longer need this as the api returns a 304 for any
stopped containers, which doesn't raise an error.

Signed-off-by: Mazz Mosley <mazz@houseofmnowster.com>
2015-10-27 19:33:28 -04:00
Mazz Mosley
6f0096c87b Move rename functionality into Container
Signed-off-by: Mazz Mosley <mazz@houseofmnowster.com>
2015-10-27 19:33:28 -04:00
Mazz Mosley
da41ed22f9 Fix tests
Signed-off-by: Mazz Mosley <mazz@houseofmnowster.com>
2015-10-27 19:33:28 -04:00
Mazz Mosley
d6fa8596d2 Attach to a container's log_stream before they're started
So we're not displaying output of all previous logs for a container, we attach,
if possible, to a container before the container is started.

LogPrinter checks if a container has a log_stream already attached and
print from that rather than always attempting to attach one itself.

Signed-off-by: Mazz Mosley <mazz@houseofmnowster.com>
2015-10-27 19:33:28 -04:00
Daniel Nephin
a9b4fe768d Fix running one-off containers with --x-networking by disabling linking to self.
docker create fails if networking and links are used together.

Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-10-27 19:33:28 -04:00
Daniel Nephin
88e53e177d Upgrade pyinstaller to 3.0
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-10-26 13:05:41 -04:00
Daniel Nephin
e168fd03ca Fix unicode in environment variables for python2.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-10-26 13:05:41 -04:00
Daniel Nephin
95a23eb682 Change version check from engine version to api version.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-10-26 13:05:40 -04:00
Daniel Nephin
f5ad363143 Use inspect network to query for an existing network.
And more tests for get_network()

Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-10-26 13:05:40 -04:00
Daniel Nephin
f290faf4ba Minor refactor to use guard and replace instead of split+join
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-10-21 11:29:49 -04:00
Daniel Nephin
725088a18b Force windows drives to be lowercase.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-10-21 11:29:49 -04:00
Daniel Nephin
bf672ec340 Fixes #2205 - extends must be copied from override file.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-10-20 11:27:11 -04:00
Mazz Mosley
0e4f9c9a66 Environment keys can contain empty values
Environment keys that contain no value, get populated with values taken
from the environment not from the build phase but from running the command `up`.

Signed-off-by: Mazz Mosley <mazz@houseofmnowster.com>
2015-10-19 15:16:19 -04:00
Mazz Mosley
5fdb75b541 Improve error message for type constraints
It was missing a space between the different types, when there
were 3 possible type values.

Signed-off-by: Mazz Mosley <mazz@houseofmnowster.com>
2015-10-19 15:16:19 -04:00
Daniel Nephin
24d4a1045a Fixes #2203 - properly validate files when multiple files are used.
Remove the single-use decorators so the functionality can be used directly as a function.

Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-10-19 15:16:19 -04:00
Daniel Nephin
514f0650b2 Give the user a better error message (without a stack trace) when there is a yaml error.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-10-19 12:02:40 -04:00
Steve Durrheimer
20d34c8b14 Add zsh completion for 'docker-compose --x-networking --x-network-driver'
Signed-off-by: Steve Durrheimer <s.durrheimer@gmail.com>
2015-10-19 10:38:22 -04:00
Harald Albers
6f45eb7959 bash completion for networking options
Signed-off-by: Harald Albers <github@albersweb.de>
2015-10-19 10:11:35 -04:00
Mazz Mosley
49b98fa111 Attempt to document escaping env vars
People are likely to run into their env vars being set to empty strings,
if they're not aware that they need to escape them for Compose to not
interpolate them.

Signed-off-by: Mazz Mosley <mazz@houseofmnowster.com>
2015-10-16 15:52:32 -04:00
Cameron Eagans
6048630a11 docker-compose pull SERVICE should not pull SERVICE's dependencies
Signed-off-by: Cameron Eagans <me@cweagans.net>
2015-10-16 12:59:57 -04:00
Aanand Prasad
46de4411a7 Revert networking-related changes to getting started guides
Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-10-16 12:59:57 -04:00
Karol Duleba
883f251e7d Docs for shorthand notation of extends. Issue #1989
Signed-off-by: Karol Duleba <mr.fuxi@gmail.com>
2015-10-16 12:59:57 -04:00
Daniel Nephin
284cda087e Add missing merge for release branch.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-10-16 12:59:57 -04:00
Daniel Nephin
b2f9c182f3 Fix some release docs.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-10-16 12:59:57 -04:00
Daniel Nephin
558098d322 Add a script to generate contributor list.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-10-16 12:59:57 -04:00
Per Persson
6571e079b9 Remove incorrectly placed comment
I'm not sure if it should be there at all, but at least it should hardly be where it currently is located.

Signed-off-by: Per Persson <per.persson@exertisztorm.com>
2015-10-16 12:59:57 -04:00
Tim Butler
49ca23c034 Fix link to Release Process doc in README.md
Signed-off-by: Tim Butler <tim.butler.au@gmail.com>
2015-10-16 12:59:57 -04:00
Daniel Nephin
709bd9c363 Bump 1.5.0rc1
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-10-14 12:59:31 -04:00
Daniel Nephin
8cecf2e02d Merge remote-tracking branch 'docker/release' into bump-1.5.0rc1 2015-10-14 12:59:25 -04:00
Daniel Nephin
d59c759cdd Merge pull request #2082 from dnephin/bump-1.4.2
[WIP] Release 1.4.2
2015-09-22 14:17:04 -04:00
Daniel Nephin
7b5d5fcd58 Bump 1.4.2
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-09-22 12:26:51 -04:00
Daniel Nephin
d01f712376 Fix a test case that assumes busybox image id.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-09-22 12:26:51 -04:00
Daniel Nephin
ac75d35927 Fix #1961 - docker-compose up should attach to all containers with no service names are specified, and add tests.
Signed-off-by: Daniel Nephin <dnephin@gmail.com>
2015-09-22 11:09:59 -04:00
Daniel Nephin
605d7f26e7 Merge pull request #2027 from dnephin/bump-1.4.1
Bump 1.4.1
2015-09-15 17:47:09 -04:00
Daniel Nephin
b24ca75914 Bump 1.4.1
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-09-14 18:18:01 -04:00
Daniel Nephin
2b75741e5a Fix cherry-pick errors.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-09-11 14:22:35 -04:00
Daniel Nephin
7ff8c2b224 Resolves #1804
Fix mutation of service.options when a label or environment variable is specified in the config.

Signed-off-by: Daniel Nephin <dnephin@gmail.com>
2015-09-10 19:32:30 -04:00
Daniel Nephin
db31adc208 Extract link names into a function.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-09-10 19:32:30 -04:00
Daniel Nephin
805f6a7683 Refactor network_mode logic out of Service.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
2015-09-10 19:32:30 -04:00
Daniel Nephin
d92f323e6d Fixes #1757 - include all service properties in the config_dict()
Signed-off-by: Daniel Nephin <dnephin@gmail.com>
2015-09-10 19:32:30 -04:00
Daniel Nephin
cf2dbf55b8 Cleanup some project logic.
Signed-off-by: Daniel Nephin <dnephin@gmail.com>
2015-09-10 19:32:30 -04:00
Daniel Nephin
8d4c724c2d Sort config keys
Signed-off-by: Daniel Nephin <dnephin@gmail.com>
2015-09-10 19:32:30 -04:00
Daniel Nephin
9cb2770da4 Make external_links a regular service.option so that it's part of the config hash
Signed-off-by: Daniel Nephin <dnephin@gmail.com>
2015-09-10 19:32:30 -04:00
Daniel Nephin
6a23491fa9 Resolves #1856, fix regression in #1645. Includes some refactoring to make testing easier.
Signed-off-by: Daniel Nephin <dnephin@gmail.com>
2015-09-10 19:32:30 -04:00
Mazz Mosley
294b9742be Handle all exceptions
If we get back an error that wasn't an APIError, it was causing the
thread to hang. This catch all, while I appreciate feels risky to
have a catch all, is better than not catching and silently failing,
with a never ending thread.

If something worse than an APIError has gone wrong, we want to stop
the incredible journey of what we're doing.

Signed-off-by: Mazz Mosley <mazz@houseofmnowster.com>
2015-09-10 19:32:30 -04:00
Aanand Prasad
a9b1f15f92 Fix volume path warning
Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-09-10 19:32:29 -04:00
Aanand Prasad
aa7c7cdf93 Merge pull request #1763 from aanand/bump-1.4.0
Bump 1.4.0
2015-08-11 18:38:49 +01:00
Aanand Prasad
28139ab90d Bump 1.4.0
Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-08-11 16:00:20 +01:00
Aanand Prasad
d0792b49fa Merge pull request #1846 from aanand/fix-mem-limit-options
Fix mem_limit and memswap_limit regression
(cherry picked from commit 93cc7e3751)

Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-08-11 16:00:20 +01:00
Mazz Mosley
5548aa5c79 Merge pull request #1833 from aanand/deprecate-relative-volumes-without-dot
Show a warning when a relative path is specified without "./"
(cherry picked from commit 52733f6996)

Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>

Conflicts:
	compose/config.py
	tests/unit/config_test.py
2015-08-11 12:57:42 +01:00
Ben Firshman
16440ff055 Merge pull request #1829 from vlajos/typofixes-vlajos-20150807
typofix - https://github.com/vlajos/misspell_fixer
(cherry picked from commit b7baa899e2)

Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-08-11 09:44:28 +01:00
Ben Firshman
7850d6de45 Merge pull request #1832 from aanand/use-docker-1.8.0-rc3
Test against Docker 1.8.0 RC3
(cherry picked from commit afc9629c59)

Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-08-11 09:44:28 +01:00
Ben Firshman
74b4fb89bb Merge pull request #1835 from aanand/fix-crash-when-container-has-no-name
Ignore containers that don't have a name
(cherry picked from commit 4e12ce39b3)

Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-08-11 09:44:27 +01:00
Ben Firshman
22ccf35fa1 Merge pull request #1836 from aanand/use-overlay-driver-in-tests
Use overlay driver in tests
(cherry picked from commit 197d332620)

Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-08-11 09:44:27 +01:00
Aanand Prasad
7ad1fe24bd Merge pull request #1815 from aanand/abort-if-daemon-cant-start
Abort tests if daemon fails to start
(cherry picked from commit f7b9daf927)

Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-08-11 09:44:27 +01:00
Aanand Prasad
450ba978c1 Merge pull request #1812 from moxiegirl/install-update-for-1811
Closes #1811 for Toolbox
(cherry picked from commit 6cb8e512f2)

Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>

Conflicts:
	docs/install.md
2015-08-10 12:51:10 +01:00
Aanand Prasad
3d6946417d Merge pull request #1800 from aanand/volume-driver-support
Support volume_driver
(cherry picked from commit 41b9df7639)

Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-07-31 16:29:24 +01:00
Daniel Nephin
31cf63b374 Merge pull request #1799 from d2bit/clean-rails-quickstart-guide-db-config
Remove useless postgres 'port' configuration
(cherry picked from commit b25f05bed4)

Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-07-31 15:46:07 +01:00
Daniel Nephin
5c853c4a2c Merge pull request #1794 from aanand/add-test-for-trailing-slash-volume-copy
Add test for trailing slash volume copying bug
(cherry picked from commit ea7276031c)

Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-07-31 15:29:44 +01:00
Aanand Prasad
ad922cd7a1 Merge pull request #1787 from aanand/fix-duplicate-volume-bind
Fix "Duplicate volume mount" error when config has trailing slashes
(cherry picked from commit dc7bdd10d4)

Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-07-31 15:29:44 +01:00
Aanand Prasad
49bafdc4cd Merge pull request #1777 from aanand/update-api-version
Update API version to 1.19
(cherry picked from commit 276e369c31)

Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-07-31 15:29:44 +01:00
Aanand Prasad
989b2491b9 Merge pull request #1780 from gheart/specify_api_version_via_env
Allow API version specification via env var
(cherry picked from commit 2759ab5ab6)

Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-07-31 15:29:44 +01:00
Aanand Prasad
ca2ce3a034 Merge pull request #1779 from aanand/mac-binary-error-hint
Add hint about OS X binary compatibility
(cherry picked from commit 1496734cbb)

Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-07-31 15:29:43 +01:00
Aanand Prasad
dfe9dccab8 Merge pull request #1774 from moxiegirl/test-entire-build
Contributors can build public docs with compose docs in context
(cherry picked from commit 487eae3b7b)

Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-07-31 15:29:43 +01:00
Aanand Prasad
d456c3909d Merge remote-tracking branch 'origin/release' into bump-1.4.0 2015-07-23 16:46:57 +01:00
Aanand Prasad
29ceef6d93 Merge pull request #1706 from aanand/bump-1.3.3
Bump 1.3.3
2015-07-16 11:40:20 +01:00
Aanand Prasad
8cff440800 Bump 1.3.3
Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-07-16 11:21:01 +01:00
Mazz Mosley
e5f6ae767d Merge pull request #1704 from aanand/fix-timeout-type
Make sure up/restart/stop timeout is an int
(cherry picked from commit c7dccccd1f)

Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-07-16 11:19:21 +01:00
Aanand Prasad
cd44179305 Merge pull request #1705 from aanand/fix-labels-null
Handle case where /containers/json returns "Labels": null
(cherry picked from commit 7b9664be8e)

Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-07-15 17:33:08 +01:00
Aanand Prasad
c3c5b354b8 Merge pull request #1690 from aanand/bump-1.3.2
Bump 1.3.2
2015-07-14 18:04:22 +01:00
Aanand Prasad
95cf195dbd Bump 1.3.2
Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-07-14 17:40:43 +01:00
Aanand Prasad
a80afd67ab Merge pull request #1688 from aanand/use-docker-py-1.3.0
Use docker-py 1.3.0
(cherry picked from commit 1e71eebc74)

Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-07-14 17:29:25 +01:00
Aanand Prasad
4bc4d273ac Merge pull request #1643 from aanand/warn-about-legacy-one-off-containers
Show an error on 'run' when there are legacy one-off containers
(cherry picked from commit 81707ef1ad)

Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-07-14 17:29:12 +01:00
Aanand Prasad
4911c77134 Merge pull request #1489 from dnephin/faster_integration_tests
Faster integration tests
(cherry picked from commit 5231288b4e)

Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>

Conflicts:
	compose/cli/main.py
2015-07-14 17:28:54 +01:00
Aanand Prasad
c1b9a76a54 Merge pull request #1658 from aanand/fix-smart-recreate-nonexistent-image
Fix smart recreate when 'image' is changed to something nonexistent
(cherry picked from commit 2bc10db545)

Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-07-14 17:25:33 +01:00
Aanand Prasad
c31e25af72 Merge pull request #1642 from aanand/fix-1573
Fix bug where duplicate container is leftover after 'up' fails
(cherry picked from commit f42fd6a3ad)

Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-07-14 17:25:03 +01:00
Aanand Prasad
c8295d36cc Merge pull request #1644 from aanand/fix-rm-bug
Stop 'rm' and 'ps' listing services not defined in the current file
(cherry picked from commit d85688892c)

Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-07-14 17:24:15 +01:00
Aanand Prasad
b12c29479e Merge pull request #1521 from dano/validate-service-names
Validate that service names passed to Project.containers aren't bogus.
(cherry picked from commit bc14c473c9)

Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-07-14 17:24:15 +01:00
Aanand Prasad
cd47829f3d Merge pull request #1588 from aanand/bump-1.3.1
Bump 1.3.1
2015-06-22 08:01:13 -07:00
Aanand Prasad
4d4ef4e0b3 Bump 1.3.1
Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-06-21 17:32:36 -07:00
Aanand Prasad
882ef2ccd8 Merge pull request #1578 from aanand/fix-migrate-help
Fix 'docker-compose help migrate-to-labels'
(cherry picked from commit c8751980f9)

Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-06-21 17:28:18 -07:00
Aanand Prasad
d6cd76c3c1 Merge pull request #1570 from aanand/fix-build-pull
Explicitly set pull=False when building
(cherry picked from commit 4f83a18912)

Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-06-21 17:28:09 -07:00
Ben Firshman
bd0be2cdc7 Merge pull request #1580 from aanand/dont-set-network-mode-when-none-is-specified
Don't set network mode when none is specified
(cherry picked from commit 911cd60360)

Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-06-21 17:27:59 -07:00
Aanand Prasad
a8d7ebd987 Merge pull request #1461 from aanand/bump-1.3.0
Bump 1.3.0
2015-06-18 11:41:40 -07:00
Aanand Prasad
00f61196a4 Bump 1.3.0
Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-06-18 11:25:10 -07:00
Aanand Prasad
c21d6706b6 Merge pull request #1565 from aanand/use-docker-1.7.0
Use docker 1.7.0 and docker-py 1.2.3
(cherry picked from commit 8ffeaf2a54)

Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>

Conflicts:
	Dockerfile
2015-06-18 11:25:10 -07:00
Aanand Prasad
c3c5d91c47 Merge pull request #1563 from moxiegirl/hugo-test-fixes
Hugo final 1.7 Documentation PR -- please read carefully
(cherry picked from commit 4e73e86d94)

Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-06-18 11:25:10 -07:00
Aanand Prasad
7fa4cd1214 Merge pull request #1552 from aanand/add-upgrade-instructions
Add upgrading instructions to install docs
(cherry picked from commit bc7161b475)
2015-06-16 16:29:18 -07:00
Aanand Prasad
f353d9fbc0 Merge pull request #1406 from vdemeester/667-compose-port-scale
Fixing docker-compose port with scale (#667)
(cherry picked from commit 5b2a0cc73d)

Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-06-15 11:22:08 -07:00
Daniel Nephin
09018855ce Merge pull request #1550 from aanand/update-docker-py
Update setup.py with new docker-py minimum
(cherry picked from commit b3b44b8e4c)

Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-06-15 11:22:08 -07:00
Aanand Prasad
719954b02f Merge pull request #1545 from moxiegirl/test-tooling
Updated for new documentation tooling
(cherry picked from commit aaccd12d3d)

Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-06-15 11:22:08 -07:00
Daniel Nephin
67bc3fabe4 Merge pull request #1544 from aanand/fix-volume-deduping
Fix volume binds de-duplication
(cherry picked from commit 77e594dc94)

Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-06-15 11:22:08 -07:00
Daniel Nephin
e724a346c7 Merge pull request #1526 from aanand/remove-start-or-create-containers
Remove Service.start_or_create_containers()
(cherry picked from commit 38a11c4c28)

Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-06-15 11:22:08 -07:00
Daniel Nephin
87b4545b44 Merge pull request #1508 from thaJeztah/update-dockerproject-links
Update dockerproject.com links
(cherry picked from commit 417e6ce0c9)
2015-06-15 11:22:07 -07:00
Aanand Prasad
58a7844129 Merge pull request #1482 from bfirsh/add-build-and-dist-to-dockerignore
Make it possible to run tests remotely
(cherry picked from commit c8e096e089)

Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-06-15 11:22:07 -07:00
Daniel Nephin
4353f7b9f9 Merge pull request #1475 from fordhurley/patch-1
Fix markdown formatting for `--service-ports` example
(cherry picked from commit d64bf88e26)

Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-06-15 11:22:07 -07:00
Aanand Prasad
8f8693e13e Merge pull request #1480 from bfirsh/change-sigint-test-to-use-sigstop
Change kill SIGINT test to use SIGSTOP
(cherry picked from commit a15f996744)

Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-06-15 11:22:07 -07:00
Ben Firshman
363a6563c7 Merge pull request #1537 from aanand/reorder-service-utils
Reorder service.py utility methods
(cherry picked from commit e3525d64b5)

Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-06-15 11:22:07 -07:00
Aanand Prasad
59d6af73fa Merge pull request #1539 from bfirsh/add-image-affinity-to-test
Add image affinity to test script
(cherry picked from commit 4c2112dbfd)

Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-06-15 11:22:07 -07:00
Aanand Prasad
cd7f67018e Merge pull request #1466 from noironetworks/changing-scale-to-warning
Modified scale awareness from exception to warning
(cherry picked from commit 7d2a89427c)

Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-06-15 11:22:07 -07:00
Ben Firshman
b7e8770c4f Merge pull request #1538 from thieman/tnt-serivce-misspelled
Correct misspelling of "Service" in an error message
(cherry picked from commit bd246fb011)

Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-06-15 11:22:07 -07:00
Aanand Prasad
ad4cc5d6df Merge pull request #1497 from aanand/use-1.7-rc1
Run tests against Docker 1.7 RC2
(cherry picked from commit 0e9ccd36f3)

Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-06-15 11:22:06 -07:00
Aanand Prasad
ca14ed68f7 Merge pull request #1533 from edmorley/update-b2d-shellinit-example
Docs: Update boot2docker shellinit example to use 'eval'
(cherry picked from commit 17e03b29f9)
Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-06-15 11:22:06 -07:00
Daniel Nephin
71514cb380 Merge pull request #1531 from aanand/test-crash-resilience
Test that data volumes now survive a crash when recreating
(cherry picked from commit 87c30ae6e4)

Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-06-15 11:22:06 -07:00
Daniel Nephin
8212f1bd45 Merge pull request #1529 from aanand/update-dockerpty
Update dockerpty to 0.3.4
(cherry picked from commit 95b2eaac04)

Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-06-09 18:24:14 -04:00
Daniel Nephin
dca3bbdea3 Merge pull request #1527 from aanand/remove-logging-on-run-rm
Remove logging on run --rm
(cherry picked from commit 5578ccbb01)

Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-06-09 14:39:53 -04:00
Daniel Nephin
8ed7dfef6f Merge pull request #1525 from aanand/fix-duplicate-logging
Fix duplicate logging on up/run
(cherry picked from commit e2b790f732)

Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-06-09 14:39:52 -04:00
Daniel Nephin
631f5be02f Merge pull request #1481 from albers/completion-smart-recreate
Support --x-smart-recreate in bash completion
(cherry picked from commit 9a0bb325f2)

Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-06-09 14:39:52 -04:00
Ben Firshman
4f4ea2a402 Merge pull request #1325 from sdurrheimer/master
Zsh completion for docker-compose
(cherry picked from commit b638728d6c)

Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>

Conflicts:
	docs/completion.md
2015-06-09 14:39:50 -04:00
Aanand Prasad
5a5bffebd1 Merge pull request #1464 from twhiteman/bug1461
Possible division by zero error when pulling an image - fixes #1463
(cherry picked from commit d0e87929a1)

Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-06-09 14:39:05 -04:00
Aanand Prasad
8749bc0844 Build Python 2.7.9 in Docker image
Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-06-02 11:39:17 +01:00
Aanand Prasad
f3d0c63db2 Make sure we use Python 2.7.9 and OpenSSL 1.0.1 when building OSX binary
Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-06-02 11:39:17 +01:00
Aanand Prasad
93a846db31 Report Python and OpenSSL versions in --version output
Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>

Conflicts:
	compose/cli/utils.py
2015-06-02 11:39:17 +01:00
Aanand Prasad
686c25d50f Script to prepare OSX build environment
Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-05-27 17:52:23 +01:00
Aanand Prasad
ef6555f084 Merge branch 'release' into bump-1.3.0 2015-05-26 17:45:28 +01:00
Ben Firshman
3c6652c101 Merge pull request #1308 from aanand/update-docs-1.2.0
Update docs for 1.2.0
2015-04-17 10:35:06 -07:00
Aanand Prasad
43af1684c1 Update docs for 1.2.0
Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-04-17 16:02:57 +01:00
Aanand Prasad
ed549155b3 Merge pull request #1159 from aanand/bump-1.2.0
Bump 1.2.0
2015-04-16 17:46:47 +01:00
Aanand Prasad
39ae91c81c Bump 1.2.0
Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-04-16 13:53:27 +01:00
Daniel Nephin
b6acb3cd8c Merge pull request #1278 from albers/completion-run-user
Add bash completion for docker-compose run --user
(cherry picked from commit 3cd116b99d)

Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-04-16 13:50:33 +01:00
Ben Firshman
a467a8a094 Merge pull request #1261 from aanand/fix-vars-in-volume-paths
Fix vars in volume paths
(cherry picked from commit 4926f8aef6)

Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>

Conflicts:
	tests/unit/service_test.py
2015-04-09 15:26:10 +01:00
Aanand Prasad
78227c3c06 Merge pull request #1202 from aanand/jenkins-script
WIP: Jenkins script
(cherry picked from commit 853ce255ea)
Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-04-01 11:00:51 -04:00
Daniel Nephin
e4e802d1f8 Merge pull request #1213 from moysesb/relative_build
Make value of 'build:' relative to the yml file.
(cherry picked from commit 0f70b8638f)

Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-04-01 11:00:48 -04:00
Aanand Prasad
b24a60ba9f Merge pull request #1226 from aanand/merge-multi-value-options
Merge multi-value options when extending
(cherry picked from commit e708f4f59d)

Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-04-01 11:00:45 -04:00
Aanand Prasad
461b600068 Merge pull request #1225 from aanand/fix-1222
When extending, `build` replaces `image` and vice versa
(cherry picked from commit 6dbe321a45)

Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
2015-04-01 11:00:40 -04:00
14 changed files with 386 additions and 108 deletions

View file

@ -1,6 +1,114 @@
Change log Change log
========== ==========
1.6.0 (2016-01-15)
------------------
Major Features:
- Compose 1.6 introduces a new format for `docker-compose.yml` which lets
you define networks and volumes in the Compose file as well as services. It
also makes a few changes to the structure of some configuration options.
You don't have to use it - your existing Compose files will run on Compose
1.6 exactly as they do today.
Check the upgrade guide for full details:
https://docs.docker.com/compose/compose-file/upgrading
- Support for networking has exited experimental status and is the recommended
way to enable communication between containers.
If you use the new file format, your app will use networking. If you want to
keep using links, just leave your Compose file as it is and it'll continue
to work just the same.
By default, you don't have to configure any networks. In fact, using
networking with Compose involves even less configuration than using links.
Consult the networking guide for how to use it:
https://docs.docker.com/compose/networking
The experimental flags `--x-networking` and `--x-network-driver`, introduced
in Compose 1.5, have been removed.
- You can now pass arguments to a build if you're using the new file format:
build:
context: .
args:
buildno: 1
- You can now specify both a `build` and an `image` key if you're using the
new file format. `docker-compose build` will build the image and tag it with
the name you've specified, while `docker-compose pull` will attempt to pull
it.
- There's a new `events` command for monitoring container events from
the application, much like `docker events`. This is a good primitive for
building tools on top of Compose for performing actions when particular
things happen, such as containers starting and stopping.
New Features:
- Added a new command `config` which validates and prints the Compose
configuration after interpolating variables, resolving relative paths, and
merging multiple files and `extends`.
- Added a new command `create` for creating containers without starting them.
- Added a new command `down` to stop and remove all the resources created by
`up` in a single command.
- Added support for the `cpu_quota` configuration option.
- Added support for the `stop_signal` configuration option.
- Commands `start`, `restart`, `pause`, and `unpause` now exit with an
error status code if no containers were modified.
- Added a new `--abort-on-container-exit` flag to `up` which causes `up` to
stop all container and exit once the first container exits.
- Removed support for `FIG_FILE`, `FIG_PROJECT_NAME`, and no longer reads
`fig.yml` as a default Compose file location.
- Removed the `migrate-to-labels` command.
- Removed the `--allow-insecure-ssl` flag.
Bug Fixes:
- Fixed a validation bug that prevented the use of a range of ports in
the `expose` field.
- Fixed a validation bug that prevented the use of arrays in the `entrypoint`
field if they contained duplicate entries.
- Fixed a bug that caused `ulimits` to be ignored when used with `extends`.
- Fixed a bug that prevented ipv6 addresses in `extra_hosts`.
- Fixed a bug that caused `extends` to be ignored when included from
multiple Compose files.
- Fixed an incorrect warning when a container volume was defined in
the Compose file.
- Fixed a bug that prevented the force shutdown behaviour of `up` and
`logs`.
- Fixed a bug that caused `None` to be printed as the network driver name
when the default network driver was used.
- Fixed a bug where using the string form of `dns` or `dns_search` would
cause an error.
- Fixed a bug where a container would be reported as "Up" when it was
in the restarting state.
1.5.2 (2015-12-03) 1.5.2 (2015-12-03)
------------------ ------------------

View file

@ -1,4 +1,4 @@
from __future__ import absolute_import from __future__ import absolute_import
from __future__ import unicode_literals from __future__ import unicode_literals
__version__ = '1.6.0dev' __version__ = '1.6.0rc1'

View file

@ -188,10 +188,10 @@ def find(base_dir, filenames):
[ConfigFile.from_filename(f) for f in filenames]) [ConfigFile.from_filename(f) for f in filenames])
def validate_config_version(config_details): def validate_config_version(config_files):
main_file = config_details.config_files[0] main_file = config_files[0]
validate_top_level_object(main_file) validate_top_level_object(main_file)
for next_file in config_details.config_files[1:]: for next_file in config_files[1:]:
validate_top_level_object(next_file) validate_top_level_object(next_file)
if main_file.version != next_file.version: if main_file.version != next_file.version:
@ -254,7 +254,7 @@ def load(config_details):
Return a fully interpolated, extended and validated configuration. Return a fully interpolated, extended and validated configuration.
""" """
validate_config_version(config_details) validate_config_version(config_details.config_files)
processed_files = [ processed_files = [
process_config_file(config_file) process_config_file(config_file)
@ -267,9 +267,8 @@ def load(config_details):
networks = load_mapping(config_details.config_files, 'get_networks', 'Network') networks = load_mapping(config_details.config_files, 'get_networks', 'Network')
service_dicts = load_services( service_dicts = load_services(
config_details.working_dir, config_details.working_dir,
main_file.filename, main_file,
[file.get_service_dicts() for file in config_details.config_files], [file.get_service_dicts() for file in config_details.config_files])
main_file.version)
return Config(main_file.version, service_dicts, volumes, networks) return Config(main_file.version, service_dicts, volumes, networks)
@ -303,21 +302,21 @@ def load_mapping(config_files, get_func, entity_type):
return mapping return mapping
def load_services(working_dir, filename, service_configs, version): def load_services(working_dir, config_file, service_configs):
def build_service(service_name, service_dict, service_names): def build_service(service_name, service_dict, service_names):
service_config = ServiceConfig.with_abs_paths( service_config = ServiceConfig.with_abs_paths(
working_dir, working_dir,
filename, config_file.filename,
service_name, service_name,
service_dict) service_dict)
resolver = ServiceExtendsResolver(service_config, version) resolver = ServiceExtendsResolver(service_config, config_file)
service_dict = process_service(resolver.run()) service_dict = process_service(resolver.run())
validate_service(service_dict, service_config.name, version) validate_service(service_dict, service_config.name, config_file.version)
service_dict = finalize_service( service_dict = finalize_service(
service_config._replace(config=service_dict), service_config._replace(config=service_dict),
service_names, service_names,
version) config_file.version)
return service_dict return service_dict
def build_services(service_config): def build_services(service_config):
@ -333,7 +332,7 @@ def load_services(working_dir, filename, service_configs, version):
name: merge_service_dicts_from_files( name: merge_service_dicts_from_files(
base.get(name, {}), base.get(name, {}),
override.get(name, {}), override.get(name, {}),
version) config_file.version)
for name in all_service_names for name in all_service_names
} }
@ -373,11 +372,11 @@ def process_config_file(config_file, service_name=None):
class ServiceExtendsResolver(object): class ServiceExtendsResolver(object):
def __init__(self, service_config, version, already_seen=None): def __init__(self, service_config, config_file, already_seen=None):
self.service_config = service_config self.service_config = service_config
self.working_dir = service_config.working_dir self.working_dir = service_config.working_dir
self.already_seen = already_seen or [] self.already_seen = already_seen or []
self.version = version self.config_file = config_file
@property @property
def signature(self): def signature(self):
@ -404,8 +403,10 @@ class ServiceExtendsResolver(object):
config_path = self.get_extended_config_path(extends) config_path = self.get_extended_config_path(extends)
service_name = extends['service'] service_name = extends['service']
extends_file = ConfigFile.from_filename(config_path)
validate_config_version([self.config_file, extends_file])
extended_file = process_config_file( extended_file = process_config_file(
ConfigFile.from_filename(config_path), extends_file,
service_name=service_name) service_name=service_name)
service_config = extended_file.config[service_name] service_config = extended_file.config[service_name]
return config_path, service_config, service_name return config_path, service_config, service_name
@ -417,7 +418,7 @@ class ServiceExtendsResolver(object):
extended_config_path, extended_config_path,
service_name, service_name,
service_dict), service_dict),
self.version, self.config_file,
already_seen=self.already_seen + [self.signature]) already_seen=self.already_seen + [self.signature])
service_config = resolver.run() service_config = resolver.run()
@ -425,13 +426,12 @@ class ServiceExtendsResolver(object):
validate_extended_service_dict( validate_extended_service_dict(
other_service_dict, other_service_dict,
extended_config_path, extended_config_path,
service_name, service_name)
)
return merge_service_dicts( return merge_service_dicts(
other_service_dict, other_service_dict,
self.service_config.config, self.service_config.config,
self.version) self.config_file.version)
def get_extended_config_path(self, extends_options): def get_extended_config_path(self, extends_options):
"""Service we are extending either has a value for 'file' set, which we """Service we are extending either has a value for 'file' set, which we

View file

@ -4,6 +4,8 @@ from __future__ import unicode_literals
import logging import logging
from docker.errors import NotFound from docker.errors import NotFound
from docker.utils import create_ipam_config
from docker.utils import create_ipam_pool
from .config import ConfigurationError from .config import ConfigurationError
@ -13,12 +15,13 @@ log = logging.getLogger(__name__)
class Network(object): class Network(object):
def __init__(self, client, project, name, driver=None, driver_opts=None, def __init__(self, client, project, name, driver=None, driver_opts=None,
external_name=None): ipam=None, external_name=None):
self.client = client self.client = client
self.project = project self.project = project
self.name = name self.name = name
self.driver = driver self.driver = driver
self.driver_opts = driver_opts self.driver_opts = driver_opts
self.ipam = create_ipam_config_from_dict(ipam)
self.external_name = external_name self.external_name = external_name
def ensure(self): def ensure(self):
@ -44,11 +47,11 @@ class Network(object):
data = self.inspect() data = self.inspect()
if self.driver and data['Driver'] != self.driver: if self.driver and data['Driver'] != self.driver:
raise ConfigurationError( raise ConfigurationError(
'Network {} needs to be recreated - driver has changed' 'Network "{}" needs to be recreated - driver has changed'
.format(self.full_name)) .format(self.full_name))
if data['Options'] != (self.driver_opts or {}): if data['Options'] != (self.driver_opts or {}):
raise ConfigurationError( raise ConfigurationError(
'Network {} needs to be recreated - options have changed' 'Network "{}" needs to be recreated - options have changed'
.format(self.full_name)) .format(self.full_name))
except NotFound: except NotFound:
driver_name = 'the default driver' driver_name = 'the default driver'
@ -61,7 +64,10 @@ class Network(object):
) )
self.client.create_network( self.client.create_network(
self.full_name, self.driver, self.driver_opts name=self.full_name,
driver=self.driver,
options=self.driver_opts,
ipam=self.ipam,
) )
def remove(self): def remove(self):
@ -80,3 +86,21 @@ class Network(object):
if self.external_name: if self.external_name:
return self.external_name return self.external_name
return '{0}_{1}'.format(self.project, self.name) return '{0}_{1}'.format(self.project, self.name)
def create_ipam_config_from_dict(ipam_dict):
if not ipam_dict:
return None
return create_ipam_config(
driver=ipam_dict.get('driver'),
pool_configs=[
create_ipam_pool(
subnet=config.get('subnet'),
iprange=config.get('ip_range'),
gateway=config.get('gateway'),
aux_addresses=config.get('aux_addresses'),
)
for config in ipam_dict.get('config', [])
],
)

View file

@ -58,23 +58,25 @@ class Project(object):
use_networking = (config_data.version and config_data.version >= 2) use_networking = (config_data.version and config_data.version >= 2)
project = cls(name, [], client, use_networking=use_networking) project = cls(name, [], client, use_networking=use_networking)
custom_networks = [] network_config = config_data.networks or {}
if config_data.networks: custom_networks = [
for network_name, data in config_data.networks.items():
custom_networks.append(
Network( Network(
client=client, project=name, name=network_name, client=client, project=name, name=network_name,
driver=data.get('driver'), driver=data.get('driver'),
driver_opts=data.get('driver_opts'), driver_opts=data.get('driver_opts'),
ipam=data.get('ipam'),
external_name=data.get('external_name'), external_name=data.get('external_name'),
) )
) for network_name, data in network_config.items()
]
all_networks = custom_networks[:]
if 'default' not in network_config:
all_networks.append(project.default_network)
for service_dict in config_data.services: for service_dict in config_data.services:
if use_networking: if use_networking:
networks = get_networks( networks = get_networks(service_dict, all_networks)
service_dict,
custom_networks + [project.default_network])
net = Net(networks[0]) if networks else Net("none") net = Net(networks[0]) if networks else Net("none")
links = [] links = []
else: else:
@ -96,7 +98,7 @@ class Project(object):
**service_dict)) **service_dict))
project.networks += custom_networks project.networks += custom_networks
if project.uses_default_network(): if 'default' not in network_config and project.uses_default_network():
project.networks.append(project.default_network) project.networks.append(project.default_network)
if config_data.volumes: if config_data.volumes:

View file

@ -39,7 +39,7 @@ which the release page specifies, in your terminal.
The following is an example command illustrating the format: The following is an example command illustrating the format:
curl -L https://github.com/docker/compose/releases/download/1.5.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose curl -L https://github.com/docker/compose/releases/download/1.6.0rc1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
If you have problems installing with `curl`, see If you have problems installing with `curl`, see
[Alternative Install Options](#alternative-install-options). [Alternative Install Options](#alternative-install-options).
@ -54,7 +54,7 @@ which the release page specifies, in your terminal.
7. Test the installation. 7. Test the installation.
$ docker-compose --version $ docker-compose --version
docker-compose version: 1.5.2 docker-compose version: 1.6.0rc1
## Alternative install options ## Alternative install options
@ -77,7 +77,7 @@ to get started.
Compose can also be run inside a container, from a small bash script wrapper. Compose can also be run inside a container, from a small bash script wrapper.
To install compose as a container run: To install compose as a container run:
$ curl -L https://github.com/docker/compose/releases/download/1.5.2/run.sh > /usr/local/bin/docker-compose $ curl -L https://github.com/docker/compose/releases/download/1.6.0rc1/run.sh > /usr/local/bin/docker-compose
$ chmod +x /usr/local/bin/docker-compose $ chmod +x /usr/local/bin/docker-compose
## Master builds ## Master builds

View file

@ -12,18 +12,21 @@ weight=6
# Networking in Compose # Networking in Compose
> **Note:** Compose's networking support is experimental, and must be explicitly enabled with the `docker-compose --x-networking` flag. > **Note:** This document only applies if you're using v2 of the [Compose file format](compose-file.md). Networking features are not supported for legacy Compose files.
Compose sets up a single default By default Compose sets up a single
[network](/engine/reference/commandline/network_create.md) for your app. Each [network](/engine/reference/commandline/network_create.md) for your app. Each
container for a service joins the default network and is both *reachable* by container for a service joins the default network and is both *reachable* by
other containers on that network, and *discoverable* by them at a hostname other containers on that network, and *discoverable* by them at a hostname
identical to the container name. identical to the container name.
> **Note:** Your app's network is given the same name as the "project name", which is based on the name of the directory it lives in. See the [Command line overview](reference/docker-compose.md) for how to override it. > **Note:** Your app's network is given a name based on the "project name", which is based on the name of the directory it lives in. You can override the project name with either the [`--project-name` flag](reference/docker-compose.md) or the [`COMPOSE_PROJECT_NAME` environment variable](reference/overview.md#compose-project-name).
For example, suppose your app is in a directory called `myapp`, and your `docker-compose.yml` looks like this: For example, suppose your app is in a directory called `myapp`, and your `docker-compose.yml` looks like this:
version: 2
services:
web: web:
build: . build: .
ports: ports:
@ -31,64 +34,103 @@ For example, suppose your app is in a directory called `myapp`, and your `docker
db: db:
image: postgres image: postgres
When you run `docker-compose --x-networking up`, the following happens: When you run `docker-compose up`, the following happens:
1. A network called `myapp` is created. 1. A network called `myapp_default` is created.
2. A container is created using `web`'s configuration. It joins the network 2. A container is created using `web`'s configuration. It joins the network
`myapp` under the name `myapp_web_1`. `myapp_default` under the name `web`.
3. A container is created using `db`'s configuration. It joins the network 3. A container is created using `db`'s configuration. It joins the network
`myapp` under the name `myapp_db_1`. `myapp_default` under the name `db`.
Each container can now look up the hostname `myapp_web_1` or `myapp_db_1` and Each container can now look up the hostname `web` or `db` and
get back the appropriate container's IP address. For example, `web`'s get back the appropriate container's IP address. For example, `web`'s
application code could connect to the URL `postgres://myapp_db_1:5432` and start application code could connect to the URL `postgres://db:5432` and start
using the Postgres database. using the Postgres database.
Because `web` explicitly maps a port, it's also accessible from the outside world via port 8000 on your Docker host's network interface. Because `web` explicitly maps a port, it's also accessible from the outside world via port 8000 on your Docker host's network interface.
> **Note:** in the next release there will be additional aliases for the
> container, including a short name without the project name and container
> index. The full container name will remain as one of the alias for backwards
> compatibility.
## Updating containers ## Updating containers
If you make a configuration change to a service and run `docker-compose up` to update it, the old container will be removed and the new one will join the network under a different IP address but the same name. Running containers will be able to look up that name and connect to the new address, but the old address will stop working. If you make a configuration change to a service and run `docker-compose up` to update it, the old container will be removed and the new one will join the network under a different IP address but the same name. Running containers will be able to look up that name and connect to the new address, but the old address will stop working.
If any containers have connections open to the old container, they will be closed. It is a container's responsibility to detect this condition, look up the name again and reconnect. If any containers have connections open to the old container, they will be closed. It is a container's responsibility to detect this condition, look up the name again and reconnect.
## Configure how services are published
By default, containers for each service are published on the network with the
container name. If you want to change the name, or stop containers from being
discoverable at all, you can use the `container_name` option:
web:
build: .
container_name: "my-web-application"
## Links ## Links
Docker links are a one-way, single-host communication system. They should now be considered deprecated, and you should update your app to use networking instead. In the majority of cases, this will simply involve removing the `links` sections from your `docker-compose.yml`. Docker links are a one-way, single-host communication system. They should now be considered deprecated, and as part of upgrading your app to the v2 format, you must remove any `links` sections from your `docker-compose.yml` and use service names (e.g. `web`, `db`) as the hostnames to connect to.
## Specifying the network driver
By default, Compose uses the `bridge` driver when creating the app’s network. The Docker Engine provides one other driver out-of-the-box: `overlay`, which implements secure communication between containers on different hosts (see the next section for how to set up and use the `overlay` driver). Docker also allows you to install [custom network drivers](/engine/extend/plugins_network.md).
You can specify which one to use with the `--x-network-driver` flag:
$ docker-compose --x-networking --x-network-driver=overlay up
<!--[metadata]>
## Multi-host networking ## Multi-host networking
(TODO: talk about Swarm and the overlay driver) When deploying a Compose application to a Swarm cluster, you can make use of the built-in `overlay` driver to enable multi-host communication between containers with no changes to application code. Consult the [Getting started with multi-host networking](/engine/userguide/networking/get-started-overlay.md) to see how to set up the overlay driver, and then specify `driver: overlay` in your networking config (see the sections below for how to do this).
<![end-metadata]-->
## Specifying custom networks
Instead of just using the default app network, you can specify your own networks with the top-level `networks` key. This lets you create more complex topologies and specify [custom network drivers](/engine/extend/plugins_network.md) and options. You can also use it to connect services to externally-created networks which aren't managed by Compose.
Each service can specify what networks to connect to with the *service-level* `networks` key, which is a list of names referencing entries under the *top-level* `networks` key.
Here's an example Compose file defining several networks. The `proxy` service is the gateway to the outside world, via a network called `outside` which is expected to already exist. `proxy` is isolated from the `db` service, because they do not share a network in common - only `app` can talk to both.
version: 2
services:
proxy:
build: ./proxy
networks:
- outside
- front
app:
build: ./app
networks:
- front
- back
db:
image: postgres
networks:
- back
networks:
front:
# Use the overlay driver for multi-host communication
driver: overlay
back:
# Use a custom driver which takes special options
driver: my-custom-driver
options:
foo: "1"
bar: "2"
outside:
# The 'outside' network is expected to already exist - Compose will not
# attempt to create it
external: true
## Configuring the default network
Instead of (or as well as) specifying your own networks, you can also change the settings of the app-wide default network by defining an entry under `networks` named `default`:
version: 2
services:
web:
build: .
ports:
- "8000:8000"
db:
image: postgres
networks:
default:
# Use the overlay driver for multi-host communication
driver: overlay
## Custom container network modes ## Custom container network modes
Compose allows you to specify a custom network mode for a service with the `net` option - for example, `net: "host"` specifies that its containers should use the same network namespace as the Docker host, and `net: "none"` specifies that they should have no networking capabilities. The `docker` CLI command allows you to specify a custom network mode for a container with the `--net` option - for example, `--net=host` specifies that the container should use the same network namespace as the Docker host, and `--net=none` specifies that it should have no networking capabilities.
If a service specifies the `net` option, its containers will *not* join the app’s network and will not be able to communicate with other services in the app. To make use of this in Compose, specify a `networks` list with a single item `host`, `bridge` or `none`:
If *all* services in an app specify the `net` option, a network will not be created at all. app:
build: ./app
networks: ["host"]
There is no equivalent to `--net=container:CONTAINER_NAME` in the v2 Compose file format. You should instead use networks to enable communication.

View file

@ -5,7 +5,7 @@
# $Env:DOCKER_COMPOSE_OPTIONS. # $Env:DOCKER_COMPOSE_OPTIONS.
if ($Env:DOCKER_COMPOSE_VERSION -eq $null -or $Env:DOCKER_COMPOSE_VERSION.Length -eq 0) { if ($Env:DOCKER_COMPOSE_VERSION -eq $null -or $Env:DOCKER_COMPOSE_VERSION.Length -eq 0) {
$Env:DOCKER_COMPOSE_VERSION = "latest" $Env:DOCKER_COMPOSE_VERSION = "1.6.0rc1"
} }
if ($Env:DOCKER_COMPOSE_OPTIONS -eq $null) { if ($Env:DOCKER_COMPOSE_OPTIONS -eq $null) {

View file

@ -15,7 +15,7 @@
set -e set -e
VERSION="1.5.2" VERSION="1.6.0rc1"
IMAGE="docker/compose:$VERSION" IMAGE="docker/compose:$VERSION"

View file

@ -18,7 +18,7 @@ get_versions="docker run --rm
if [ "$DOCKER_VERSIONS" == "" ]; then if [ "$DOCKER_VERSIONS" == "" ]; then
DOCKER_VERSIONS="$($get_versions default)" DOCKER_VERSIONS="$($get_versions default)"
elif [ "$DOCKER_VERSIONS" == "all" ]; then elif [ "$DOCKER_VERSIONS" == "all" ]; then
DOCKER_VERSIONS="1.9.1 1.10.0-dev" DOCKER_VERSIONS=$($get_versions -n 2 recent)
fi fi
@ -38,11 +38,7 @@ for version in $DOCKER_VERSIONS; do
trap "on_exit" EXIT trap "on_exit" EXIT
if [[ $version == *"-dev" ]]; then
repo="dnephin/dind"
else
repo="dockerswarm/dind" repo="dockerswarm/dind"
fi
docker run \ docker run \
-d \ -d \

View file

@ -48,7 +48,7 @@ def wait_on_process(proc, returncode=0):
return ProcessResult(stdout.decode('utf-8'), stderr.decode('utf-8')) return ProcessResult(stdout.decode('utf-8'), stderr.decode('utf-8'))
def wait_on_condition(condition, delay=0.1, timeout=20): def wait_on_condition(condition, delay=0.1, timeout=40):
start_time = time.time() start_time = time.time()
while not condition(): while not condition():
if time.time() - start_time > timeout: if time.time() - start_time > timeout:
@ -409,6 +409,7 @@ class CLITestCase(DockerClientTestCase):
networks = self.client.networks(names=[self.project.default_network.full_name]) networks = self.client.networks(names=[self.project.default_network.full_name])
self.assertEqual(len(networks), 1) self.assertEqual(len(networks), 1)
self.assertEqual(networks[0]['Driver'], 'bridge') self.assertEqual(networks[0]['Driver'], 'bridge')
assert 'com.docker.network.bridge.enable_icc' not in networks[0]['Options']
network = self.client.inspect_network(networks[0]['Id']) network = self.client.inspect_network(networks[0]['Id'])
@ -425,6 +426,18 @@ class CLITestCase(DockerClientTestCase):
for service in services: for service in services:
assert self.lookup(container, service.name) assert self.lookup(container, service.name)
@v2_only()
def test_up_with_default_network_config(self):
filename = 'default-network-config.yml'
self.base_dir = 'tests/fixtures/networks'
self._project = get_project(self.base_dir, [filename])
self.dispatch(['-f', filename, 'up', '-d'], None)
networks = self.client.networks(names=[self.project.default_network.full_name])
assert networks[0]['Options']['com.docker.network.bridge.enable_icc'] == 'false'
@v2_only() @v2_only()
def test_up_with_networks(self): def test_up_with_networks(self):
self.base_dir = 'tests/fixtures/networks' self.base_dir = 'tests/fixtures/networks'
@ -648,14 +661,14 @@ class CLITestCase(DockerClientTestCase):
wait_on_condition(ContainerCountCondition(self.project, 2)) wait_on_condition(ContainerCountCondition(self.project, 2))
os.kill(proc.pid, signal.SIGINT) os.kill(proc.pid, signal.SIGINT)
wait_on_condition(ContainerCountCondition(self.project, 0), timeout=30) wait_on_condition(ContainerCountCondition(self.project, 0))
def test_up_handles_sigterm(self): def test_up_handles_sigterm(self):
proc = start_process(self.base_dir, ['up', '-t', '2']) proc = start_process(self.base_dir, ['up', '-t', '2'])
wait_on_condition(ContainerCountCondition(self.project, 2)) wait_on_condition(ContainerCountCondition(self.project, 2))
os.kill(proc.pid, signal.SIGTERM) os.kill(proc.pid, signal.SIGTERM)
wait_on_condition(ContainerCountCondition(self.project, 0), timeout=30) wait_on_condition(ContainerCountCondition(self.project, 0))
def test_run_service_without_links(self): def test_run_service_without_links(self):
self.base_dir = 'tests/fixtures/links-composefile' self.base_dir = 'tests/fixtures/links-composefile'

View file

@ -0,0 +1,13 @@
version: 2
services:
simple:
image: busybox:latest
command: top
another:
image: busybox:latest
command: top
networks:
default:
driver: bridge
driver_opts:
"com.docker.network.bridge.enable_icc": "false"

View file

@ -516,6 +516,63 @@ class ProjectTest(DockerClientTestCase):
foo_data = self.client.inspect_network('composetest_foo') foo_data = self.client.inspect_network('composetest_foo')
self.assertEqual(foo_data['Driver'], 'bridge') self.assertEqual(foo_data['Driver'], 'bridge')
@v2_only()
def test_up_with_ipam_config(self):
config_data = config.Config(
version=2,
services=[],
volumes={},
networks={
'front': {
'driver': 'bridge',
'driver_opts': {
"com.docker.network.bridge.enable_icc": "false",
},
'ipam': {
'driver': 'default',
'config': [{
"subnet": "172.28.0.0/16",
"ip_range": "172.28.5.0/24",
"gateway": "172.28.5.254",
"aux_addresses": {
"a": "172.28.1.5",
"b": "172.28.1.6",
"c": "172.28.1.7",
},
}],
},
},
},
)
project = Project.from_config(
client=self.client,
name='composetest',
config_data=config_data,
)
project.up()
network = self.client.networks(names=['composetest_front'])[0]
assert network['Options'] == {
"com.docker.network.bridge.enable_icc": "false"
}
assert network['IPAM'] == {
'Driver': 'default',
'Options': None,
'Config': [{
'Subnet': "172.28.0.0/16",
'IPRange': "172.28.5.0/24",
'Gateway': "172.28.5.254",
'AuxiliaryAddresses': {
'a': '172.28.1.5',
'b': '172.28.1.6',
'c': '172.28.1.7',
},
}],
}
@v2_only() @v2_only()
def test_project_up_volumes(self): def test_project_up_volumes(self):
vol_name = '{0:x}'.format(random.getrandbits(32)) vol_name = '{0:x}'.format(random.getrandbits(32))

View file

@ -25,14 +25,15 @@ V1 = 1
def make_service_dict(name, service_dict, working_dir, filename=None): def make_service_dict(name, service_dict, working_dir, filename=None):
"""Test helper function to construct a ServiceExtendsResolver
""" """
Test helper function to construct a ServiceExtendsResolver resolver = config.ServiceExtendsResolver(
""" config.ServiceConfig(
resolver = config.ServiceExtendsResolver(config.ServiceConfig(
working_dir=working_dir, working_dir=working_dir,
filename=filename, filename=filename,
name=name, name=name,
config=service_dict), version=1) config=service_dict),
config.ConfigFile(filename=filename, config={}))
return config.process_service(resolver.run()) return config.process_service(resolver.run())
@ -1888,6 +1889,28 @@ class ExtendsTest(unittest.TestCase):
assert config == expected assert config == expected
def test_extends_with_mixed_versions_is_error(self):
tmpdir = py.test.ensuretemp('test_extends_with_mixed_version')
self.addCleanup(tmpdir.remove)
tmpdir.join('docker-compose.yml').write("""
version: 2
services:
web:
extends:
file: base.yml
service: base
image: busybox
""")
tmpdir.join('base.yml').write("""
base:
volumes: ['/foo']
ports: ['3000:3000']
""")
with pytest.raises(ConfigurationError) as exc:
load_from_filename(str(tmpdir.join('docker-compose.yml')))
assert 'Version mismatch' in exc.exconly()
@pytest.mark.xfail(IS_WINDOWS_PLATFORM, reason='paths use slash') @pytest.mark.xfail(IS_WINDOWS_PLATFORM, reason='paths use slash')
class ExpandPathTest(unittest.TestCase): class ExpandPathTest(unittest.TestCase):