`ipam` attribute with subnet configurations covering each static address.
```yml
services:
frontend:
image: example/webapp
networks:
front-tier:
ipv4_address: 172.16.238.10
ipv6_address: 2001:3984:3989::10
networks:
front-tier:
ipam:
driver: default
config:
- subnet: "172.16.238.0/24"
- subnet: "2001:3984:3989::/64"
```
#### `link_local_ips`
`link_local_ips` specifies 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.
Example:
```yaml
services:
app:
image: busybox
command: top
networks:
app_net:
link_local_ips:
- 57.123.22.11
- 57.123.22.13
networks:
app_net:
driver: bridge
```
#### `mac_address`
{{< summary-bar feature_name="Compose mac address" >}}
`mac_address` sets the Mac address used by the service container when connecting to this particular network.
#### `gw_priority`
{{< summary-bar feature_name="Compose gw priority" >}}
The network with the highest `gw_priority` is selected as the default gateway for the service container.
If unspecified, the default value is 0.
In the following example, `app_net_2` will be selected as the default gateway.
```yaml
services:
app:
image: busybox
command: top
networks:
app_net_1:
app_net_2:
gw_priority: 1
app_net_3:
networks:
app_net_1:
app_net_2:
app_net_3:
```
#### `priority`
`priority` indicates in which order Compose connects the service’s containers to its
networks. If unspecified, the default value is 0.
If the container runtime accepts a `mac_address` attribute at service level, it is
applied to the network with the highest `priority`. In other cases, use attribute
`networks.mac_address`.
`priority` does not affect which network is selected as the default gateway. Use the
[`gw_priority`](#gw_priority) attribute instead.
`priority` does not control the order in which networks connections are added to
the container, it cannot be used to determine the device name (`eth0` etc.) in the
container.
```yaml
services:
app:
image: busybox
command: top
networks:
app_net_1:
priority: 1000
app_net_2:
app_net_3:
priority: 100
networks:
app_net_1:
app_net_2:
app_net_3:
```
### `oom_kill_disable`
If `oom_kill_disable` is set, Compose configures the platform so it won't kill the container in case
of memory starvation.
### `oom_score_adj`
`oom_score_adj` tunes the preference for containers to be killed by platform in case of memory starvation. Value must
be within -1000,1000 range.
### `pid`
`pid` sets the PID mode for container created by Compose.
Supported values are platform specific.
### `pids_limit`
`pids_limit` tunes a container’s PIDs limit. Set to -1 for unlimited PIDs.
```yml
pids_limit: 10
```
When set, `pids_limit` must be consistent with the `pids` attribute in the [Deploy Specification](deploy.md#pids).
### `platform`
`platform` defines the target platform the containers for the service run on. It uses the `os[/arch[/variant]]` syntax.
The values of `os`, `arch`, and `variant` must conform to the convention used by the [OCI Image Spec](https://github.com/opencontainers/image-spec/blob/v1.0.2/image-index.md).
Compose uses this attribute to determine which version of the image is pulled
and/or on which platform the service’s build is performed.
```yml
platform: darwin
platform: windows/amd64
platform: linux/arm64/v8
```
### `ports`
{{% include "compose/services-ports.md" %}}
> [!NOTE]
>
> Port mapping must not be used with `network_mode: host`. Doing so causes a runtime error because `network_mode: host` already exposes container ports directly to the host network, so port mapping isn’t needed.
#### Short syntax
The short syntax is a colon-separated string to set the host IP, host port, and container port