Portainer Templates logo

Portainer Templates

Mautic (container) Mautic (container)

Marketing

Open-source marketing automation platform

Image details

Pulls: 16.5M
Architecture: amd64, arm64
Image size: 591 MB
Latest: 7.1.3-20260707-fpm
User: mautic
Created: Jul 27, 2015
Updated: 1 month ago
Status: active

Source details

Stars: 10.3k
Forks: 3k
Language: PHP
Updated: 1 day ago
Website: www.mautic.org/

Configuration

Type
Container
Platform
linux
Image
mautic/mautic:latest
Ports
80/tcp
Volumes
/var/www/html
Env vars
MAUTIC_DB_HOST=''MAUTIC_DB_PASSWORD=''

Template by portainer

Standalone Install

Select an install method, to see config/commands for deploying Mautic (container)

Installation method

Install on Portainer

Import all app templates into your Portainer instance, for easy 1-click deploys

  1. Ensure both Docker and Portainer are installed, and up-to-date
  2. Log into your Portainer web UI
  3. Under Settings → App Templates, paste the below URL
  4. Head to Home → App Templates, and the list of apps will show up
  5. 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 demo

More install options in our documentation, or see mautic/mautic for app-specific guidance.

Mautic Docker Image

All Contributors
!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 the apache variant
  • 5.0-fpm: latest version in the 5.0 minor release in the fpm variant
  • 5.0.3-apache: specific point release of the apache variant

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 official php:apache images.
  • fpm: image based on the official php:fpm images.

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 webinterface
  • mautic_worker: runs the worker processes to consume the messenger queues
  • mautic_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 of docker-compose setups that use the Docker images.
!WARNING The examples require docker compose v2.
Running the examples with the unsupported docker-compose v1 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 the apache image with doctrine as async queue.
  • fpm-nginx: example using the fpm image in combination with an nginx with doctrine as async queue.
  • rabbitmq-worker: example using the apache image with rabbitmq as async queue.

For each example, there are 2 files where settings can be set:
  • the .env file:
Should be used for all general variables for Mysql, PHP, ...
  • the .mautic_env file:
Should be used for all Mautic specific variables.

Building your own images

You can build your own images easily using the docker 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-fpm

Persistent 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 files

Configuration 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 300

Mautic settings

Technically, every setting of Mautic you can set via the UI or via the local.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 extra composer 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:
  1. Connect to the running container and run the commands.
  2. Run the commands as exec via 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:
  1. --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.
  1. --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/bash

