= Container Trait

// Start of autogenerated code - DO NOT EDIT! (description)
The Container trait can be used to configure properties of the container where the integration will run.

It also provides configuration for Services associated to the container.


This trait is available in the following profiles: **Kubernetes, Knative, OpenShift**.

WARNING: The container trait is a *platform trait*: disabling it may compromise the platform functionality.

// End of autogenerated code - DO NOT EDIT! (description)
// Start of autogenerated code - DO NOT EDIT! (configuration)
== Configuration

Trait properties can be specified when running any integration with the CLI:
```
kamel run --trait container.[key]=[value] --trait container.[key2]=[value2] integration.groovy
```
The following configuration options are available:

[cols="2,1,5a"]
|===
|Property | Type | Description

| container.enabled
| bool
| Can be used to enable or disable a trait. All traits share this common property.

| container.auto
| bool
| 

| container.request-cpu
| string
| The minimum amount of CPU required.

| container.request-memory
| string
| The minimum amount of memory required.

| container.limit-cpu
| string
| The maximum amount of CPU required.

| container.limit-memory
| string
| The maximum amount of memory required.

| container.expose
| bool
| Can be used to enable/disable exposure via kubernetes Service.

| container.port
| int
| To configure a different port exposed by the container (default `8080`).

| container.port-name
| string
| To configure a different port name for the port exposed by the container (default `http`).

| container.service-port
| int
| To configure under which service port the container port is to be exposed (default `80`).

| container.service-port-name
| string
| To configure under which service port name the container port is to be exposed (default `http`).

| container.name
| string
| The main container name. It's named `integration` by default.

| container.probes-enabled
| bool
| ProbesEnabled enable/disable probes on the container (default `false`)

| container.probe-path
| string
| Path to access on the probe ( default `/health`). Note that this property is not supported
on quarkus runtime and setting it will result in the integration failing to start.

| container.liveness-initial-delay
| int32
| Number of seconds after the container has started before liveness probes are initiated.

| container.liveness-timeout
| int32
| Number of seconds after which the probe times out. Applies to the liveness probe.

| container.liveness-period
| int32
| How often to perform the probe. Applies to the liveness probe.

| container.liveness-success-threshold
| int32
| Minimum consecutive successes for the probe to be considered successful after having failed.
Applies to the liveness probe.

| container.liveness-failure-threshold
| int32
| Minimum consecutive failures for the probe to be considered failed after having succeeded.
Applies to the liveness probe.

| container.readiness-initial-delay
| int32
| Number of seconds after the container has started before readiness probes are initiated.

| container.readiness-timeout
| int32
| Number of seconds after which the probe times out. Applies to the readiness probe.

| container.readiness-period
| int32
| How often to perform the probe. Applies to the readiness probe.

| container.readiness-success-threshold
| int32
| Minimum consecutive successes for the probe to be considered successful after having failed.
Applies to the readiness probe.

| container.readiness-failure-threshold
| int32
| Minimum consecutive failures for the probe to be considered failed after having succeeded.
Applies to the readiness probe.

|===

// End of autogenerated code - DO NOT EDIT! (configuration)
