> ## Documentation Index
> Fetch the complete documentation index at: https://cantonfoundation-content-fix-dpm-init-daml-yaml-1196.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Canton Docker Operations

> Obtain and run Canton Docker images

# Obtaining the Docker Images

(See Install With Docker for instructions on running the Canton Docker images.)

You can download the Canton docker images using:

```bash theme={null}
docker pull \
    europe-docker.pkg.dev/da-images/public/docker/canton-base:3.4.0
docker pull \
    europe-docker.pkg.dev/da-images/public/docker/canton-participant:3.4.0
docker pull \
    europe-docker.pkg.dev/da-images/public/docker/canton-sequencer:3.4.0
docker pull \
    europe-docker.pkg.dev/da-images/public/docker/canton-mediator:3.4.0
```

Visit `https://europe-docker.pkg.dev/v2/da-images/public/docker/canton-participant/tags/list` to see available tags.

These docker images are published starting with Canton version 3.4.0.

Snapshot releases are available at `/da-images/public-unstable/docker/` instead of `/da-images/public/docker/`, but they are not recommended for any production usage and they are periodically cleaned up.

Link to howto for downloading docker images. Link to hardware and software requirements. Explain how to run canton from docker.

# Work With the Docker Containers

## Using the Participant Image

As a convenience, we provide a pre-configured participant image that can be used to start a Canton participant with sensible defaults.

Using this image requires setting several environment variables:

```bash theme={null}
docker run \
    -e AUTH_TARGET_AUDIENCE="audience" \
    -e AUTH_JWKS_URL="fake.com/jwks" \
    -e CANTON_PARTICIPANT_POSTGRES_SERVER="canton-postgres" \
    -e CANTON_PARTICIPANT_POSTGRES_PORT="5432" \
    -v "$(pwd)/bootstrap.sc:/app/bootstrap.sc" \
    --rm -it \
    europe-docker.pkg.dev/da-images/public-unstable/docker/canton-participant:3.5.0-ad-hoc.20251021.17321.0.v2cdf16447
```

Note that you'll need a valid postgres instance.

This image requires you to initialize the participant via a bootstrap script. See Manual identity initialization for more details.

To see all configuration defaults and possible env vars, run

```bash theme={null}
cid=$(docker create europe-docker.pkg.dev/da-images/public-unstable/docker/canton-participant:3.5.0-ad-hoc.20251021.17321.0.v2cdf1644) && docker cp "$cid":/app/app.conf ./app.conf && docker rm "$cid"
cat app.conf
```

## Logging

Logs are JSON encoded and sent to stdout. The log level is set via `-e LOG_LEVEL_STDOUT=INFO`. It defaults to DEBUG.

## Bound Ports

`canton-participant` image binds:

* Ledger API port: 5001
* Admin API port: 5002
* HTTP Ledger API port: 7575
* GRPC Health Server port: 5061

`canton-mediator` image binds:

* Admin API port: 5007
* GRPC Health Server port: 5061

`canton-sequencer` image binds:

* Public API: 5008
* Admin API: 5009
* GRPC Health Server port: 5061

## Supplying custom configuration and DARs

To supply custom configuration, either

1. add it via `ADDITIONAL_CONFIG` environment variable, or
2. mount `/app/additional-config.conf` into the container.

Dars must be added dynamically. This is done via remote console or the admin API.

To run a participant console with custom configuration:

```bash theme={null}
docker run -e ADDITIONAL_CONFIG="canton.participants.participant1 {
      storage.type = memory
      admin-api.port = 5012
      ledger-api.port = 5011
      http-ledger-api.server.port = 5013
    }" \
    --rm -it \
    europe-docker.pkg.dev/da-images/public-unstable/docker/canton-participant:3.5.0-ad-hoc.20251021.17321.0.v2cdf1644 \
    --console
```

The `--console` flag starts canton in interactive console mode.
