Docker Compose
If you define an application with Docker Compose, you can use that
definition to run the application in CI, staging, or production environments.
Here you can find docker-compose.yml
files necessary to run
memgraph-platform
,
memgraph-mage
, and
memgraph
. You can also find
Docker Compose configurations for Memgraph Platform versions up to
2.14.
Docker Compose for Memgraph Platform
The Docker Compose configuration for the Memgraph Platform is designed to
facilitate a smooth and efficient setup process for developers by specifying the
use of memgraph/memgraph-mage
and memgraph/lab
images. This setup ensures
that all necessary services are properly configured to work together seamlessly,
emphasizing ease of use and integration.
services:
memgraph:
image: memgraph/memgraph-mage:latest
container_name: memgraph-mage
ports:
- "7687:7687"
- "7444:7444"
command: ["--log-level=TRACE"]
lab:
image: memgraph/lab:latest
container_name: memgraph-lab
ports:
- "3000:3000"
depends_on:
- memgraph
environment:
- QUICK_CONNECT_MG_HOST=memgraph
- QUICK_CONNECT_MG_PORT=7687
Key features
-
Memgraph MAGE: The core of the platform, the Memgraph database with included MAGE algorithms, is set up with ports
7687
for the Bolt protocol and7444
for the optional HTTPS interface. The log level is set toTRACE
to provide detailed output, which is invaluable for debugging and further development. -
Memgraph Lab: A user-friendly visual interface that connects automatically to the Memgraph service using predefined environment variables. It is accessible through port
3000
, offering an intuitive environment for query execution and data visualization. -
Service Dependency: Configuration ensures that Memgraph Lab starts only after the Memgraph database service is fully operational, establishing a reliable service order and minimizing startup issues.
Configuration
-
This configuration is primarily optimized for development and testing environments. For production deployments, it's recommended to customize the configuration according to specific security and performance requirements.
-
In this Docker Compose file, the
command
directive is used to specify the configuration flags that should be set when the container starts. In this example, the specified command--log-level=TRACE
sets the log level to TRACE. The--log-level=TRACE
option in the Memgraph service enables detailed logging. This setting is adjustable to suit different phases of development and testing, providing flexibility in monitoring and troubleshooting.
If you wish to set more than one configuration flag, use the following syntax:
command: ["--setting-name1=value1", "--setting-name2=value2"]
Docker Compose for Memgraph MAGE image
The Memgraph MAGE image contains:
- Memgraph - the database that holds your data
- MAGE - graph algorithms and modules library
services:
memgraph-mage:
image: "memgraph/memgraph-mage"
volumes:
- mg_lib:/var/lib/memgraph
- mg_log:/var/log/memgraph
ports:
- "7687:7687"
- "7444:7444"
command: ["--log-level=TRACE"]
volumes:
mg_lib:
mg_log:
mg_etc:
The port 7687
is used for communication with Memgraph via Bolt protocol, while
the port 7444
is there so that you can see logs from Memgraph inside the
Memgraph Lab application. We specified three useful volumes:
mg_lib
- directory containing data that enables data persistencymg_log
- directory containing log filesmg_etc
- directory containing the configuration file
The exact location of the local directories depends on your specific setup.
We recommend using the command
option to customize Memgraph's runtime
flags instead of setting them through
entrypoint
. This approach enhances your flexibility and aligns with Docker
best practices, allowing you to easily adjust your container's behavior without
altering its foundational settings.
In the above example,
you can see how to set --log-level
to TRACE
. Since the MAGE library is
included in this image, you can use the available graph algorithms.
Docker Compose for Memgraph image
The Memgraph image contains the database that holds your data.
services:
memgraph:
image: "memgraph/memgraph"
ports:
- "7687:7687"
- "7444:7444"
volumes:
- mg_lib:/var/lib/memgraph
- mg_log:/var/log/memgraph
command: ["--log-level=TRACE"]
volumes:
mg_lib:
mg_log:
mg_etc:
The port 7687
is used for communication with Memgraph via Bolt protocol, while
the port 7444
is there so that you can see logs from Memgraph inside the
Memgraph Lab application. We specified three useful volumes:
mg_lib
- directory containing data that enables data persistencymg_log
- directory containing log filesmg_etc
- directory containing the configuration file
The exact location of the local directories depends on your specific setup.
We recommend using the command
option to customize Memgraph's runtime
flags instead of setting them through
entrypoint
. This approach enhances your flexibility and aligns with Docker
best practices, allowing you to easily adjust your container's behavior without
altering its foundational settings.
In the above example, you can see how to set --log-level
to TRACE
. Since this image doesn't have
the MAGE library included, you won't be able to use graph algorithms.
Want to see applications built with Memgraph and Docker Compose? Check out Memgraph's Github (opens in a new tab) repositories.
Configuring user authentication in Docker Compose
When setting up Memgraph with Docker Compose, you can use environment variables
MEMGRAPH_USER
and
MEMGRAPH_PASSWORD
to create a new user if that username doesn't already exist.
When working with MEMGRAPH_USER
and MEMGRAPH_PASSWORD
environmental
variables, keep the following things in mind:
- New User Creation: When
MEMGRAPH_USER
andMEMGRAPH_PASSWORD
are set and the specified user does not exist, Memgraph creates this new user. However, these credentials must be manually entered each time when accessing Memgraph through Memgraph Lab. - Existing Users: If the username already exists and an incorrect password
is provided via
MEMGRAPH_PASSWORD
, no changes will occur. The existing password remains unchanged, and you must use the original credentials to access Memgraph Lab. - Docker Compose Restarts: If Memgraph is restarted via Docker Compose without these environment variables being set, previously created users remain unaffected. You must manually enter the user credentials every time you access Memgraph Lab.
Below is an example of how to configure these environment variables in your
docker-compose.yml
file:
services:
memgraph:
image: memgraph/memgraph-mage:latest
container_name: memgraph-mage
ports:
- "7687:7687"
- "7444:7444"
command: ["--log-level=TRACE"]
environment:
- MEMGRAPH_USER=testuser123
- MEMGRAPH_PASSWORD=t123
lab:
image: memgraph/lab:latest
container_name: memgraph-lab
ports:
- "3000:3000"
depends_on:
- memgraph
environment:
- QUICK_CONNECT_MG_HOST=memgraph
- QUICK_CONNECT_MG_PORT=7687
When specifying environment variables in Docker Compose, avoid spaces around the
equals sign (=
). Including spaces can cause the variables to be misinterpreted
or ignored by Docker, leading to unexpected behavior.
Correct format:
environment:
- MEMGRAPH_USER=testuser123
- MEMGRAPH_PASSWORD=t123
Incorrect format (will not work):
environment:
- MEMGRAPH_USER = testuser123
- MEMGRAPH_PASSWORD = t123
Issues when running Memgraph and Lab within the same Docker compose
When running both Memgraph and Lab services within the same Docker Compose file,
the QUICK_CONNECT_MG_HOST
environment variable should be set to the name of
the Memgraph database service as defined in your Docker Compose file. This
allows the Lab service to correctly resolve and connect to the Memgraph service.
Here's an example snippet for your docker-compose.yml
:
services:
memgraph:
image: memgraph/memgraph
ports:
- "7687:7687"
lab:
image: memgraph/lab
ports:
- "3000:3000"
environment:
QUICK_CONNECT_MG_HOST: memgraph
In this configuration, QUICK_CONNECT_MG_HOST
is set to memgraph
, which is
the service name of the Memgraph database within the Docker Compose network,
enabling the direct communication between the Lab and Memgraph services. You can
also use the QUICK_CONNECT_MG_PORT
environment variable to specify the quick
connect port number, e.g. QUICK_CONNECT_MG_PORT: 7688
Adding a health check
Including a health check in your Docker Compose configuration for Memgraph helps
ensure that the container is not only up but also operational. Below is one
possible approach to adding a health check to your docker-compose.yml
for the
Memgraph service:
services:
memgraph:
image: memgraph/memgraph-mage:latest
container_name: memgraph-mage
ports:
- "7687:7687"
- "7444:7444"
healthcheck:
test: ["CMD-SHELL", "echo 'RETURN 0;' | mgconsole || exit 1"]
interval: 10s
timeout: 5s
retries: 3
start_period: 0s
command: ["--log-level=TRACE"]
Here is what this healthcheck
does:
test
: The commandecho 'RETURN 0;' | mgconsole || exit 1
runs within the shell to check the responsiveness of the Memgraph console. It's a simple command to verify that the database can process queries. Ifmgconsole
fails to execute or returns a non-zero exit status, the health check fails.interval
: Specifies how often to run the health check. Here, it's set to every 10 seconds.timeout
: Sets the maximum time allowed for the health check to run. If the test command exceeds 5 seconds, the check is considered to have failed.retries
: Defines how many times the health check will retry upon failure before considering the service unhealthy. Here, it will try three times.start_period
: Sets the initialization period during which the health check command failures are considered to be setup failures rather than an unhealthy container. This is set to 0s, meaning it starts checking immediately at container start-up.
Docker Compose for Memgraph Platform image up to version 2.14
These instructions are listed here as a reference for legacy installations.
Starting with version 2.15, Memgraph Platform transitions to a multi-container application. This upgrade moves from a single Docker image to separate containers for Memgraph+MAGE and Memgraph Lab, utilizing Docker Compose for deployment and management.
Please note that the Memgraph Platform Docker image (opens in a new tab) is no longer being updated.
The memgraph-platform
Docker image contains:
- Memgraph database - the database that holds your data
- Memgraph Lab - visual user interface for running queries and visualizing graph data
- mgconsole - command-line interface for running queries
- MAGE - graph algorithms and modules library
services:
memgraph-platform:
image: "memgraph/memgraph-platform"
ports:
- "7687:7687"
- "3000:3000"
- "7444:7444"
volumes:
- mg_lib:/var/lib/memgraph
- mg_log:/var/log/memgraph
env_file:
- /path_to/.env # Replace this with the actual path to your .env file
entrypoint: ["/usr/bin/supervisord"]
volumes:
mg_lib:
mg_log:
mg_etc:
and your .env
file contains configuration flags you want to set:
MEMGRAPH="--log-level=TRACE"
The port 7687
is used for communication with Memgraph via Bolt protocol. The
port 3000
is exposed because Memgraph Lab will be running as a web application
on localhost:3000
, while the port 7444
is there so that you can see logs
from Memgraph inside Memgraph Lab. We specified three useful volumes:
mg_lib
- directory containing data that enables data persistencymg_log
- directory containing log filesmg_etc
- directory containing the configuration file
The exact location of the local directories depends on your specific setup.
Configuration settings can be changed
by setting the value of the MEMGRAPH
environment variable. In the above
example, you can see how to set --log-level
to TRACE
. Since Memgraph
Platform is not a single service, the process manager
supervisord
(opens in a new tab)
is used as the main running process in the entrypoint
. The MAGE library is
included in this image, so you can use the available graph algorithms.