mirror of
https://github.com/docker/docs.git
synced 2026-04-05 10:48:55 +07:00
Merge pull request #1485 from londoncalling/compose-versions
WIP: added drafts of versioned compose reference files
This commit is contained in:
@@ -799,8 +799,16 @@ toc:
|
||||
title: Networking in Compose
|
||||
- path: /compose/production/
|
||||
title: Using Compose in Production
|
||||
- path: /compose/compose-file/
|
||||
title: Compose File Reference
|
||||
- sectiontitle: Compose File Reference
|
||||
section:
|
||||
- path: /compose/compose-file/
|
||||
title: Version 3 reference
|
||||
- path: /compose/compose-file/compose-file-v2/
|
||||
title: Version 2 reference
|
||||
- path: /compose/compose-file/compose-file-v1/
|
||||
title: Version 1 reference
|
||||
- path: /compose/compose-file/compose-versioning/
|
||||
title: About versions and upgrading
|
||||
- sectiontitle: Command-line Reference
|
||||
section:
|
||||
- path: /compose/reference/overview/
|
||||
|
||||
13
_includes/content/compose-matrix.md
Normal file
13
_includes/content/compose-matrix.md
Normal file
@@ -0,0 +1,13 @@
|
||||
There are several versions of the Compose file format – 1, 2, 2.1 and 3. For
|
||||
details on versions and how to upgrade, see
|
||||
[Versioning](compose-versioning.md#versioning) and
|
||||
[Upgrading](compose-versioning.md#upgrading).
|
||||
|
||||
This table shows which Compose file versions support specific Docker releases.
|
||||
|
||||
| **Compose file format** | **Docker Engine release** |
|
||||
| ------------------- | ------------------ |
|
||||
| 3.0 ; 3.1 | 1.13.0+ |
|
||||
| 2.1 | 1.12.0+ |
|
||||
| 2.0 | 1.10.0+ |
|
||||
| 1.0 | 1.9.1.+ |
|
||||
54
_includes/content/compose-var-sub.md
Normal file
54
_includes/content/compose-var-sub.md
Normal file
@@ -0,0 +1,54 @@
|
||||
Your configuration options can contain environment variables. Compose uses the
|
||||
variable values from the shell environment in which `docker-compose` is run.
|
||||
For example, suppose the shell contains `EXTERNAL_PORT=8000` and you supply
|
||||
this configuration:
|
||||
|
||||
web:
|
||||
build: .
|
||||
ports:
|
||||
- "${EXTERNAL_PORT}:5000"
|
||||
|
||||
When you run `docker-compose up` with this configuration, Compose looks for
|
||||
the `EXTERNAL_PORT` environment variable in the shell and substitutes its
|
||||
value in. In this example, Compose resolves the port mapping to `"8000:5000"`
|
||||
before creating the `web` container.
|
||||
|
||||
If an environment variable is not set, Compose substitutes with an empty
|
||||
string. In the example above, if `EXTERNAL_PORT` is not set, the value for the
|
||||
port mapping is `:5000` (which is of course an invalid port mapping, and will
|
||||
result in an error when attempting to create the container).
|
||||
|
||||
You can set default values for environment variables using a
|
||||
[`.env` file](env-file.md), which Compose will automatically look for. Values
|
||||
set in the shell environment will override those set in the `.env` file.
|
||||
|
||||
$ unset EXTERNAL_PORT
|
||||
$ echo "EXTERNAL_PORT=6000" > .env
|
||||
$ docker-compose up # EXTERNAL_PORT will be 6000
|
||||
$ export EXTERNAL_PORT=7000
|
||||
$ docker-compose up # EXTERNAL_PORT will be 7000
|
||||
|
||||
Both `$VARIABLE` and `${VARIABLE}` syntax are supported.
|
||||
Additionally when using the [2.1 file format](compose-versioning.md#version-21), it
|
||||
is possible to provide inline default values using typical shell syntax:
|
||||
|
||||
- `${VARIABLE:-default}` will evaluate to `default` if `VARIABLE` is unset or
|
||||
empty in the environment.
|
||||
- `${VARIABLE-default}` will evaluate to `default` only if `VARIABLE` is unset
|
||||
in the environment.
|
||||
|
||||
Other extended shell-style features, such as `${VARIABLE/foo/bar}`, are not
|
||||
supported.
|
||||
|
||||
You can use a `$$` (double-dollar sign) when your configuration needs a literal
|
||||
dollar sign. This also prevents Compose from interpolating a value, so a `$$`
|
||||
allows you to refer to environment variables that you don't want processed by
|
||||
Compose.
|
||||
|
||||
web:
|
||||
build: .
|
||||
command: "$$VAR_NOT_INTERPOLATED_BY_COMPOSE"
|
||||
|
||||
If you forget and use a single dollar sign (`$`), Compose interprets the value as an environment variable and will warn you:
|
||||
|
||||
The VAR_NOT_INTERPOLATED_BY_COMPOSE is not set. Substituting an empty string.
|
||||
512
compose/compose-file/compose-file-v1.md
Normal file
512
compose/compose-file/compose-file-v1.md
Normal file
@@ -0,0 +1,512 @@
|
||||
---
|
||||
description: Compose file reference
|
||||
keywords: fig, composition, compose version 1, docker
|
||||
redirect_from:
|
||||
- /compose/yml
|
||||
title: Compose file version 1 reference
|
||||
---
|
||||
|
||||
These topics describe version 1 of the Compose file format. This is the oldest
|
||||
version.
|
||||
|
||||
For a Compose/Docker Engine compatibility matrix, and detailed guidelines on
|
||||
versions and upgrading, see
|
||||
[Compose file versions and upgrading](compose-versioning.md).
|
||||
|
||||
## Service configuration reference
|
||||
|
||||
The Version 1 Compose file is a [YAML](http://yaml.org/) file that defines [services](#service-configuration-reference).
|
||||
|
||||
The default path for a Compose file is `./docker-compose.yml`.
|
||||
|
||||
>**Tip:** You can use either a `.yml` or `.yaml` extension for this file. They both work.
|
||||
|
||||
A service definition contains configuration which will be applied to each
|
||||
container started for that service, much like passing command-line parameters to
|
||||
`docker run`.
|
||||
|
||||
As with `docker run`, options specified in the Dockerfile (e.g., `CMD`,
|
||||
`EXPOSE`, `VOLUME`, `ENV`) are respected by default - you don't need to
|
||||
specify them again in `docker-compose.yml`.
|
||||
|
||||
This section contains a list of all configuration options supported by a service
|
||||
definition in version 1.
|
||||
|
||||
### build
|
||||
|
||||
Configuration options that are applied at build time.
|
||||
|
||||
`build` can specified as a string containing a path to the build
|
||||
context.
|
||||
|
||||
build: ./dir
|
||||
|
||||
> **Note**: In the [version 1 file format](compose-versioning.md#version-1), `build` is different in
|
||||
> two ways:
|
||||
>
|
||||
> 1. Only the string form (`build: .`) is allowed - not the object form that is allowed in Version 2 and up.
|
||||
> 2. Using `build` together with [`image`](#image) is not allowed. Attempting to do so
|
||||
> results in an error.
|
||||
|
||||
#### dockerfile
|
||||
|
||||
Alternate Dockerfile.
|
||||
|
||||
Compose will use an alternate file to build with. A build path must also be
|
||||
specified.
|
||||
|
||||
build: .
|
||||
dockerfile: Dockerfile-alternate
|
||||
|
||||
> **Note**: In the [version 1 file format](compose-versioning.md#version-1), `dockerfile` is
|
||||
> different from newer versions in two ways:
|
||||
>
|
||||
> 1. It appears alongside `build`, not as a sub-option:
|
||||
>
|
||||
> 2. Using `dockerfile` together with [`image`](#image) is not allowed. Attempting to do so results in an error.
|
||||
|
||||
### cap_add, cap_drop
|
||||
|
||||
Add or drop container capabilities.
|
||||
See `man 7 capabilities` for a full list.
|
||||
|
||||
cap_add:
|
||||
- ALL
|
||||
|
||||
cap_drop:
|
||||
- NET_ADMIN
|
||||
- SYS_ADMIN
|
||||
|
||||
> **Note:** These options are ignored when
|
||||
> [deploying a stack in swarm mode](/engine/reference/commandline/stack_deploy.md)
|
||||
> with a (version 3) Compose file.
|
||||
|
||||
### command
|
||||
|
||||
Override the default command.
|
||||
|
||||
command: bundle exec thin -p 3000
|
||||
|
||||
The command can also be a list, in a manner similar to
|
||||
[dockerfile](/engine/reference/builder.md#cmd):
|
||||
|
||||
command: [bundle, exec, thin, -p, 3000]
|
||||
|
||||
### cgroup_parent
|
||||
|
||||
Specify an optional parent cgroup for the container.
|
||||
|
||||
cgroup_parent: m-executor-abcd
|
||||
|
||||
### container_name
|
||||
|
||||
Specify a custom container name, rather than a generated default name.
|
||||
|
||||
container_name: my-web-container
|
||||
|
||||
Because Docker container names must be unique, you cannot scale a service
|
||||
beyond 1 container if you have specified a custom name. Attempting to do so
|
||||
results in an error.
|
||||
|
||||
### devices
|
||||
|
||||
List of device mappings. Uses the same format as the `--device` docker
|
||||
client create option.
|
||||
|
||||
devices:
|
||||
- "/dev/ttyUSB0:/dev/ttyUSB0"
|
||||
|
||||
### dns
|
||||
|
||||
Custom DNS servers. Can be a single value or a list.
|
||||
|
||||
dns: 8.8.8.8
|
||||
dns:
|
||||
- 8.8.8.8
|
||||
- 9.9.9.9
|
||||
|
||||
### dns_search
|
||||
|
||||
Custom DNS search domains. Can be a single value or a list.
|
||||
|
||||
dns_search: example.com
|
||||
dns_search:
|
||||
- dc1.example.com
|
||||
- dc2.example.com
|
||||
|
||||
### entrypoint
|
||||
|
||||
Override the default entrypoint.
|
||||
|
||||
entrypoint: /code/entrypoint.sh
|
||||
|
||||
The entrypoint can also be a list, in a manner similar to
|
||||
[dockerfile](/engine/reference/builder.md#entrypoint):
|
||||
|
||||
entrypoint:
|
||||
- php
|
||||
- -d
|
||||
- zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20100525/xdebug.so
|
||||
- -d
|
||||
- memory_limit=-1
|
||||
- vendor/bin/phpunit
|
||||
|
||||
> **Note:** Setting `entrypoint` will both override any default entrypoint set
|
||||
> on the service's image with the `ENTRYPOINT` Dockerfile instruction, *and*
|
||||
> clear out any default command on the image - meaning that if there's a `CMD`
|
||||
> instruction in the Dockerfile, it will be ignored.
|
||||
|
||||
### env_file
|
||||
|
||||
Add environment variables from a file. Can be a single value or a list.
|
||||
|
||||
If you have specified a Compose file with `docker-compose -f FILE`, paths in
|
||||
`env_file` are relative to the directory that file is in.
|
||||
|
||||
Environment variables specified in `environment` override these values.
|
||||
|
||||
env_file: .env
|
||||
|
||||
env_file:
|
||||
- ./common.env
|
||||
- ./apps/web.env
|
||||
- /opt/secrets.env
|
||||
|
||||
Compose expects each line in an env file to be in `VAR=VAL` format. Lines
|
||||
beginning with `#` (i.e. comments) are ignored, as are blank lines.
|
||||
|
||||
# Set Rails/Rack environment
|
||||
RACK_ENV=development
|
||||
|
||||
> **Note:** If your service specifies a [build](#build) option, variables
|
||||
> defined in environment files will _not_ be automatically visible during the
|
||||
> build.
|
||||
|
||||
The value of `VAL` is used as is and not modified at all. For example if the value is
|
||||
surrounded by quotes (as is often the case of shell variables), the quotes will be
|
||||
included in the value passed to Compose.
|
||||
|
||||
### environment
|
||||
|
||||
Add environment variables. You can use either an array or a dictionary. Any
|
||||
boolean values; true, false, yes no, need to be enclosed in quotes to ensure
|
||||
they are not converted to True or False by the YML parser.
|
||||
|
||||
Environment variables with only a key are resolved to their values on the
|
||||
machine Compose is running on, which can be helpful for secret or host-specific values.
|
||||
|
||||
environment:
|
||||
RACK_ENV: development
|
||||
SHOW: 'true'
|
||||
SESSION_SECRET:
|
||||
|
||||
environment:
|
||||
- RACK_ENV=development
|
||||
- SHOW=true
|
||||
- SESSION_SECRET
|
||||
|
||||
> **Note:** If your service specifies a [build](#build) option, variables
|
||||
> defined in `environment` will _not_ be automatically visible during the
|
||||
> build.
|
||||
|
||||
### expose
|
||||
|
||||
Expose ports without publishing them to the host machine - they'll only be
|
||||
accessible to linked services. Only the internal port can be specified.
|
||||
|
||||
expose:
|
||||
- "3000"
|
||||
- "8000"
|
||||
|
||||
### extends
|
||||
|
||||
Extend another service, in the current file or another, optionally overriding
|
||||
configuration.
|
||||
|
||||
You can use `extends` on any service together with other configuration keys.
|
||||
The `extends` value must be a dictionary defined with a required `service`
|
||||
and an optional `file` key.
|
||||
|
||||
extends:
|
||||
file: common.yml
|
||||
service: webapp
|
||||
|
||||
The `service` the name of the service being extended, for example
|
||||
`web` or `database`. The `file` is the location of a Compose configuration
|
||||
file defining that service.
|
||||
|
||||
If you omit the `file` Compose looks for the service configuration in the
|
||||
current file. The `file` value can be an absolute or relative path. If you
|
||||
specify a relative path, Compose treats it as relative to the location of the
|
||||
current file.
|
||||
|
||||
You can extend a service that itself extends another. You can extend
|
||||
indefinitely. Compose does not support circular references and `docker-compose`
|
||||
returns an error if it encounters one.
|
||||
|
||||
For more on `extends`, see the
|
||||
[the extends documentation](extends.md#extending-services).
|
||||
|
||||
### external_links
|
||||
|
||||
Link to containers started outside this `docker-compose.yml` or even outside
|
||||
of Compose, especially for containers that provide shared or common services.
|
||||
`external_links` follow semantics similar to `links` when specifying both the
|
||||
container name and the link alias (`CONTAINER:ALIAS`).
|
||||
|
||||
external_links:
|
||||
- redis_1
|
||||
- project_db_1:mysql
|
||||
- project_db_1:postgresql
|
||||
|
||||
### extra_hosts
|
||||
|
||||
Add hostname mappings. Use the same values as the docker client `--add-host` parameter.
|
||||
|
||||
extra_hosts:
|
||||
- "somehost:162.242.195.82"
|
||||
- "otherhost:50.31.209.229"
|
||||
|
||||
An entry with the ip address and hostname will be created in `/etc/hosts` inside containers for this service, e.g:
|
||||
|
||||
162.242.195.82 somehost
|
||||
50.31.209.229 otherhost
|
||||
|
||||
### image
|
||||
|
||||
Specify the image to start the container from. Can either be a repository/tag or
|
||||
a partial image ID.
|
||||
|
||||
image: redis
|
||||
image: ubuntu:14.04
|
||||
image: tutum/influxdb
|
||||
image: example-registry.com:4000/postgresql
|
||||
image: a4bc65fd
|
||||
|
||||
If the image does not exist, Compose attempts to pull it, unless you have also
|
||||
specified [build](#build), in which case it builds it using the specified
|
||||
options and tags it with the specified tag.
|
||||
|
||||
> **Note**: In the [version 1 file format](compose-versioning.md#version-1), using [`build`](#build) together
|
||||
> with `image` is not allowed. Attempting to do so results in an error.
|
||||
|
||||
### labels
|
||||
|
||||
Add metadata to containers using [Docker labels](/engine/userguide/labels-custom-metadata.md). You can use either an array or a dictionary.
|
||||
|
||||
It's recommended that you use reverse-DNS notation to prevent your labels from conflicting with those used by other software.
|
||||
|
||||
labels:
|
||||
com.example.description: "Accounting webapp"
|
||||
com.example.department: "Finance"
|
||||
com.example.label-with-empty-value: ""
|
||||
|
||||
labels:
|
||||
- "com.example.description=Accounting webapp"
|
||||
- "com.example.department=Finance"
|
||||
- "com.example.label-with-empty-value"
|
||||
|
||||
### links
|
||||
|
||||
Link to containers in another service. Either specify both the service name and
|
||||
a link alias (`SERVICE:ALIAS`), or just the service name.
|
||||
|
||||
web:
|
||||
links:
|
||||
- db
|
||||
- db:database
|
||||
- redis
|
||||
|
||||
Containers for the linked service will be reachable at a hostname identical to
|
||||
the alias, or the service name if no alias was specified.
|
||||
|
||||
Links also express dependency between services in the same way as
|
||||
[depends_on](#dependson), so they determine the order of service startup.
|
||||
|
||||
> **Note:** If you define both links and [networks](#networks), services with
|
||||
> links between them must share at least one network in common in order to
|
||||
> communicate.
|
||||
|
||||
### log_driver
|
||||
|
||||
> [Version 1 file format](compose-versioning#version-1) only. In version 2 and up, use
|
||||
> [logging](index.md#logging).
|
||||
|
||||
Specify a log driver. The default is `json-file`.
|
||||
|
||||
log_driver: syslog
|
||||
|
||||
### log_opt
|
||||
|
||||
> [Version 1 file format](compose-versioning#version-1) only. In version 2 and up, use
|
||||
> [logging](index.md#logging).
|
||||
|
||||
Specify logging options as key-value pairs. An example of `syslog` options:
|
||||
|
||||
log_opt:
|
||||
syslog-address: "tcp://192.168.0.42:123"
|
||||
|
||||
### net
|
||||
|
||||
> [Version 1 file format](compose-versioning.md#version-1) only. In version 2 and up, use
|
||||
> [network_mode](index.md#networkmode) and [networks](index.md#networks).
|
||||
|
||||
Network mode. Use the same values as the docker client `--net` parameter.
|
||||
The `container:...` form can take a service name instead of a container name or
|
||||
id.
|
||||
|
||||
net: "bridge"
|
||||
net: "host"
|
||||
net: "none"
|
||||
net: "container:[service name or container name/id]"
|
||||
|
||||
### pid
|
||||
|
||||
pid: "host"
|
||||
|
||||
Sets the PID mode to the host PID mode. This turns on sharing between
|
||||
container and the host operating system the PID address space. Containers
|
||||
launched with this flag will be able to access and manipulate other
|
||||
containers in the bare-metal machine's namespace and vise-versa.
|
||||
|
||||
### ports
|
||||
|
||||
Expose ports. Either specify both ports (`HOST:CONTAINER`), or just the container
|
||||
port (a random host port will be chosen).
|
||||
|
||||
> **Note:** When mapping ports in the `HOST:CONTAINER` format, you may experience
|
||||
> erroneous results when using a container port lower than 60, because YAML will
|
||||
> parse numbers in the format `xx:yy` as sexagesimal (base 60). For this reason,
|
||||
> we recommend always explicitly specifying your port mappings as strings.
|
||||
|
||||
ports:
|
||||
- "3000"
|
||||
- "3000-3005"
|
||||
- "8000:8000"
|
||||
- "9090-9091:8080-8081"
|
||||
- "49100:22"
|
||||
- "127.0.0.1:8001:8001"
|
||||
- "127.0.0.1:5000-5010:5000-5010"
|
||||
- "6060:6060/udp"
|
||||
|
||||
### security_opt
|
||||
|
||||
Override the default labeling scheme for each container.
|
||||
|
||||
security_opt:
|
||||
- label:user:USER
|
||||
- label:role:ROLE
|
||||
|
||||
### stop_signal
|
||||
|
||||
Sets an alternative signal to stop the container. By default `stop` uses
|
||||
SIGTERM. Setting an alternative signal using `stop_signal` will cause
|
||||
`stop` to send that signal instead.
|
||||
|
||||
stop_signal: SIGUSR1
|
||||
|
||||
### ulimits
|
||||
|
||||
Override the default ulimits for a container. You can either specify a single
|
||||
limit as an integer or soft/hard limits as a mapping.
|
||||
|
||||
|
||||
ulimits:
|
||||
nproc: 65535
|
||||
nofile:
|
||||
soft: 20000
|
||||
hard: 40000
|
||||
|
||||
### volumes, volume\_driver
|
||||
|
||||
Mount paths or named volumes, optionally specifying a path on the host machine
|
||||
(`HOST:CONTAINER`), or an access mode (`HOST:CONTAINER:ro`).
|
||||
For [version 2 files](compose-versioning#version-2), named volumes need to be specified with the
|
||||
[top-level `volumes` key](compose-file-v2.md#volume-configuration-reference).
|
||||
When using [version 1](compose-versioning#version-1), the Docker Engine will create the named
|
||||
volume automatically if it doesn't exist.
|
||||
|
||||
You can mount a relative path on the host, which will expand relative to
|
||||
the directory of the Compose configuration file being used. Relative paths
|
||||
should always begin with `.` or `..`.
|
||||
|
||||
volumes:
|
||||
# Just specify a path and let the Engine create a volume
|
||||
- /var/lib/mysql
|
||||
|
||||
# Specify an absolute path mapping
|
||||
- /opt/data:/var/lib/mysql
|
||||
|
||||
# Path on the host, relative to the Compose file
|
||||
- ./cache:/tmp/cache
|
||||
|
||||
# User-relative path
|
||||
- ~/configs:/etc/configs/:ro
|
||||
|
||||
# Named volume
|
||||
- datavolume:/var/lib/mysql
|
||||
|
||||
If you do not use a host path, you may specify a `volume_driver`.
|
||||
|
||||
volume_driver: mydriver
|
||||
|
||||
There are several things to note, depending on which
|
||||
[Compose file version](compose-versioning#versioning) you're using:
|
||||
|
||||
- For [version 1 files](compose-versioning#version-1), both named volumes and
|
||||
container volumes will use the specified driver.
|
||||
|
||||
- No path expansion will be done if you have also specified a `volume_driver`.
|
||||
For example, if you specify a mapping of `./foo:/data`, the `./foo` part
|
||||
will be passed straight to the volume driver without being expanded.
|
||||
|
||||
See [Docker Volumes](/engine/userguide/dockervolumes.md) and
|
||||
[Volume Plugins](/engine/extend/plugins_volume.md) for more information.
|
||||
|
||||
### volumes_from
|
||||
|
||||
Mount all of the volumes from another service or container, optionally
|
||||
specifying read-only access (``ro``) or read-write (``rw``). If no access level
|
||||
is specified, then read-write will be used.
|
||||
|
||||
volumes_from:
|
||||
- service_name
|
||||
- service_name:ro
|
||||
|
||||
### cpu\_shares, cpu\_quota, cpuset, domainname, hostname, ipc, mac\_address, mem\_limit, memswap\_limit, oom_score_adj, privileged, read\_only, restart, shm\_size, stdin\_open, tty, user, working\_dir
|
||||
|
||||
Each of these is a single value, analogous to its
|
||||
[docker run](/engine/reference/run.md) counterpart.
|
||||
|
||||
cpu_shares: 73
|
||||
cpu_quota: 50000
|
||||
cpuset: 0,1
|
||||
|
||||
user: postgresql
|
||||
working_dir: /code
|
||||
|
||||
domainname: foo.com
|
||||
hostname: foo
|
||||
ipc: host
|
||||
mac_address: 02:42:ac:11:65:43
|
||||
|
||||
mem_limit: 1000000000
|
||||
memswap_limit: 2000000000
|
||||
privileged: true
|
||||
|
||||
restart: always
|
||||
|
||||
read_only: true
|
||||
shm_size: 64M
|
||||
stdin_open: true
|
||||
tty: true
|
||||
|
||||
## Compose documentation
|
||||
|
||||
- [User guide](index.md)
|
||||
- [Installing Compose](install.md)
|
||||
- [Compose file versions and upgrading](compose-versioning.md)
|
||||
- [Get started with Django](django.md)
|
||||
- [Get started with Rails](rails.md)
|
||||
- [Get started with WordPress](wordpress.md)
|
||||
- [Command line reference](./reference/index.md)
|
||||
1179
compose/compose-file/compose-file-v2.md
Normal file
1179
compose/compose-file/compose-file-v2.md
Normal file
File diff suppressed because it is too large
Load Diff
318
compose/compose-file/compose-versioning.md
Normal file
318
compose/compose-file/compose-versioning.md
Normal file
@@ -0,0 +1,318 @@
|
||||
---
|
||||
description: Compose file reference
|
||||
keywords: fig, composition, compose, versions, upgrading, docker
|
||||
title: Compose file versions and upgrading
|
||||
---
|
||||
|
||||
The Compose file is a [YAML](http://yaml.org/) file defining services,
|
||||
networks, and volumes for a Docker application.
|
||||
|
||||
Thes Compose file formats are now specified in these references, specific to each version.
|
||||
|
||||
- [Version 3](index.md) (most current, and recommended)
|
||||
|
||||
- [Version 2](compose-file-v2.md)
|
||||
|
||||
- [Version 1](compose-file-v1.md)
|
||||
|
||||
The topics below explain the differences among the versions, Docker Engine compatibility, and how to upgrade.
|
||||
|
||||
## Compatibility matrix
|
||||
|
||||
{% include content/compose-matrix.md %}
|
||||
|
||||
## Versioning
|
||||
|
||||
There are currently three versions of the Compose file format:
|
||||
|
||||
- Version 1, the legacy format. This is specified by
|
||||
omitting a `version` key at the root of the YAML.
|
||||
|
||||
- Version 2.x. This is specified with a `version: '2'` or `version: '2.1'` entry at the root of the YAML.
|
||||
|
||||
- Version 3.x, the latest and recommended version, designed to
|
||||
be cross-compatible between Compose and the Docker Engine's
|
||||
[swarm mode](/engine/swarm/index.md). This is specified with a `version: '3'` or `version: '3.1'`, etc., entry at the root of the YAML.
|
||||
|
||||
|
||||
The [Compatibility Matrix](#compatibility-matrix) shows Compose file versions mapped to Docker Engine releases.
|
||||
|
||||
To move your project to a later version, see the [Upgrading](#upgrading)
|
||||
section.
|
||||
|
||||
> **Note:** If you're using
|
||||
> [multiple Compose files](extends.md#different-environments) or
|
||||
> [extending services](extends.md#extending-services), each file must be of the
|
||||
> same version - you cannot, for example, mix version 1 and 2 in a single
|
||||
> project.
|
||||
|
||||
Several things differ depending on which version you use:
|
||||
|
||||
- The structure and permitted configuration keys
|
||||
- The minimum Docker Engine version you must be running
|
||||
- Compose's behaviour with regards to networking
|
||||
|
||||
These differences are explained below.
|
||||
|
||||
### Version 1
|
||||
|
||||
Compose files that do not declare a version are considered "version 1". In those
|
||||
files, all the [services](index.md#service-configuration-reference) are
|
||||
declared at the root of the document.
|
||||
|
||||
Version 1 is supported by **Compose up to 1.6.x**. It will be deprecated in a
|
||||
future Compose release.
|
||||
|
||||
Version 1 files cannot declare named
|
||||
[volumes](index.md#volume-configuration-reference), [networks](index.md#network-configuration-reference) or
|
||||
[build arguments](index.md#args).
|
||||
|
||||
Compose does not take advantage of [networking](index.md#networking.md) when you use
|
||||
version 1: every container is placed on the default `bridge` network and is
|
||||
reachable from every other container at its IP address. You will need to use
|
||||
[links](compose-file-v1.md#links) to enable discovery between containers.
|
||||
|
||||
Example:
|
||||
|
||||
web:
|
||||
build: .
|
||||
ports:
|
||||
- "5000:5000"
|
||||
volumes:
|
||||
- .:/code
|
||||
links:
|
||||
- redis
|
||||
redis:
|
||||
image: redis
|
||||
|
||||
### Version 2
|
||||
|
||||
Compose files using the version 2 syntax must indicate the version number at
|
||||
the root of the document. All [services](compose-file-v2.md#service-configuration-reference)
|
||||
must be declared under the `services` key.
|
||||
|
||||
Version 2 files are supported by **Compose 1.6.0+** and require a Docker Engine
|
||||
of version **1.10.0+**.
|
||||
|
||||
Named [volumes](compose-file-v2.md#volume-configuration-reference) can be declared under the
|
||||
`volumes` key, and [networks](compose-file-v2.md#network-configuration-reference) can be declared
|
||||
under the `networks` key.
|
||||
|
||||
By default, every container joins an application-wide default network, and is
|
||||
discoverable at a hostname that's the same as the service name. This means
|
||||
[links](compose-file-v2.md#links) are largely unnecessary. For more details, see
|
||||
[Networking in Compose](compose-file-v2.md#networking.md).
|
||||
|
||||
Simple example:
|
||||
|
||||
version: '2'
|
||||
services:
|
||||
web:
|
||||
build: .
|
||||
ports:
|
||||
- "5000:5000"
|
||||
volumes:
|
||||
- .:/code
|
||||
redis:
|
||||
image: redis
|
||||
|
||||
A more extended example, defining volumes and networks:
|
||||
|
||||
version: '2'
|
||||
services:
|
||||
web:
|
||||
build: .
|
||||
ports:
|
||||
- "5000:5000"
|
||||
volumes:
|
||||
- .:/code
|
||||
networks:
|
||||
- front-tier
|
||||
- back-tier
|
||||
redis:
|
||||
image: redis
|
||||
volumes:
|
||||
- redis-data:/var/lib/redis
|
||||
networks:
|
||||
- back-tier
|
||||
volumes:
|
||||
redis-data:
|
||||
driver: local
|
||||
networks:
|
||||
front-tier:
|
||||
driver: bridge
|
||||
back-tier:
|
||||
driver: bridge
|
||||
|
||||
Several other options were added to support networking, such as:
|
||||
|
||||
* aliases
|
||||
|
||||
* The `depends_on` option can be used in place of links to indicate dependencies
|
||||
between services and startup order.
|
||||
|
||||
version: '2'
|
||||
services:
|
||||
web:
|
||||
build: .
|
||||
depends_on:
|
||||
- db
|
||||
- redis
|
||||
redis:
|
||||
image: redis
|
||||
db:
|
||||
image: postgres
|
||||
|
||||
* ipv4_address, ipv6_address
|
||||
|
||||
[Variable substitution](compose-file-v2.md#variable-substitution) was added in Version 2.
|
||||
|
||||
### Version 2.1
|
||||
|
||||
An upgrade of [version 2](#version-2) that introduces new parameters only
|
||||
available with Docker Engine version **1.12.0+**
|
||||
|
||||
Introduces the following additional parameters:
|
||||
|
||||
- [`link_local_ips`](compose-file-v2.md#linklocalips)
|
||||
- [`isolation`](compose-file-v2.md#isolation)
|
||||
- `labels` for [volumes](compose-file-v2.md#volume-configuration-reference) and
|
||||
[networks](compose-file-v2.md#network-configuration-reference)
|
||||
- [`userns_mode`](compose-file-v2.md#userns_mode)
|
||||
- [`healthcheck`](compose-file-v2.md#healthcheck)
|
||||
- [`sysctls`](compose-file-v2.md#sysctls)
|
||||
|
||||
### Version 3
|
||||
|
||||
Designed to be cross-compatible between Compose and the Docker Engine's
|
||||
[swarm mode](/engine/swarm/index.md), version 3 removes several options and adds
|
||||
several more.
|
||||
|
||||
- Removed: `volume_driver`, `volumes_from`, `cpu_shares`, `cpu_quota`, `cpuset`,
|
||||
`mem_limit`, `memswap_limit`. See the [upgrading](#upgrading)
|
||||
guide for how to migrate away from these.
|
||||
|
||||
- Added: [deploy](index.md#deploy)
|
||||
|
||||
## Upgrading
|
||||
|
||||
### Version 2.x to 3.x
|
||||
|
||||
Between versions 2.x and 3.x, the structure of the Compose file is the same, but
|
||||
several options have been removed:
|
||||
|
||||
- `volume_driver`: Instead of setting the volume driver on the service, define
|
||||
a volume using the
|
||||
[top-level `volumes` option](index.md#volume-configuration-reference)
|
||||
and specify the driver there.
|
||||
|
||||
version: "3"
|
||||
services:
|
||||
db:
|
||||
image: postgres
|
||||
volumes:
|
||||
- data:/var/lib/postgresql/data
|
||||
volumes:
|
||||
data:
|
||||
driver: mydriver
|
||||
|
||||
- `volumes_from`: To share a volume between services, define it using the
|
||||
[top-level `volumes` option](index.md#volume-configuration-reference)
|
||||
and reference it from each service that shares it using the
|
||||
[service-level `volumes` option](index.md#volumes-volumedriver).
|
||||
|
||||
- `cpu_shares`, `cpu_quota`, `cpuset`, `mem_limit`, `memswap_limit`: These
|
||||
have been replaced by the [resources](index.md#resources) key under
|
||||
`deploy`. Note that `deploy` configuration only takes effect when using
|
||||
`docker stack deploy`, and is ignored by `docker-compose`.
|
||||
|
||||
### Version 1 to 2.x
|
||||
|
||||
In the majority of cases, moving from version 1 to 2 is a very simple process:
|
||||
|
||||
1. Indent the whole file by one level and put a `services:` key at the top.
|
||||
2. Add a `version: '2'` line at the top of the file.
|
||||
|
||||
It's more complicated if you're using particular configuration features:
|
||||
|
||||
- `dockerfile`: This now lives under the `build` key:
|
||||
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile-alternate
|
||||
|
||||
- `log_driver`, `log_opt`: These now live under the `logging` key:
|
||||
|
||||
logging:
|
||||
driver: syslog
|
||||
options:
|
||||
syslog-address: "tcp://192.168.0.42:123"
|
||||
|
||||
- `links` with environment variables: As documented in the
|
||||
[environment variables reference](link-env-deprecated.md), environment variables
|
||||
created by
|
||||
links have been deprecated for some time. In the new Docker network system,
|
||||
they have been removed. You should either connect directly to the
|
||||
appropriate hostname or set the relevant environment variable yourself,
|
||||
using the link hostname:
|
||||
|
||||
web:
|
||||
links:
|
||||
- db
|
||||
environment:
|
||||
- DB_PORT=tcp://db:5432
|
||||
|
||||
- `external_links`: Compose uses Docker networks when running version 2
|
||||
projects, so links behave slightly differently. In particular, two
|
||||
containers must be connected to at least one network in common in order to
|
||||
communicate, even if explicitly linked together.
|
||||
|
||||
Either connect the external container to your app's
|
||||
[default network](networking.md), or connect both the external container and
|
||||
your service's containers to an
|
||||
[external network](networking.md#using-a-pre-existing-network).
|
||||
|
||||
- `net`: This is now replaced by [network_mode](compose-file-v1.md#network_mode):
|
||||
|
||||
net: host -> network_mode: host
|
||||
net: bridge -> network_mode: bridge
|
||||
net: none -> network_mode: none
|
||||
|
||||
If you're using `net: "container:[service name]"`, you must now use
|
||||
`network_mode: "service:[service name]"` instead.
|
||||
|
||||
net: "container:web" -> network_mode: "service:web"
|
||||
|
||||
If you're using `net: "container:[container name/id]"`, the value does not
|
||||
need to change.
|
||||
|
||||
net: "container:cont-name" -> network_mode: "container:cont-name"
|
||||
net: "container:abc12345" -> network_mode: "container:abc12345"
|
||||
|
||||
- `volumes` with named volumes: these must now be explicitly declared in a
|
||||
top-level `volumes` section of your Compose file. If a service mounts a
|
||||
named volume called `data`, you must declare a `data` volume in your
|
||||
top-level `volumes` section. The whole file might look like this:
|
||||
|
||||
version: '2'
|
||||
services:
|
||||
db:
|
||||
image: postgres
|
||||
volumes:
|
||||
- data:/var/lib/postgresql/data
|
||||
volumes:
|
||||
data: {}
|
||||
|
||||
By default, Compose creates a volume whose name is prefixed with your
|
||||
project name. If you want it to just be called `data`, declare it as
|
||||
external:
|
||||
|
||||
volumes:
|
||||
data:
|
||||
external: true
|
||||
|
||||
## Compose file format references
|
||||
|
||||
- [Compose file version 3](index.md)
|
||||
- [Compose file version 2](compose-file-v2.md)
|
||||
- [Compose file version 1](compose-file-v1.md)
|
||||
@@ -3,13 +3,23 @@ description: Compose file reference
|
||||
keywords: fig, composition, compose, docker
|
||||
redirect_from:
|
||||
- /compose/yml
|
||||
title: Compose file reference
|
||||
- /compose/compose-file-v3.md
|
||||
title: Compose file version 3 reference
|
||||
---
|
||||
|
||||
These topics describe version 3 of the Compose file format. This is the newest
|
||||
version.
|
||||
|
||||
For a Compose/Docker Engine compatibility matrix, and detailed guidelines on
|
||||
versions and upgrading, see
|
||||
[Compose file versions and upgrading](compose-versioning.md).
|
||||
|
||||
## Service configuration reference
|
||||
|
||||
The Compose file is a [YAML](http://yaml.org/) file defining
|
||||
[services](compose-file.md#service-configuration-reference),
|
||||
[networks](compose-file.md#network-configuration-reference) and
|
||||
[volumes](compose-file.md#volume-configuration-reference).
|
||||
[services](#service-configuration-reference),
|
||||
[networks](#network-configuration-reference) and
|
||||
[volumes](#volume-configuration-reference).
|
||||
The default path for a Compose file is `./docker-compose.yml`.
|
||||
|
||||
>**Tip:** You can use either a `.yml` or `.yaml` extension for this file. They both work.
|
||||
@@ -24,18 +34,11 @@ As with `docker run`, options specified in the Dockerfile (e.g., `CMD`,
|
||||
specify them again in `docker-compose.yml`.
|
||||
|
||||
You can use environment variables in configuration values with a Bash-like
|
||||
`${VARIABLE}` syntax - see [variable substitution](compose-file.md#variable-substitution) for
|
||||
full details.
|
||||
|
||||
|
||||
## Service configuration reference
|
||||
|
||||
> **Note:** There are several versions of the Compose file format – 1, 2, 2.1
|
||||
> and 3. For more information, see the [Versioning](compose-file.md#versioning)
|
||||
> section.
|
||||
`${VARIABLE}` syntax - see [variable
|
||||
substitution](compose-file.md#variable-substitution) for full details.
|
||||
|
||||
This section contains a list of all configuration options supported by a service
|
||||
definition.
|
||||
definition in version 3.
|
||||
|
||||
### build
|
||||
|
||||
@@ -61,22 +64,12 @@ with the `webapp` and optional `tag` specified in `image`:
|
||||
|
||||
This will result in an image named `webapp` and tagged `tag`, built from `./dir`.
|
||||
|
||||
> **Note**: In the [version 1 file format](compose-file.md#version-1), `build` is different in
|
||||
> two ways:
|
||||
>
|
||||
> 1. Only the string form (`build: .`) is allowed - not the object form.
|
||||
> 2. Using `build` together with `image` is not allowed. Attempting to do so
|
||||
> results in an error.
|
||||
|
||||
> **Note:** This option is ignored when
|
||||
> [deploying a stack in swarm mode](/engine/reference/commandline/stack_deploy.md)
|
||||
> with a (version 3) Compose file. The `docker stack` command accepts only pre-built images.
|
||||
|
||||
#### context
|
||||
|
||||
> [Version 2 file format](compose-file.md#version-2) and up. In version 1, just use
|
||||
> [build](compose-file.md#build).
|
||||
|
||||
Either a path to a directory containing a Dockerfile, or a url to a git repository.
|
||||
|
||||
When the value supplied is a relative path, it is interpreted as relative to the
|
||||
@@ -99,22 +92,8 @@ specified.
|
||||
context: .
|
||||
dockerfile: Dockerfile-alternate
|
||||
|
||||
> **Note**: In the [version 1 file format](compose-file.md#version-1), `dockerfile` is
|
||||
> different in two ways:
|
||||
>
|
||||
> 1. It appears alongside `build`, not as a sub-option:
|
||||
>
|
||||
> ```
|
||||
> build: .
|
||||
> dockerfile: Dockerfile-alternate
|
||||
> ```
|
||||
>
|
||||
> 2. Using `dockerfile` together with `image` is not allowed. Attempting to do so results in an error.
|
||||
|
||||
#### args
|
||||
|
||||
> [Version 2 file format](compose-file.md#version-2) and up.
|
||||
|
||||
Add build arguments, which are environment variables accessible only during the
|
||||
build process.
|
||||
|
||||
@@ -200,7 +179,7 @@ results in an error.
|
||||
|
||||
### deploy
|
||||
|
||||
> **[Version 3](compose-file.md#version-3) only.**
|
||||
> **[Version 3](compose-versioning.md#version-3) only.**
|
||||
|
||||
Specify configuration related to the deployment and running of services. This
|
||||
only takes effect when deploying to a [swarm](/engine/swarm/index.md) with
|
||||
@@ -268,13 +247,18 @@ Configures resource constraints. This replaces the older resource constraint
|
||||
options in Compose files prior to version 3 (`cpu_shares`, `cpu_quota`,
|
||||
`cpuset`, `mem_limit`, `memswap_limit`).
|
||||
|
||||
resources:
|
||||
limits:
|
||||
cpus: '0.001'
|
||||
memory: 50M
|
||||
reservations:
|
||||
cpus: '0.0001'
|
||||
memory: 20M
|
||||
Each of these is a single value, analogous to its
|
||||
[docker run](/engine/reference/run.md) counterpart.
|
||||
|
||||
```
|
||||
resources:
|
||||
limits:
|
||||
cpus: '0.001'
|
||||
memory: 50M
|
||||
reservations:
|
||||
cpus: '0.0001'
|
||||
memory: 20M
|
||||
```
|
||||
|
||||
#### restart_policy
|
||||
|
||||
@@ -362,9 +346,7 @@ Simple example:
|
||||
> for a service to be ready, see [Controlling startup order](startup-order.md)
|
||||
> for more on this problem and strategies for solving it.
|
||||
|
||||
> **[Version 2.1](compose-file.md#version-21) file format only.**
|
||||
|
||||
With Compose 1.10, it is now possible to indicate you want a dependency to wait
|
||||
A healthcheck indicates you want a dependency to wait
|
||||
for another container to be "healthy" (i.e. its healthcheck advertises a
|
||||
successful state) before starting.
|
||||
|
||||
@@ -389,7 +371,7 @@ Example:
|
||||
In the above example, Compose will wait for the `redis` service to be started
|
||||
(legacy behavior) and the `db` service to be healthy before starting `web`.
|
||||
|
||||
See the [healthcheck section](compose-file.md#healthcheck) for complementary
|
||||
See the [healthcheck section](#healthcheck) for complementary
|
||||
information.
|
||||
|
||||
### dns
|
||||
@@ -420,7 +402,7 @@ Custom DNS search domains. Can be a single value or a list.
|
||||
|
||||
### tmpfs
|
||||
|
||||
> [Version 2 file format](compose-file.md#version-2) and up.
|
||||
> [Version 2 file format](compose-versioning.md#version-2) and up.
|
||||
|
||||
Mount a temporary file system inside the container. Can be a single value or a list.
|
||||
|
||||
@@ -565,9 +547,9 @@ container name and the link alias (`CONTAINER:ALIAS`).
|
||||
- project_db_1:mysql
|
||||
- project_db_1:postgresql
|
||||
|
||||
> **Note:** If you're using the [version 2 file format](compose-file.md#version-2), the
|
||||
> **Note:** If you're using the [version 2 or above file format](compose-versioning.md#version-2), the
|
||||
> externally-created containers must be connected to at least one of the same
|
||||
> networks as the service which is linking to them.
|
||||
> networks as the service which is linking to them. Starting with Version 2, links are a legacy option. We recommend using networks instead. See [Version 2 file format](compose-versioning.md#version-2).
|
||||
|
||||
> **Note:** This option is ignored when
|
||||
> [deploying a stack in swarm mode](/engine/reference/commandline/stack_deploy.md)
|
||||
@@ -588,7 +570,7 @@ An entry with the ip address and hostname will be created in `/etc/hosts` inside
|
||||
|
||||
### group_add
|
||||
|
||||
> [Version 2 file format](compose-file.md#version-2) and up.
|
||||
> [Version 2 file format](compose-versioning.md#version-2) and up.
|
||||
|
||||
Specify additional groups (by name or number) which the user inside the
|
||||
container will be a member of. Groups must exist in both the container and the
|
||||
@@ -661,13 +643,8 @@ If the image does not exist, Compose attempts to pull it, unless you have also
|
||||
specified [build](compose-file.md#build), in which case it builds it using the specified
|
||||
options and tags it with the specified tag.
|
||||
|
||||
> **Note**: In the [version 1 file format](compose-file.md#version-1), using `build` together
|
||||
> with `image` is not allowed. Attempting to do so results in an error.
|
||||
|
||||
### isolation
|
||||
|
||||
> [Added in version 2.1 file format](compose-file.md#version-21).
|
||||
|
||||
Specify a container’s isolation technology. On Linux, the only supported value
|
||||
is `default`. On Windows, acceptable values are `default`, `process` and
|
||||
`hyperv`. Refer to the
|
||||
@@ -676,7 +653,6 @@ for details.
|
||||
|
||||
### labels
|
||||
|
||||
|
||||
Add metadata to containers using [Docker labels](/engine/userguide/labels-custom-metadata.md). You can use either an array or a dictionary.
|
||||
|
||||
It's recommended that you use reverse-DNS notation to prevent your labels from conflicting with those used by other software.
|
||||
@@ -718,9 +694,6 @@ Links also express dependency between services in the same way as
|
||||
|
||||
### logging
|
||||
|
||||
> [Version 2 file format](compose-file.md#version-2) and up. In version 1, use
|
||||
> [log_driver](compose-file.md#log_driver) and [log_opt](compose-file.md#log_opt).
|
||||
|
||||
Logging configuration for the service.
|
||||
|
||||
logging:
|
||||
@@ -750,43 +723,8 @@ Logging options are key-value pairs. An example of `syslog` options:
|
||||
options:
|
||||
syslog-address: "tcp://192.168.0.42:123"
|
||||
|
||||
### log_driver
|
||||
|
||||
> [Version 1 file format](compose-file.md#version-1) only. In version 2, use
|
||||
> [logging](compose-file.md#logging).
|
||||
|
||||
Specify a log driver. The default is `json-file`.
|
||||
|
||||
log_driver: syslog
|
||||
|
||||
### log_opt
|
||||
|
||||
> [Version 1 file format](compose-file.md#version-1) only. In version 2, use
|
||||
> [logging](compose-file.md#logging).
|
||||
|
||||
Specify logging options as key-value pairs. An example of `syslog` options:
|
||||
|
||||
log_opt:
|
||||
syslog-address: "tcp://192.168.0.42:123"
|
||||
|
||||
### net
|
||||
|
||||
> [Version 1 file format](compose-file.md#version-1) only. In version 2, use
|
||||
> [network_mode](compose-file.md#networkmode).
|
||||
|
||||
Network mode. Use the same values as the docker client `--net` parameter.
|
||||
The `container:...` form can take a service name instead of a container name or
|
||||
id.
|
||||
|
||||
net: "bridge"
|
||||
net: "host"
|
||||
net: "none"
|
||||
net: "container:[service name or container name/id]"
|
||||
|
||||
### network_mode
|
||||
|
||||
> [Version 2 file format](compose-file.md#version-2) and up. In version 1, use [net](compose-file.md#net).
|
||||
|
||||
Network mode. Use the same values as the docker client `--net` parameter, plus
|
||||
the special form `service:[service name]`.
|
||||
|
||||
@@ -802,8 +740,6 @@ the special form `service:[service name]`.
|
||||
|
||||
### networks
|
||||
|
||||
> [Version 2 file format](compose-file.md#version-2) and up. In version 1, use [net](compose-file.md#net).
|
||||
|
||||
Networks to join, referencing entries under the
|
||||
[top-level `networks` key](compose-file.md#network-configuration-reference).
|
||||
|
||||
@@ -896,8 +832,6 @@ An example:
|
||||
|
||||
#### link_local_ips
|
||||
|
||||
> [Added in version 2.1 file format](compose-file.md#version-21).
|
||||
|
||||
Specify a list of link-local IPs. Link-local IPs are special IPs which belong
|
||||
to a well known subnet and are purely managed by the operator, usually
|
||||
dependent on the architecture where they are deployed. Therefore they are not
|
||||
@@ -962,8 +896,6 @@ Override the default labeling scheme for each container.
|
||||
|
||||
### stop_grace_period
|
||||
|
||||
> [Added in version 2 file format](compose-file.md#version-2)
|
||||
|
||||
Specify how long to wait when attempting to stop a container if it doesn't
|
||||
handle SIGTERM (or whatever stop signal has been specified with
|
||||
[`stop_signal`](compose-file.md#stopsignal)), before sending SIGKILL. Specified
|
||||
@@ -989,8 +921,6 @@ SIGTERM. Setting an alternative signal using `stop_signal` will cause
|
||||
|
||||
### sysctls
|
||||
|
||||
> [Added in version 2.1 file format](compose-file.md#version-21).
|
||||
|
||||
Kernel parameters to set in the container. You can use either an array or a
|
||||
dictionary.
|
||||
|
||||
@@ -1020,8 +950,6 @@ limit as an integer or soft/hard limits as a mapping.
|
||||
|
||||
### userns_mode
|
||||
|
||||
> [Added in version 2.1 file format](compose-file.md#version-21).
|
||||
|
||||
userns_mode: "host"
|
||||
|
||||
Disables the user namespace for this service, if Docker daemon is configured with user namespaces.
|
||||
@@ -1034,11 +962,15 @@ more information.
|
||||
|
||||
### volumes, volume\_driver
|
||||
|
||||
> **Note:** The top-level
|
||||
> [`volumes` option](compose-file.md#volume-configuration-reference) defines
|
||||
> a named volume and references it from each service's `volumes` list. This replaces `volumes_from` in earlir versions of the Compose file format.
|
||||
|
||||
Mount paths or named volumes, optionally specifying a path on the host machine
|
||||
(`HOST:CONTAINER`), or an access mode (`HOST:CONTAINER:ro`).
|
||||
For [version 2 files](compose-file.md#version-2), named volumes need to be specified with the
|
||||
[top-level `volumes` key](compose-file.md#volume-configuration-reference).
|
||||
When using [version 1](compose-file.md#version-1), the Docker Engine will create the named
|
||||
For [version 2 files](compose-versioning.md#version-2), named volumes need to be specified with the
|
||||
[top-level `volumes` key](#volume-configuration-reference).
|
||||
When using [version 1](compose-versioning.md#version-1), the Docker Engine will create the named
|
||||
volume automatically if it doesn't exist.
|
||||
|
||||
You can mount a relative path on the host, which will expand relative to
|
||||
@@ -1066,24 +998,14 @@ If you do not use a host path, you may specify a `volume_driver`.
|
||||
volume_driver: mydriver
|
||||
|
||||
There are several things to note, depending on which
|
||||
[Compose file version](compose-file.md#versioning) you're using:
|
||||
[Compose file version](compose-versioning.md#versioning) you're using:
|
||||
|
||||
- `volume_driver` is not supported at all in
|
||||
[version 3](compose-file.md#version-3). Instead of setting the volume driver
|
||||
[version 3](compose-versioning.md#version-3). Instead of setting the volume driver
|
||||
on the service, define a volume using the
|
||||
[top-level `volumes` option](compose-file.md#volume-configuration-reference)
|
||||
[top-level `volumes` option](#volume-configuration-reference)
|
||||
and specify the driver there.
|
||||
|
||||
- You can use `volume_driver` in [version 2 files](compose-file.md#version-2),
|
||||
but it will only apply to anonymous volumes (those specified in the image,
|
||||
or specified under `volumes` without an explicit named volume or host path).
|
||||
To configure the driver for a named volume, use the `driver` key under the
|
||||
entry in the
|
||||
[top-level `volumes` option](compose-file.md#volume-configuration-reference).
|
||||
|
||||
- For [version 1 files](compose-file.md#version-1), both named volumes and
|
||||
container volumes will use the specified driver.
|
||||
|
||||
- No path expansion will be done if you have also specified a `volume_driver`.
|
||||
For example, if you specify a mapping of `./foo:/data`, the `./foo` part
|
||||
will be passed straight to the volume driver without being expanded.
|
||||
@@ -1091,79 +1013,6 @@ There are several things to note, depending on which
|
||||
See [Docker Volumes](/engine/userguide/dockervolumes.md) and
|
||||
[Volume Plugins](/engine/extend/plugins_volume.md) for more information.
|
||||
|
||||
### volumes_from
|
||||
|
||||
> **Removed in [version 3](compose-file.md#version-3).** The best way to share a
|
||||
> volume between services is to use the top-level
|
||||
> [`volumes` option](compose-file.md#volume-configuration-reference) to define
|
||||
> a named volume and reference it from each service's `volumes` list.
|
||||
|
||||
Mount all of the volumes from another service or container, optionally
|
||||
specifying read-only access (``ro``) or read-write (``rw``). If no access level is specified,
|
||||
then read-write will be used.
|
||||
|
||||
volumes_from:
|
||||
- service_name
|
||||
- service_name:ro
|
||||
- container:container_name
|
||||
- container:container_name:rw
|
||||
|
||||
> **Note:** The `container:...` formats are only supported in the
|
||||
> [version 2 file format](compose-file.md#version-2). In [version 1](compose-file.md#version-1), you can use
|
||||
> container names without marking them as such:
|
||||
>
|
||||
> - service_name
|
||||
> - service_name:ro
|
||||
> - container_name
|
||||
> - container_name:rw
|
||||
|
||||
### cpu\_shares, cpu\_quota, cpuset, domainname, hostname, ipc, mac\_address, mem\_limit, memswap\_limit, oom_score_adj, privileged, read\_only, restart, shm\_size, stdin\_open, tty, user, working\_dir
|
||||
|
||||
> **Note:** Resource constraint options (`cpu_shares`, `cpu_quota`, `cpuset`,
|
||||
> `mem_limit`, `memswap_limit`) have been removed in
|
||||
> [version 3](compose-file.md#version-3). You should set resource constraints
|
||||
> with [deploy.resources](compose-file.md#resources) instead. Note that `deploy`
|
||||
> configuration only takes effect when using `docker stack deploy`, and is
|
||||
> ignored by `docker-compose`.
|
||||
|
||||
Each of these is a single value, analogous to its
|
||||
[docker run](/engine/reference/run.md) counterpart.
|
||||
|
||||
cpu_shares: 73
|
||||
cpu_quota: 50000
|
||||
cpuset: 0,1
|
||||
|
||||
user: postgresql
|
||||
working_dir: /code
|
||||
|
||||
domainname: foo.com
|
||||
hostname: foo
|
||||
ipc: host
|
||||
mac_address: 02:42:ac:11:65:43
|
||||
|
||||
mem_limit: 1000000000
|
||||
memswap_limit: 2000000000
|
||||
privileged: true
|
||||
|
||||
oom_score_adj: 500
|
||||
|
||||
restart: always
|
||||
|
||||
read_only: true
|
||||
shm_size: 64M
|
||||
stdin_open: true
|
||||
tty: true
|
||||
|
||||
> **Note:** The following options are only available for
|
||||
> [version 2](compose-file.md#version-2) and up:
|
||||
> * `oom_score_adj`
|
||||
|
||||
> **Note:** The `domainname`, `ipc`, `mac_address`, `privileged`, `read_only`,
|
||||
> `restart` and `shm_size` options are ignored when
|
||||
> [deploying a stack in swarm mode](/engine/reference/commandline/stack_deploy.md)
|
||||
> with a (version 3) Compose file.
|
||||
|
||||
|
||||
## Specifying durations
|
||||
|
||||
Some configuration options, such as the `interval` and `timeout` sub-options for
|
||||
@@ -1265,8 +1114,6 @@ refer to it within the Compose file:
|
||||
|
||||
### labels
|
||||
|
||||
> [Added in version 2.1 file format](compose-file.md#version-21).
|
||||
|
||||
Add metadata to containers using
|
||||
[Docker labels](/engine/userguide/labels-custom-metadata.md). You can use either
|
||||
an array or a dictionary.
|
||||
@@ -1315,8 +1162,6 @@ documentation for more information. Optional.
|
||||
|
||||
### enable_ipv6
|
||||
|
||||
> [Added in version 2.1 file format](compose-file.md#version-21).
|
||||
|
||||
Enable IPv6 networking on this network.
|
||||
|
||||
### ipam
|
||||
@@ -1348,16 +1193,12 @@ A full example:
|
||||
|
||||
### internal
|
||||
|
||||
> [Version 2 file format](compose-file.md#version-2) and up.
|
||||
|
||||
By default, Docker also connects a bridge network to it to provide external
|
||||
connectivity. If you want to create an externally isolated overlay network,
|
||||
you can set this option to `true`.
|
||||
|
||||
### labels
|
||||
|
||||
> [Added in version 2.1 file format](compose-file.md#version-21).
|
||||
|
||||
Add metadata to containers using
|
||||
[Docker labels](/engine/userguide/labels-custom-metadata.md). You can use either
|
||||
an array or a dictionary.
|
||||
@@ -1414,336 +1255,16 @@ refer to it within the Compose file:
|
||||
external:
|
||||
name: actual-name-of-network
|
||||
|
||||
|
||||
## Versioning
|
||||
|
||||
There are currently four versions of the Compose file format:
|
||||
|
||||
- Version 1, the legacy format. This is specified by omitting a `version` key at
|
||||
the root of the YAML.
|
||||
- Version 2. This is specified with a `version: '2'` entry at the root of the
|
||||
YAML.
|
||||
- Version 2.1, an upgrade over version 2 that takes advantage of newer Docker
|
||||
Engine features. Specify with a `version: '2.1'` entry at the root of
|
||||
the YAML.
|
||||
- Version 3, the latest and recommended version, designed to be cross-compatible
|
||||
between Compose and the Docker Engine's [swarm mode](/engine/swarm/index.md).
|
||||
|
||||
To move your project to a later version, see the
|
||||
[Upgrading](compose-file.md#upgrading) section.
|
||||
|
||||
> **Note:** If you're using
|
||||
> [multiple Compose files](extends.md#different-environments) or
|
||||
> [extending services](extends.md#extending-services), each file must be of the
|
||||
> same version - you cannot, for example, mix version 1 and 2 in a single
|
||||
> project.
|
||||
|
||||
Several things differ depending on which version you use:
|
||||
|
||||
- The structure and permitted configuration keys
|
||||
- The minimum Docker Engine version you must be running
|
||||
- Compose's behaviour with regards to networking
|
||||
|
||||
These differences are explained below.
|
||||
|
||||
|
||||
### Version 1
|
||||
|
||||
Compose files that do not declare a version are considered "version 1". In
|
||||
those files, all the [services](compose-file.md#service-configuration-reference) are declared
|
||||
at the root of the document.
|
||||
|
||||
Version 1 is supported by **Compose up to 1.6.x**. It will be deprecated in a
|
||||
future Compose release.
|
||||
|
||||
Version 1 files cannot declare named
|
||||
[volumes](compose-file.md#volume-configuration-reference), [networks](networking.md) or
|
||||
[build arguments](compose-file.md#args).
|
||||
|
||||
Compose does not take advantage of [networking](networking.md) when you use
|
||||
version 1: every container is placed on the default `bridge` network and is
|
||||
reachable from every other container at its IP address. You will need to use
|
||||
[links](compose-file.md#links) to enable discovery between containers.
|
||||
|
||||
Example:
|
||||
|
||||
web:
|
||||
build: .
|
||||
ports:
|
||||
- "5000:5000"
|
||||
volumes:
|
||||
- .:/code
|
||||
links:
|
||||
- redis
|
||||
redis:
|
||||
image: redis
|
||||
|
||||
|
||||
### Version 2
|
||||
|
||||
Compose files using the version 2 syntax must indicate the version number at
|
||||
the root of the document. All [services](compose-file.md#service-configuration-reference)
|
||||
must be declared under the `services` key.
|
||||
|
||||
Version 2 files are supported by **Compose 1.6.0+** and require a Docker Engine
|
||||
of version **1.10.0+**.
|
||||
|
||||
Named [volumes](compose-file.md#volume-configuration-reference) can be declared under the
|
||||
`volumes` key, and [networks](compose-file.md#network-configuration-reference) can be declared
|
||||
under the `networks` key.
|
||||
|
||||
By default, every container joins an application-wide default network, and is
|
||||
discoverable at a hostname that's the same as the service name. This means
|
||||
[links](compose-file.md#links) are largely unnecessary. For more details, see
|
||||
[Networking in Compose](networking.md).
|
||||
|
||||
Simple example:
|
||||
|
||||
version: '2'
|
||||
services:
|
||||
web:
|
||||
build: .
|
||||
ports:
|
||||
- "5000:5000"
|
||||
volumes:
|
||||
- .:/code
|
||||
redis:
|
||||
image: redis
|
||||
|
||||
A more extended example, defining volumes and networks:
|
||||
|
||||
version: '2'
|
||||
services:
|
||||
web:
|
||||
build: .
|
||||
ports:
|
||||
- "5000:5000"
|
||||
volumes:
|
||||
- .:/code
|
||||
networks:
|
||||
- front-tier
|
||||
- back-tier
|
||||
redis:
|
||||
image: redis
|
||||
volumes:
|
||||
- redis-data:/var/lib/redis
|
||||
networks:
|
||||
- back-tier
|
||||
volumes:
|
||||
redis-data:
|
||||
driver: local
|
||||
networks:
|
||||
front-tier:
|
||||
driver: bridge
|
||||
back-tier:
|
||||
driver: bridge
|
||||
|
||||
|
||||
### Version 2.1
|
||||
|
||||
An upgrade of [version 2](compose-file.md#version-2) that introduces new parameters only
|
||||
available with Docker Engine version **1.12.0+**
|
||||
|
||||
Introduces the following additional parameters:
|
||||
|
||||
- [`link_local_ips`](compose-file.md#linklocalips)
|
||||
- [`isolation`](compose-file.md#isolation)
|
||||
- `labels` for [volumes](compose-file.md#volume-configuration-reference) and
|
||||
[networks](compose-file.md#network-configuration-reference)
|
||||
- [`userns_mode`](compose-file.md#userns_mode)
|
||||
- [`healthcheck`](compose-file.md#healthcheck),
|
||||
- [`sysctls`](compose-file.md#sysctls)
|
||||
|
||||
### Version 3
|
||||
|
||||
Designed to be cross-compatible between Compose and the Docker Engine's
|
||||
[swarm mode](/engine/swarm/index.md), version 3 removes several options and adds
|
||||
several more.
|
||||
|
||||
- Removed: `volume_driver`, `volumes_from`, `cpu_shares`, `cpu_quota`, `cpuset`,
|
||||
`mem_limit`, `memswap_limit`. See the [upgrading](compose-file.md#upgrading)
|
||||
guide for how to migrate away from these.
|
||||
|
||||
- Added: [deploy](compose-file.md#deploy)
|
||||
|
||||
### Upgrading
|
||||
|
||||
#### Version 2.x to 3.x
|
||||
|
||||
Between versions 2.x and 3.x, the structure of the Compose file is the same, but
|
||||
several options have been removed:
|
||||
|
||||
- `volume_driver`: Instead of setting the volume driver on the service, define
|
||||
a volume using the
|
||||
[top-level `volumes` option](compose-file.md#volume-configuration-reference)
|
||||
and specify the driver there.
|
||||
|
||||
version: "3"
|
||||
services:
|
||||
db:
|
||||
image: postgres
|
||||
volumes:
|
||||
- data:/var/lib/postgresql/data
|
||||
volumes:
|
||||
data:
|
||||
driver: mydriver
|
||||
|
||||
- `volumes_from`: To share a volume between services, define it using the
|
||||
[top-level `volumes` option](compose-file.md#volume-configuration-reference)
|
||||
and reference it from each service that shares it using the
|
||||
[service-level `volumes` option](compose-file.md#volumes-volume-driver).
|
||||
|
||||
- `cpu_shares`, `cpu_quota`, `cpuset`, `mem_limit`, `memswap_limit`: These
|
||||
have been replaced by the [resources](compose-file.md#resources) key under
|
||||
`deploy`. Note that `deploy` configuration only takes effect when using
|
||||
`docker stack deploy`, and is ignored by `docker-compose`.
|
||||
|
||||
#### Version 1 to 2.x
|
||||
|
||||
In the majority of cases, moving from version 1 to 2 is a very simple process:
|
||||
|
||||
1. Indent the whole file by one level and put a `services:` key at the top.
|
||||
2. Add a `version: '2'` line at the top of the file.
|
||||
|
||||
It's more complicated if you're using particular configuration features:
|
||||
|
||||
- `dockerfile`: This now lives under the `build` key:
|
||||
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile-alternate
|
||||
|
||||
- `log_driver`, `log_opt`: These now live under the `logging` key:
|
||||
|
||||
logging:
|
||||
driver: syslog
|
||||
options:
|
||||
syslog-address: "tcp://192.168.0.42:123"
|
||||
|
||||
- `links` with environment variables: As documented in the
|
||||
[environment variables reference](link-env-deprecated.md), environment variables
|
||||
created by
|
||||
links have been deprecated for some time. In the new Docker network system,
|
||||
they have been removed. You should either connect directly to the
|
||||
appropriate hostname or set the relevant environment variable yourself,
|
||||
using the link hostname:
|
||||
|
||||
web:
|
||||
links:
|
||||
- db
|
||||
environment:
|
||||
- DB_PORT=tcp://db:5432
|
||||
|
||||
- `external_links`: Compose uses Docker networks when running version 2
|
||||
projects, so links behave slightly differently. In particular, two
|
||||
containers must be connected to at least one network in common in order to
|
||||
communicate, even if explicitly linked together.
|
||||
|
||||
Either connect the external container to your app's
|
||||
[default network](networking.md), or connect both the external container and
|
||||
your service's containers to an
|
||||
[external network](networking.md#using-a-pre-existing-network).
|
||||
|
||||
- `net`: This is now replaced by [network_mode](compose-file.md#network_mode):
|
||||
|
||||
net: host -> network_mode: host
|
||||
net: bridge -> network_mode: bridge
|
||||
net: none -> network_mode: none
|
||||
|
||||
If you're using `net: "container:[service name]"`, you must now use
|
||||
`network_mode: "service:[service name]"` instead.
|
||||
|
||||
net: "container:web" -> network_mode: "service:web"
|
||||
|
||||
If you're using `net: "container:[container name/id]"`, the value does not
|
||||
need to change.
|
||||
|
||||
net: "container:cont-name" -> network_mode: "container:cont-name"
|
||||
net: "container:abc12345" -> network_mode: "container:abc12345"
|
||||
|
||||
- `volumes` with named volumes: these must now be explicitly declared in a
|
||||
top-level `volumes` section of your Compose file. If a service mounts a
|
||||
named volume called `data`, you must declare a `data` volume in your
|
||||
top-level `volumes` section. The whole file might look like this:
|
||||
|
||||
version: '2'
|
||||
services:
|
||||
db:
|
||||
image: postgres
|
||||
volumes:
|
||||
- data:/var/lib/postgresql/data
|
||||
volumes:
|
||||
data: {}
|
||||
|
||||
By default, Compose creates a volume whose name is prefixed with your
|
||||
project name. If you want it to just be called `data`, declare it as
|
||||
external:
|
||||
|
||||
volumes:
|
||||
data:
|
||||
external: true
|
||||
|
||||
## Variable substitution
|
||||
|
||||
Your configuration options can contain environment variables. Compose uses the
|
||||
variable values from the shell environment in which `docker-compose` is run.
|
||||
For example, suppose the shell contains `EXTERNAL_PORT=8000` and you supply
|
||||
this configuration:
|
||||
|
||||
web:
|
||||
build: .
|
||||
ports:
|
||||
- "${EXTERNAL_PORT}:5000"
|
||||
|
||||
When you run `docker-compose up` with this configuration, Compose looks for
|
||||
the `EXTERNAL_PORT` environment variable in the shell and substitutes its
|
||||
value in. In this example, Compose resolves the port mapping to `"8000:5000"`
|
||||
before creating the `web` container.
|
||||
|
||||
If an environment variable is not set, Compose substitutes with an empty
|
||||
string. In the example above, if `EXTERNAL_PORT` is not set, the value for the
|
||||
port mapping is `:5000` (which is of course an invalid port mapping, and will
|
||||
result in an error when attempting to create the container).
|
||||
|
||||
You can set default values for environment variables using a
|
||||
[`.env` file](env-file.md), which Compose will automatically look for. Values
|
||||
set in the shell environment will override those set in the `.env` file.
|
||||
|
||||
$ unset EXTERNAL_PORT
|
||||
$ echo "EXTERNAL_PORT=6000" > .env
|
||||
$ docker-compose up # EXTERNAL_PORT will be 6000
|
||||
$ export EXTERNAL_PORT=7000
|
||||
$ docker-compose up # EXTERNAL_PORT will be 7000
|
||||
|
||||
Both `$VARIABLE` and `${VARIABLE}` syntax are supported.
|
||||
Additionally when using the [2.1 file format](compose-file.md#version-21), it
|
||||
is possible to provide inline default values using typical shell syntax:
|
||||
|
||||
- `${VARIABLE:-default}` will evaluate to `default` if `VARIABLE` is unset or
|
||||
empty in the environment.
|
||||
- `${VARIABLE-default}` will evaluate to `default` only if `VARIABLE` is unset
|
||||
in the environment.
|
||||
|
||||
Other extended shell-style features, such as `${VARIABLE/foo/bar}`, are not
|
||||
supported.
|
||||
|
||||
You can use a `$$` (double-dollar sign) when your configuration needs a literal
|
||||
dollar sign. This also prevents Compose from interpolating a value, so a `$$`
|
||||
allows you to refer to environment variables that you don't want processed by
|
||||
Compose.
|
||||
|
||||
web:
|
||||
build: .
|
||||
command: "$$VAR_NOT_INTERPOLATED_BY_COMPOSE"
|
||||
|
||||
If you forget and use a single dollar sign (`$`), Compose interprets the value as an environment variable and will warn you:
|
||||
|
||||
The VAR_NOT_INTERPOLATED_BY_COMPOSE is not set. Substituting an empty string.
|
||||
{% include content/compose-var-sub.md %}
|
||||
|
||||
## Compose documentation
|
||||
|
||||
- [User guide](index.md)
|
||||
- [Installing Compose](install.md)
|
||||
- [Compose file versions and upgrading](compose-versioning.md)
|
||||
- [Sample app with swarm mode](/engine/getstarted-voting-app/)
|
||||
- [Get started with Django](django.md)
|
||||
- [Get started with Rails](rails.md)
|
||||
- [Get started with WordPress](wordpress.md)
|
||||
Reference in New Issue
Block a user