The short syntax variant only specifies the config name. This grants the
container access to the config and mounts it as files into a service’s container’s filesystem. The location of the mount point within the container defaults to `/<config_name>` in Linux containers, and `C:\<config-name>` in Windows containers.
The following example uses the short syntax to grant the `redis` service
access to the `my_config` and `my_other_config` configs. The value of
`my_config` is set to the contents of the file `./my_config.txt`, and
`my_other_config` is defined as an external resource, which means that it has
already been defined in the platform. If the external config does not exist,
the deployment fails.
```yml
services:
redis:
image: redis:latest
configs:
- my_config
- my_other_config
configs:
my_config:
file: ./my_config.txt
my_other_config:
external: true
```
#### Long syntax
The long syntax provides more granularity in how the config is created within the service's task containers.
- `source`: The name of the config as it exists in the platform.
- `target`: The path and name of the file to be mounted in the service's
task containers. Defaults to `/<source>` if not specified.
- `uid` and `gid`: The numeric uid or gid that owns the mounted config file
within the service's task containers. Default value when not specified is `USER`.
- `mode`: The [permissions](https://wintelguy.com/permissions-calc.pl) for the file that is mounted within the service's
task containers, in octal notation. Default value is world-readable (`0444`).
Writable bit must be ignored. The executable bit can be set.
The following example sets the name of `my_config` to `redis_config` within the
container, sets the mode to `0440` (group-readable) and sets the user and group
to `103`. The `redis` service does not have access to the `my_other_config`
config.
```yml
services:
redis:
image: redis:latest
configs:
- source: my_config
target: /redis_config
uid: "103"
gid: "103"
mode: 0440
configs:
my_config:
external: true
my_other_config:
external: true
```
### `container_name`
`container_name` is a string that specifies a custom container name, rather than a name generated by default.
```yml
container_name: my-web-container
```
Compose does not scale a service beyond one container if the Compose file specifies a
`container_name`. Attempting to do so results in an error.
`container_name` follows the regex format of `[a-zA-Z0-9][a-zA-Z0-9_.-]+`
### `credential_spec`
`credential_spec` configures the credential spec for a managed service account.
If you have services that use Windows containers, you can use `file:` and
`registry:` protocols for `credential_spec`. Compose also supports additional
protocols for custom use-cases.
The `credential_spec` must be in the format `file://<filename>` or `registry://<value-name>`.
```yml
credential_spec:
file: my-credential-spec.json
```
When using `registry:`, the credential spec is read from the Windows registry on
the daemon's host. A registry value with the given name must be located in:
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization\Containers\CredentialSpecs
The following example loads the credential spec from a value named `my-credential-spec`
in the registry:
```yml
credential_spec:
registry: my-credential-spec
```
#### Example gMSA configuration
When configuring a gMSA credential spec for a service, you only need
to specify a credential spec with `config`, as shown in the following example:
```yml
services:
myservice:
image: myimage:latest
credential_spec:
config: my_credential_spec
configs:
my_credentials_spec:
file: ./my-credential-spec.json
```
### `depends_on`
{{% include "compose/services-depends-on.md" %}}
#### Short syntax
The short syntax variant only specifies service names of the dependencies.
Service dependencies cause the following behaviors: