We offer three Docker images:
- zotonic/zotonic-heavy contains both Zotonic and PostgreSQL. Use this to get started quickly if you want to build sites on Zotonic.
- zotonic/zotonic contains only Zotonic. This image is most useful in production setups or when you’re using Docker Compose with a separate database container.
- zotonic/zotonic-dev contains build tools and Erlang. Use this image for development work on Zotonic itself, where you’ll mount your Zotonic directory as a volume in the container.
To use any of the images, first download and install Docker.
Start a Zotonic image on your Docker machine:
$ docker run -d -p 8443:8443 zotonic/zotonic-heavy
Mount a volume that contains your Zotonic sites:
$ docker run -d -v `pwd`/sites:/opt/zotonic/user/sites zotonic/zotonic-heavy
And mount a volume with your custom Zotonic modules:
$ docker run -d -v `pwd`/sites:/opt/zotonic/user/sites -v `pwd`/modules:/opt/zotonic/user/modules zotonic/zotonic-heavy
You can use the zotonic/zotonic-dev image when you’re doing development work on Zotonic. Start the container from your local Zotonic clone:
$ git clone https://github.com/zotonic/zotonic.git
To start the container, use Docker Compose:
$ docker-compose run --service-ports zotonic sh
This opens a shell prompt in the Zotonic container. A PostgreSQL container will be started automatically as well. In the Zotonic container, you can enter any command. So, to start Zotonic in debug mode:
$ bin/zotonic debug
--service-ports flags exposes Zotonic’s port 8443 as your local port 80,
so you can view the Zotonic status page at
You can also run other commands in the container, such as running the tests:
$ bin/zotonic runtests
Any changes you make in the Zotonic source files will be propagated to the container and automatically compiled.