Docker Build Options

July 21, 2026 ยท View on GitHub

You can customize the Docker build process using these environment variables.

Note

All Symfony-specific environment variables are used only if no composer.json file is found in the project directory.

Selecting a Specific Symfony Version

Use the SYMFONY_VERSION environment variable to select a specific Symfony version.

Install Symfony 7.4+

On Linux:

SYMFONY_VERSION=7.4.* docker compose up --wait

On Windows:

set SYMFONY_VERSION=7.4.* && docker compose up --wait&set SYMFONY_VERSION=

Install Symfony pre-7.4

If you're using Symfony 7.3 or earlier with FrankenPHP in worker mode, you need to prepare two files before running docker compose up.

In frankenphp/docker-entrypoint.sh, add runtime/frankenphp-symfony to the existing composer require line:

- composer require "php:>=$PHP_VERSION"
+ composer require "php:>=$PHP_VERSION" runtime/frankenphp-symfony

In frankenphp/Caddyfile, add env APP_RUNTIME Runtime\FrankenPhpSymfony\Runtime in the worker section:

 worker {
 	file ./public/index.php
+	env APP_RUNTIME Runtime\FrankenPhpSymfony\Runtime
 	{$FRANKENPHP_WORKER_CONFIG}
 }

Then start the project:

On Linux:

SYMFONY_VERSION=6.4.* docker compose up --wait

On Windows:

set SYMFONY_VERSION=6.4.* && docker compose up --wait&set SYMFONY_VERSION=

Installing Development Versions of Symfony

To install a non-stable version of Symfony, use the STABILITY environment variable during the build.

The value must be a valid Composer stability option.

For instance, use the following command to use the development branch of Symfony:

On Linux:

STABILITY=dev docker compose up --wait

On Windows:

set STABILITY=dev && docker compose up --wait&set STABILITY=

Using Custom HTTP Ports

Use the environment variables HTTP_PORT, HTTPS_PORT and/or HTTP3_PORT to adjust the ports to your needs, e.g.

HTTP_PORT=8000 HTTPS_PORT=4443 HTTP3_PORT=4443 docker compose up --wait

to access your application on https://localhost:4443.

Note

Let's Encrypt only supports the standard HTTP and HTTPS ports. Creating a Let's Encrypt certificate for another port will not work, you have to use the standard ports or to configure Caddy to use another provider.

Caddyfile Options

You can also customize the Caddyfile by using the following environment variables to inject options block, directive or configuration.

Tip

All the following environment variables can be defined in your .env file at the root of the project to keep them persistent at each startup.

Environment variableDescriptionDefault value
CADDY_GLOBAL_OPTIONSthe global options block, one per line
CADDY_EXTRA_CONFIGthe snippet or the named-routes options block, one per line
CADDY_SERVER_EXTRA_DIRECTIVESthe Caddyfile directives
CADDY_SERVER_LOG_OPTIONSthe server log options block, one per line
SERVER_NAMEthe server name or addresslocalhost
FRANKENPHP_CONFIGa list of extra FrankenPHP global directives, one per line
FRANKENPHP_WORKER_CONFIGa list of extra FrankenPHP worker directives, one per line
MERCURE_PUBLISHER_JWT_KEYthe JWT key to use for publishers
MERCURE_PUBLISHER_JWT_ALGthe JWT algorithm to use for publishersHS256
MERCURE_SUBSCRIBER_JWT_KEYthe JWT key to use for subscribers
MERCURE_SUBSCRIBER_JWT_ALGthe JWT algorithm to use for subscribersHS256
MERCURE_EXTRA_DIRECTIVESa list of extra Mercure directives, one per line

Customizing the Server Name

SERVER_NAME="app.localhost" docker compose up --wait