Skip to content

Using Docker with Symfony

Edit this page

Can you use Docker with Symfony? Yes, and several tools exist to help, depending on your needs.

Complete Docker Environment

If you'd like a complete Docker environment (i.e. where PHP, web server, database, etc. are all in Docker), check out https://github.com/dunglas/symfony-docker.

Alternatively, you can install PHP on your local machine and use the symfony binary Docker integration. In both cases, you can take advantage of automatic Docker configuration from Symfony Flex.

Flex Recipes & Docker Configuration

The Flex recipe for some packages also include Docker configuration. For example, when you run composer require doctrine (to get symfony/orm-pack), your compose.yaml file will automatically be updated to include a database service.

The first time you install a recipe containing Docker config, Flex will ask you if you want to include it. Or, you can set your preference in composer.json, by setting the extra.symfony.docker config to true or false. If this option isn't defined but the SYMFONY_DOCKER environment variable is, Flex doesn't ask and stores the value of that variable in this option.

When updating recipes (e.g. with composer recipes:update), Flex only updates the Docker configuration if the extra.symfony.docker option is true.

Some recipes also include additions to your Dockerfile. To get those changes, you need to already have a Dockerfile at the root of your app with the following code somewhere inside:

1
2
###> recipes ###
###< recipes ###

The recipe will find this section and add the changes inside. If you're using https://github.com/dunglas/symfony-docker, you'll already have this.

When a recipe changes your Docker Compose files, rebuild your containers by running:

1
$ docker compose up --build

Symfony Binary Web Server and Docker Support

If you're using the symfony binary web server (e.g. symfony server:start), then it can automatically detect your Docker services and expose them as environment variables. See Symfony CLI.

Note

macOS users need to explicitly allow the default Docker socket to be used for the Docker integration to work as explained in the Docker documentation.

This work, including the code samples, is licensed under a Creative Commons BY-SA 3.0 license.
TOC
    Version