Running 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="admin@mautic.local" --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):
<tr>
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/cibero42"><img src="https://avatars.githubusercontent.com/u/102629460?v=4?s=100" width="100px;" alt="Renato"/><br /><sub><b>Renato</b></sub></a><br /><a href="https://github.com/mautic/docker-mautic/commits?author=cibero42" title="Code">💻</a> <a href="https://github.com/mautic/docker-mautic/commits?author=cibero42" title="Documentation">📖</a> <a href="https://github.com/mautic/docker-mautic/pulls?q=is%3Apr+reviewed-by%3Acibero42" title="Reviewed Pull Requests">👀</a> <a href="https://github.com/mautic/docker-mautic/commits?author=cibero42" title="Tests">⚠️</a></td>
  <td align="center" valign="top" width="14.28%"><a href="https://academy.leewayweb.com"><img src="https://avatars.githubusercontent.com/u/1532615?v=4?s=100" width="100px;" alt="Mauro Chojrin"/><br /><sub><b>Mauro Chojrin</b></sub></a><br /><a href="https://github.com/mautic/docker-mautic/commits?author=mchojrin" title="Code">💻</a></td>
  <td align="center" valign="top" width="14.28%"><a href="https://okeefe.dev"><img src="https://avatars.githubusercontent.com/u/872224?v=4?s=100" width="100px;" alt="Matt O'Keefe"/><br /><sub><b>Matt O'Keefe</b></sub></a><br /><a href="https://github.com/mautic/docker-mautic/pulls?q=is%3Apr+reviewed-by%3Ao-mutt" title="Reviewed Pull Requests">👀</a></td>
  <td align="center" valign="top" width="14.28%"><a href="https://www.4success.com.br"><img src="https://avatars.githubusercontent.com/u/19995615?v=4?s=100" width="100px;" alt="Renan William"/><br /><sub><b>Renan William</b></sub></a><br /><a href="https://github.com/mautic/docker-mautic/commits?author=renanwilliam" title="Code">💻</a></td>
  <td align="center" valign="top" width="14.28%"><a href="https://www.ruthcheesley.co.uk"><img src="https://avatars.githubusercontent.com/u/2930593?v=4?s=100" width="100px;" alt="Ruth Cheesley"/><br /><sub><b>Ruth Cheesley</b></sub></a><br /><a href="https://github.com/mautic/docker-mautic/commits?author=RCheesley" title="Code">💻</a></td>
  <td align="center" valign="top" width="14.28%"><a href="http://johnlinhart.com"><img src="https://avatars.githubusercontent.com/u/1235442?v=4?s=100" width="100px;" alt="John Linhart"/><br /><sub><b>John Linhart</b></sub></a><br /><a href="https://github.com/mautic/docker-mautic/pulls?q=is%3Apr+reviewed-by%3Aescopecz" title="Reviewed Pull Requests">👀</a></td>
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/ChiragMoradiya"><img src="https://avatars.githubusercontent.com/u/2399621?v=4?s=100" width="100px;" alt="Chirag Moradiya"/><br /><sub><b>Chirag Moradiya</b></sub></a><br /><a href="https://github.com/mautic/docker-mautic/commits?author=ChiragMoradiya" title="Code">💻</a></td>
</tr>
<tr>
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/matbcvo"><img src="https://avatars.githubusercontent.com/u/1006437?v=4?s=100" width="100px;" alt="Martin Vooremäe"/><br /><sub><b>Martin Vooremäe</b></sub></a><br /><a href="https://github.com/mautic/docker-mautic/commits?author=matbcvo" title="Code">💻</a> <a href="https://github.com/mautic/docker-mautic/pulls?q=is%3Apr+reviewed-by%3Amatbcvo" title="Reviewed Pull Requests">👀</a></td>
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/henmohr"><img src="https://avatars.githubusercontent.com/u/21038820?v=4?s=100" width="100px;" alt="henmohr"/><br /><sub><b>henmohr</b></sub></a><br /><a href="https://github.com/mautic/docker-mautic/pulls?q=is%3Apr+reviewed-by%3Ahenmohr" title="Reviewed Pull Requests">👀</a></td>
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/maxitromer"><img src="https://avatars.githubusercontent.com/u/6311835?v=4?s=100" width="100px;" alt="maxitromer"/><br /><sub><b>maxitromer</b></sub></a><br /><a href="https://github.com/mautic/docker-mautic/commits?author=maxitromer" title="Code">💻</a> <a href="https://github.com/mautic/docker-mautic/commits?author=maxitromer" title="Tests">⚠️</a></td>
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/nick-vanpraet"><img src="https://avatars.githubusercontent.com/u/7923739?v=4?s=100" width="100px;" alt="Nick Vanpraet"/><br /><sub><b>Nick Vanpraet</b></sub></a><br /><a href="https://github.com/mautic/docker-mautic/pulls?q=is%3Apr+reviewed-by%3Anick-vanpraet" title="Reviewed Pull Requests">👀</a></td>
  <td align="center" valign="top" width="14.28%"><a href="https://druid.fi"><img src="https://avatars.githubusercontent.com/u/1140272?v=4?s=100" width="100px;" alt="Marko Korhonen"/><br /><sub><b>Marko Korhonen</b></sub></a><br /><a href="https://github.com/mautic/docker-mautic/commits?author=back-2-95" title="Code">💻</a></td>
</tr>



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: 137 means killed, usually out of memory. 126 or 127 means 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 login to 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.

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/html as 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 host
  • MAUTIC_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.