Mautic (container)
Open-source marketing automation platform
Image details
Source details
Configuration
TypeContainerlinuxmautic/mautic:latest80/tcp/var/www/htmlMAUTIC_DB_HOST=''MAUTIC_DB_PASSWORD=''Template by portainer
Standalone Install
Select an install method, to see config/commands for deploying Mautic (container)
Install on Portainer
Import all app templates into your Portainer instance, for easy 1-click deploys
- Ensure both Docker and Portainer are installed, and up-to-date
- Log into your Portainer web UI
- Under Settings → App Templates, paste the below URL
- Head to Home → App Templates, and the list of apps will show up
- Select Mautic (container), fill in any config options, and hit Deploy
Template Import URL
https://raw.githubusercontent.com/Lissy93/portainer-templates/main/templates.json
Show Me
More install options in our documentation, or see mautic/mautic for app-specific guidance.
Mautic Docker Image
!NOTE This version refers to Docker images and examples for Mautic 5, previous Mautic versions aren't actively supported anymore. If you would like information about older versions, see https://github.com/mautic/docker-mautic/tree/mautic4.
!IMPORTANT>You might face several issues when using the FPM images, due to the way those are currently implemented. We strongly advise using Apache instead of FPM for the time being. You might face security issues when using the exemplified nginx.conf. Only proceed with FPM if you are familiar with Nginx configuration! >Please refer to #317 for updates on this topic.
Issues
For general questions about this Docker image, please visit our forum. We ask that you only open GitHub issues for bug reports or feature requests. This helps ensure you get wider community support and allows others with similar questions to find answers more easily.To reach the developers directly, you can find us in the #docker channel on Mautic's Slack.
Versions
All Mautic 5 Docker images follow the following naming stategy.<major.minor.patch>-<variant>There are some defaults if parts are omitted:
<minor.patch>is the latest release patch version in the latest minor version.
Some examples:
5-apache: latest stable version of Mautic 5 of theapachevariant5.0-fpm: latest version in the 5.0 minor release in thefpmvariant5.0.3-apache: specific point release of theapachevariant
Additionally, the tag
latest is available, which will always provide the newest stable Mautic version using the apache variant of the Docker image.It's also possible to target a specific build for a given patch:
<major.minor.patch>-<YYYYMMDD>-<variant>
Variants
The Docker images exist in 2 variants:apache: image based on the officialphp:apacheimages.fpm: image based on the officialphp:fpmimages.
The latest supported Mautic PHP version is used the moment of generating of the image.
Each variant contains:
- the needed dependencies to run Mautic (e.g. PHP modules)
- the Mautic codebase installed via composer (see mautic/recommended-project)
- the needed files and configuration to run as a specific role
See the
examples explanation below how you could use them.Roles
each image can be started in 3 modes:mautic_web: runs the Mautic webinterfacemautic_worker: runs the worker processes to consume the messenger queuesmautic_cron: runs the defined cronjobs
This allows you to use different scaling strategies to run the workers or crons, without having to maintain separate images.
The
mautic_cron and mautic_worker require the codebase anyhow, as they execute console commands that need to bootstrap the full application.Examples
The examples folder contains examples ofdocker-compose setups that use the Docker images.!WARNING The examples requiredocker composev2.
Running the examples with the unsupporteddocker-composev1 will result in a non-starting web container.
!IMPORTANT Please take into account the purpose of those examples:
it shows how it could be used, not how it should be used.
Do not use those examples in production without reviewing, understanding and configuring them.
basic: standard example using theapacheimage withdoctrineas async queue.fpm-nginx: example using thefpmimage in combination with annginxwithdoctrineas async queue.rabbitmq-worker: example using theapacheimage withrabbitmqas async queue.
For each example, there are 2 files where settings can be set:
- the
.envfile:
- the
.mautic_envfile:
Building your own images
You can build your own images easily using thedocker build command in the root of this directory:docker build . -f apache/Dockerfile -t mautic/mautic:5-apache
docker build . -f fpm/Dockerfile -t mautic/mautic:5-fpmPersistent storage
The images by default foresee following volumes to persist data (not taking into account e.g. database or queueing data, as that's not part of these images).config: the local config folder containing local.php, parameters_local.php, ...
var/logs: the folder with logs
docroot/media: the folder with uploaded and generated media filesConfiguration and customizing
Configuration
Environment Variables
The following environment variables can be used to configure how your setup should behave.Mautic Behaviour
-MAUTIC_DB_HOST: IP address or hostname of the MySQL server.
- MAUTIC_DB_PORT: port which the MySQL server is listening on. Defaults to 3306.
- MAUTIC_DB_DATABASE: Database which holds Mautic's tables.
- MAUTIC_DB_USER: MySQL user which should be used by Mautic.
- MAUTIC_DB_PASSWORD: Passowrd of the MySQL user which should be used by Mautic.
- DOCKER_MAUTIC_ROLE: which role does the container has to perform.Defaults to `mautic_web`, other supported values are `mautic_worker` and `mautic_cron`. - DOCKER_MAUTIC_LOAD_TEST_DATA: should the test data be loaded on start or not.Defaults to `false`, other supported value is `true`.
This variable is only usable when using the `web` role. - DOCKER_MAUTIC_RUN_MIGRATIONS: should the Doctrine migrations be executed on start.Defaults to `false`, other supported value is `true`.
This variable is only usable when using the `web` role. - DOCKER_MAUTIC_WORKERS_CONSUME_EMAIL: Number of workers to start consuming mails.Defaults to `2` - DOCKER_MAUTIC_WORKERS_CONSUME_HIT: Number of workers to start consuming hits.Defaults to `2` - DOCKER_MAUTIC_WORKERS_CONSUME_FAILED: Number of workers to start consuming failed e-mails.Defaults to `2`PHP Settings
-PHP_INI_VALUE_DATE_TIMEZONE: defaults to UTC
- PHP_INI_VALUE_MEMORY_LIMIT: defaults to 512M
- PHP_INI_VALUE_UPLOAD_MAX_FILESIZE: defaults to 512M
- PHP_INI_VALUE_POST_MAX_FILESIZE: defaults to 512M
- PHP_INI_VALUE_MAX_EXECUTION_TIME: defaults to 300Mautic settings
Technically, every setting of Mautic you can set via the UI or via thelocal.php file can be set as environment variable.e.g. the
messenger_dsn_hit can be set via the MAUTIC_MESSENGER_DSN_HIT environment variable.See the general Mautic documentation for more info.
Customization
Currently this image has no easy way to extend Mautic (e.g. adding extracomposer dependencies or installing extra plugins or themes).This is an ongoing effort we hope to support in an upcoming 5.x release.
For now, please build your own images based on the official ones to add the needed dependencies, plugins and themes.
Day to day tasks
You can execute commands directly against the Mautic CLI. To do so you have two options:- Connect to the running container and run the commands.
- Run the commands as
execvia docker (compose).
Both cases will use
docker compose exec/docker exec. Using docker compose uses the docker-compose.yaml and the container names listed for ease. More info can be learned about exec commands here.Note - Two flags that are used commonly in docker Mautic:
--user www-data
* execute as the `www-data` user, which is the same user as the webserver runs. Running commands as the correct user ensures things function as expected. e.g. file permissions after clearing the cache are correct.--workdir /var/www/html
* set the working directory to the `/var/www/html` folder, which is the project root of Mautic.Connect to the Container
docker compose exec --user www-data --workdir /var/www/html mautic_web /bin/bashRunning a Mautic CLI command
docker compose exec --user www-data --workdir /var/www/html mautic_web php ./bin/console mautic:install https://mautic.example.com --admin_email="[email protected]" --admin_password="Maut1cR0cks\!"Contributing
You are invited to contribute new features, fixes, or updates, large or small; we are always thrilled to receive pull requests, and do our best to process them as fast as we can.Before you start to code, we recommend discussing your plans through a GitHub issue, especially for more ambitious contributions. This gives other contributors a chance to point you in the right direction, give you feedback on your design, and help you find out if someone else is working on the same thing.
Contributors ✨
Thanks goes to these wonderful people (emoji key):This project follows the all-contributors specification. Contributions of any kind welcome!
Serve Mautic (container) on your own domain behind Caddy, Nginx or Traefik. Fill in your domain and copy the result. It's a starting point, some apps need their own base URL or extra headers set too.
Proxying mautic-container.example.com to http://mautic-container:80
Add this to your Caddyfile
mautic-container.example.com {
reverse_proxy http://mautic-container:80
}Check the logs first
Nine times out of ten the logs tell you exactly what went wrong.
- In Portainer, go to Containers, click the container, then Logs. Or run
docker logs <container> - Exit codes help too:
137means killed, usually out of memory.126or127means the command inside the image is broken.
Published on a random port
This template exposes 80/tcp without setting a host port,
so Docker picks a random free one on every deploy.
- Find it in the Ports column of Portainer's container list, or with
docker port <container>
Image won't pull
Test the pull directly on the host: docker pull mautic/mautic:latest
- "manifest unknown" means the tag no longer exists. This template uses
latest, so try pinning a specific version instead. - "toomanyrequests" is the Docker Hub rate limit. Log in with
docker loginto raise it. - "no space left on device" means a full disk. Reclaim space with
docker system prune
"exec format error"
This means the image was built for a different CPU architecture than your server.
- This image supports:
amd64, arm64 - Check yours with
uname -m: x86_64 is amd64, aarch64 is arm64. Raspberry Pi and other ARM boards are the usual culprits.
Required settings are blank
MAUTIC_DB_HOST, MAUTIC_DB_PASSWORD have no default value, and the app may crash or misbehave if left empty.
- Fill them in on the deploy screen before hitting deploy.
Raise an issue
Found something which isn't working as it should? Here's how to report it.
- Bug within the app: Open an issue on mautic/mautic
- Template not working: Open an issue on portainer/templates
- This website not working: Open an issue on lissy93/portainer-templates
A single container
Mautic (container) runs as one container, the simplest kind of app here. Just the one image to pull and nothing else wired up alongside it.
The app image
An image is the app packed up ready to go, everything Mautic (container) needs bundled into one download. This template pulls mautic/mautic:latest, which Docker fetches once (about 591 MB) and then starts your own copy from.
Where the image comes from
Docker pulls its images from registries, public libraries of ready-built apps. Mautic (container)'s comes from Docker Hub, published by mautic.
Version tags
The bit after the colon in the image name is the version tag. Here it's latest, which always points at the newest build, so a redeploy can bump you to a newer release without you asking. Newest right now is 7.1.3-20260707-fpm. Pin a specific tag if you would rather stay on one version.
Which machines it runs on
Every image is built for particular CPU types. This one ships for amd64, arm64, so it runs on both regular x86 servers and ARM boards like a Raspberry Pi.
Ports
A port is the door the app answers on. Here the app exposes a port but leaves the host side blank, so Docker picks a free one for you. It opens:
80, published on a random host port
Volumes
A volume is where Mautic (container) keeps its files so they survive an update or a restart. Without one, anything it saves would sit inside the container and vanish the moment it's recreated. This template mounts:
/var/www/htmlas a volume Docker manages for you
Environment variables
Environment variables are the settings you hand over when you deploy, things like a password or a timezone. Mautic (container) takes 2 of them, and 2 need a value before it'll start properly:
MAUTIC_DB_HOST, needs a value. MySQL database hostMAUTIC_DB_PASSWORD, needs a value. Database password
Networking
Nothing custom is set, so Mautic (container) sits on Docker's default bridge network: its own private space that reaches the outside world only through the ports it publishes.
Platform
The platform is linux, the kind of system the container is built to run on. Docker and Portainer handle this on a normal Linux server.
Portainer app templates
Zooming out, this whole page comes from a Portainer app template: a short recipe telling Portainer how to set Mautic (container) up. Add the template list to Portainer once, then deploying Mautic (container) is a click rather than a wall of config.