Bitnami MariaDB Docker Image
MariaDB is a fast, reliable, scalable, and easy to use open-source relational database system. MariaDB Server is intended for mission-critical, heavy-load production systems as well as for embedding into mass-deployed software.
$ docker run --name mariadb -e ALLOW_EMPTY_PASSWORD=yes bitnami/mariadb:latest
$ curl -sSL https://raw.githubusercontent.com/bitnami/bitnami-docker-mariadb/master/docker-compose.yml > docker-compose.yml $ docker-compose up -d
DOCKER_CONTENT_TRUST=1to verify the integrity of the images.
This CVE scan report contains a security report with all open CVEs. To get the list of actionable security issues, find the "latest" tag, click the vulnerability report link under the corresponding "Security scan" field and then select the "Only show fixable" filter on the next page.
Deploying Bitnami applications as Helm Charts is the easiest way to get started with our applications on Kubernetes. Read more about the installation in the Bitnami MariaDB Chart GitHub repository.
Bitnami containers can be used with Kubeapps for deployment and management of Helm Charts in clusters.
Non-root container images add an extra layer of security and are generally recommended for production environments. However, because they run as a non-root user, privileged tasks are typically off-limits. Learn more about non-root containers in our docs.
Learn more about the Bitnami tagging policy and the difference between rolling tags and immutable tags in our documentation page.
Subscribe to project updates by watching the bitnami/mariadb GitHub repo.
The recommended way to get the Bitnami MariaDB Docker Image is to pull the prebuilt image from the Docker Hub Registry.
$ docker pull bitnami/mariadb:latest
To use a specific version, you can pull a versioned tag. You can view the list of available versions in the Docker Hub Registry.
$ docker pull bitnami/mariadb:[TAG]
If you wish, you can also build the image yourself by cloning the repository, changing to the directory containing the Dockerfile and executing the
docker buildcommand. Remember to replace the
OPERATING-SYSTEMpath placeholders in the example command below with the correct values.
$ git clone https://github.com/bitnami/bitnami-docker-mariadb.git $ cd bitnami-docker-mariadb/VERSION/OPERATING-SYSTEM $ docker build -t bitnami/mariadb:latest .
If you remove the container all your data will be lost, and the next time you run the image the database will be reinitialized. To avoid this loss of data, you should mount a volume that will persist even after the container is removed.
For persistence you should mount a directory at the
/bitnami/mariadbpath. If the mounted directory is empty, it will be initialized on the first run.
$ docker run \ -e ALLOW_EMPTY_PASSWORD=yes \ -v /path/to/mariadb-persistence:/bitnami/mariadb \ bitnami/mariadb:latest
services: mariadb: ... volumes: - /path/to/mariadb-persistence:/bitnami/mariadb ...
NOTE: As this is a non-root container, the mounted files and directories must have the proper permissions for the UID1001.
Using Docker container networking, a MariaDB server running inside a container can easily be accessed by your application containers.
Containers attached to the same network can communicate with each other using the container name as the hostname.
In this example, we will create a MariaDB client instance that will connect to the server instance that is running on the same docker network as the client.
$ docker network create app-tier --driver bridge
--network app-tierargument to the
docker runcommand to attach the MariaDB container to the
$ docker run -d --name mariadb-server \ -e ALLOW_EMPTY_PASSWORD=yes \ --network app-tier \ bitnami/mariadb:latest
Finally we create a new container instance to launch the MariaDB client and connect to the server created in the previous step:
$ docker run -it --rm \ --network app-tier \ bitnami/mariadb:latest mysql -h mariadb-server -u root
When not specified, Docker Compose automatically sets up a new network and attaches all deployed services to that network. However, we will explicitly define a new
app-tier. In this example we assume that you want to connect to the MariaDB server from your own custom application image which is identified in the following snippet by the service name
networks: app-tier: driver: bridge
services: mariadb: image: 'bitnami/mariadb:latest' environment: - ALLOW_EMPTY_PASSWORD=yes networks: - app-tier myapp: image: 'YOUR_APPLICATION_IMAGE' networks: - app-tier
- Please update theYOUR_APPLICATION_IMAGEplaceholder in the above snippet with your application image
- In your application container, use the hostnamemariadbto connect to the MariaDB server
Launch the containers using:
$ docker-compose up -d
When the container is executed for the first time, it will execute the files with extensions
In order to have your custom files inside the docker image you can mount them as a volume.
Take into account those scripts are treated differently depending on the extension. While the
.shscripts are executed in all the nodes; the
.sql.gzscripts are only executed in the master nodes. The reason behind this differentiation is that the
.shscripts allow adding conditions to determine what is the node running the script, while these conditions can't be set using
sql.gzfiles. This way it is possible to cover different use cases depending on their needs.
Passing extra command-line flags to the mysqld service command is possible through the following env var:
MARIADB_EXTRA_FLAGS: Flags to be appended to the startup command. No defaults
$ docker run --name mariadb -e ALLOW_EMPTY_PASSWORD=yes -e MARIADB_EXTRA_FLAGS='--max-connect-errors=1000 --max_connections=155' bitnami/mariadb:latest
services: mariadb: ... environment: - ALLOW_EMPTY_PASSWORD=yes - MARIADB_EXTRA_FLAGS=--max-connect-errors=1000 --max_connections=155 ...
It is possible to configure the character set and collation used by default by the database with the following environment variables:
MARIADB_CHARACTER_SET: The default character set to use. Default:
MARIADB_COLLATE: The default collation to use. Default:
The root user and password can easily be setup with the Bitnami MariaDB Docker image using the following environment variables:
MARIADB_ROOT_USER: The database admin user. Defaults to
MARIADB_ROOT_PASSWORD: The database admin user password. No defaults.
MARIADB_ROOT_PASSWORD_FILE: Path to a file that contains the admin user password. This will override the value specified in
MARIADB_ROOT_PASSWORD. No defaults.
MARIADB_ROOT_PASSWORDenvironment variable when running the image for the first time will set the password of the
MARIADB_ROOT_USERuser to the value of
$ docker run --name mariadb -e MARIADB_ROOT_PASSWORD=password123 bitnami/mariadb:latest
services: mariadb: ... environment: - MARIADB_ROOT_PASSWORD=password123 ...
MARIADB_ROOT_USERuser is always created with remote access. It's suggested that the
MARIADB_ROOT_PASSWORDenv variable is always specified to set a password for the
MARIADB_ROOT_USERuser. In case you want to allow the
MARIADB_ROOT_USERuser to access the database without a password set the environment variable
ALLOW_EMPTY_PASSWORD=yes. This is recommended only for development.
By default the MariaDB image expects all the available passwords to be set. In order to allow empty passwords, it is necessary to set the
ALLOW_EMPTY_PASSWORD=yesenv variable. This env variable is only recommended for testing or development purposes. We strongly recommend specifying the
MARIADB_ROOT_PASSWORDfor any other scenario.
$ docker run --name mariadb -e ALLOW_EMPTY_PASSWORD=yes bitnami/mariadb:latest
services: mariadb: ... environment: - ALLOW_EMPTY_PASSWORD=yes ...
By passing the
MARIADB_DATABASEenvironment variable when running the image for the first time, a database will be created. This is useful if your application requires that a database already exists, saving you from having to manually create the database using the MySQL client.
$ docker run --name mariadb \ -e ALLOW_EMPTY_PASSWORD=yes \ -e MARIADB_DATABASE=my_database \ bitnami/mariadb:latest
services: mariadb: ... environment: - ALLOW_EMPTY_PASSWORD=yes - MARIADB_DATABASE=my_database ...
MARIADB_USERenvironment variable and to set a password for the database user provide the
MARIADB_PASSWORDvariable (alternatively, you can set the
MARIADB_PASSWORD_FILEwith the path to a file that contains the user password). MariaDB supports different authentication mechanisms, such as
mysql_native_password. To set it, use the
$ docker run --name mariadb \ -e ALLOW_EMPTY_PASSWORD=yes \ -e MARIADB_USER=my_user \ -e MARIADB_PASSWORD=my_password \ -e MARIADB_DATABASE=my_database \ bitnami/mariadb:latest
services: mariadb: ... environment: - ALLOW_EMPTY_PASSWORD=yes - MARIADB_USER=my_user - MARIADB_PASSWORD=my_password - MARIADB_DATABASE=my_database ...
rootuser will be created with remote access and without a password if
ALLOW_EMPTY_PASSWORDis enabled. Please provide the
MARIADB_ROOT_PASSWORDenv variable instead if you want to set a password for the
In some platforms, the filesystem used for persistence could be slow. That could cause the database to take extra time to be ready. If that's the case, you can configure the
MARIADB_INIT_SLEEP_TIMEenvironment variable to make the initialization script to wait extra time (in seconds) before proceeding with the configuration operations.
A zero downtime MariaDB master-slave replication cluster can easily be setup with the Bitnami MariaDB Docker image using the following environment variables:
MARIADB_REPLICATION_MODE: The replication mode. Possible values
slave. No defaults.
MARIADB_REPLICATION_USER: The replication user created on the master on first run. No defaults.
MARIADB_REPLICATION_PASSWORD: The replication users password. No defaults.
MARIADB_REPLICATION_PASSWORD_FILE: Path to a file that contains the replication user password. This will override the value specified in
MARIADB_REPLICATION_PASSWORD. No defaults.
MARIADB_MASTER_HOST: Hostname/IP of replication master (slave parameter). No defaults.
MARIADB_MASTER_PORT_NUMBER: Server port of the replication master (slave parameter). Defaults to
MARIADB_MASTER_ROOT_USER: User on replication master with access to
MARIADB_DATABASE(slave parameter). Defaults to
MARIADB_MASTER_ROOT_PASSWORD: Password of user on replication master with access to
MARIADB_DATABASE(slave parameter). No defaults.
MARIADB_MASTER_ROOT_PASSWORD_FILE: Path to a file that contains the password of user on replication master with access to
MARIADB_DATABASE. This will override the value specified in
MARIADB_MASTER_ROOT_PASSWORD. No defaults.
In a replication cluster you can have one master and zero or more slaves. When replication is enabled the master node is in read-write mode, while the slaves are in read-only mode. For best performance its advisable to limit the reads to the slaves.
The first step is to start the MariaDB master.
$ docker run --name mariadb-master \ -e MARIADB_ROOT_PASSWORD=master_root_password \ -e MARIADB_REPLICATION_MODE=master \ -e MARIADB_REPLICATION_USER=my_repl_user \ -e MARIADB_REPLICATION_PASSWORD=my_repl_password \ -e MARIADB_USER=my_user \ -e MARIADB_PASSWORD=my_password \ -e MARIADB_DATABASE=my_database \ bitnami/mariadb:latest
In the above command the container is configured as the
MARIADB_REPLICATION_MODEparameter. A replication user is specified using the
Next we start a MariaDB slave container.
$ docker run --name mariadb-slave --link mariadb-master:master \ -e MARIADB_REPLICATION_MODE=slave \ -e MARIADB_REPLICATION_USER=my_repl_user \ -e MARIADB_REPLICATION_PASSWORD=my_repl_password \ -e MARIADB_MASTER_HOST=master \ -e MARIADB_MASTER_ROOT_PASSWORD=master_root_password \ bitnami/mariadb:latest
In the above command the container is configured as a
MARIADB_MASTER_ROOT_PASSWORDparameters are used by the slave to connect to the master. It also takes a dump of the existing data in the master server. The replication user credentials are specified using the
MARIADB_REPLICATION_PASSWORDparameters and should be the same as the one specified on the master.
You now have a two node MariaDB master/slave replication cluster up and running. You can scale the cluster by adding/removing slaves without incurring any downtime.
With Docker Compose the master/slave replication can be setup using:
services: mariadb-master: image: 'bitnami/mariadb:latest' ports: - '3306' volumes: - /path/to/mariadb-persistence:/bitnami/mariadb environment: - MARIADB_REPLICATION_MODE=master - MARIADB_REPLICATION_USER=repl_user - MARIADB_REPLICATION_PASSWORD=repl_password - MARIADB_ROOT_PASSWORD=master_root_password - MARIADB_USER=my_user - MARIADB_PASSWORD=my_password - MARIADB_DATABASE=my_database mariadb-slave: image: 'bitnami/mariadb:latest' ports: - '3306' depends_on: - mariadb-master environment: - MARIADB_REPLICATION_MODE=slave - MARIADB_REPLICATION_USER=repl_user - MARIADB_REPLICATION_PASSWORD=repl_password - MARIADB_MASTER_HOST=mariadb-master - MARIADB_MASTER_PORT_NUMBER=3306 - MARIADB_MASTER_ROOT_PASSWORD=master_root_password
Scale the number of slaves using:
$ docker-compose up --detach --scale mariadb-master=1 --scale mariadb-slave=3
The above command scales up the number of slaves to
3. You can scale down in the same manner.
Note: You should not scale up/down the number of master nodes. Always have only one master node running.
The image looks for user-defined configurations in
/opt/bitnami/mariadb/conf/my_custom.cnf. Create a file named
my_custom.cnfand mount it at
For example, in order to override the
my_custom.cnffile with the following content.
$ docker run --name mariadb \ -p 3306:3306 \ -e ALLOW_EMPTY_PASSWORD=yes \ -v /path/to/my_custom.cnf:/opt/bitnami/mariadb/conf/my_custom.cnf:ro \ -v /path/to/mariadb-persistence:/bitnami/mariadb \ bitnami/mariadb:latest
services: mariadb: ... volumes: - /path/to/my_custom.cnf:/opt/bitnami/mariadb/conf/my_custom.cnf:ro - /path/to/mariadb-persistence:/bitnami/mariadb ...
After that, your changes will be taken into account in the server's behaviour.
Refer to the MariaDB server option and variable reference guide for the complete list of configuration options.
It is also possible to use your custom
my.cnfand overwrite the main configuration file.
$ docker run --name mariadb -e ALLOW_EMPTY_PASSWORD=yes -v /path/to/my.cnf:/opt/bitnami/mariadb/conf/my.cnf:ro bitnami/mariadb:latest
The Bitnami MariaDB Docker image is designed to be extended so it can be used as the base image for your custom configuration.
Before extending this image, please note there are certain configuration settings you can modify using the original image:
MARIADB_PORT_NUMBERor the character set using
If your desired customizations cannot be covered using the methods mentioned above, extend the image. To do so, create your own image using a Dockerfile with the format below:
FROM bitnami/mariadb ## Put your customizations below ...
Here is an example of extending the image with the following modifications:
FROM bitnami/mariadb LABEL maintainer "Bitnami "
Change user to perform privileged actions
RUN install_packages vim
Revert to the original non-root user
modify configuration file.
RUN ini-file set --section "mysqld" --key "collation-server" --value "utf8_general_ci" "/opt/bitnami/mariadb/conf/my.cnf"
Modify the ports used by MariaDB by default
It is also possible to change these environment variables at runtime
ENV MARIADB_PORT_NUMBER=3307 EXPOSE 3307
Modify the default container user
Based on the extended image, you can use a Docker Compose file like the one below to add other features:
services: mariadb: build: . ports: - '3306:3307' volumes: - /path/to/my_custom.cnf:/opt/bitnami/mariadb/conf/my_custom.cnf:ro - data:/bitnami/mariadb/data volumes: data: driver: local
The Bitnami MariaDB Docker image sends the container logs to the
stdout. To view the logs:
$ docker logs mariadb
or using Docker Compose:
$ docker-compose logs mariadb
You can configure the containers logging driver using the
--log-driveroption if you wish to consume the container logs differently. In the default configuration docker uses the
Bitnami provides up-to-date versions of MariaDB, including security patches, soon after they are made upstream. We recommend that you follow these steps to upgrade your container.
$ docker pull bitnami/mariadb:latest
or if you're using Docker Compose, update the value of the image property to
Stop the currently running container using the command
$ docker stop mariadb
or using Docker Compose:
$ docker-compose stop mariadb
Next, take a snapshot of the persistent volume
$ rsync -a /path/to/mariadb-persistence /path/to/mariadb-persistence.bkp.$(date +%Y%m%d-%H.%M.%S)
You can use this snapshot to restore the database state should the upgrade fail.
$ docker rm -v mariadb
or using Docker Compose:
$ docker-compose rm -v mariadb
Re-create your container from the new image.
$ docker run --name mariadb bitnami/mariadb:latest
or using Docker Compose:
$ docker-compose up mariadb
$ docker-compose down # Change the mount point sed -i -e 's#mariadb_data:/bitnami#mariadb_data:/bitnami/mariadb#g' docker-compose.yml # Pull the latest bitnami/mariadb image $ docker pull bitnami/mariadb:latest $ docker-compose up -d
rootuser and the MariaDB daemon was started as the
mysqluser. From now on, both the container and the MariaDB daemon run as user
1001. As a consequence, the data directory must be writable by that user. You can revert this behavior by changing
USER rootin the Dockerfile.
VOLUMEinstruction has been removed from the
MARIADB_MASTER_USERhas been renamed to
MARIADB_MASTER_PASSWORDhas been renamed to
MARIADB_ROOT_USERhas been added to the available env variables. It can be used to specify the admin user.
ALLOW_EMPTY_PASSWORDhas been added to the available env variables. It can be used to allow blank passwords for MariaDB.
MARIADB_ROOT_PASSWORDenv variable or disable this requirement by setting the
ALLOW_EMPTY_PASSWORDenv variable to
yes(testing or development scenarios).
/bitnami/mariadb. Now you only need to mount a single volume at
stdoutand are no longer collected in the volume.
If you encountered a problem running this container, you can file an issue. For us to provide better support, be sure to include the following information in your issue:
echo $BITNAMI_IMAGE_VERSIONinside the container)
Copyright (c) 2015-2021 Bitnami
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.