</span></code></pre></div><p>Using the following format:</p><divclass="language-text highlight"><pre><span></span><code><spanid=__span-1-1><aid=__codelineno-1-1name=__codelineno-1-1href=#__codelineno-1-1></a>MYSQL_ROOT_PASSWORD="ROOT_ACCESS_PASSWORD"
</span></code></pre></div><p>These settings can be mixed and matched with Docker ENV settings as you require, but the settings in the file will always take precedence.</p><h3id=bootstrapping-a-new-instance>Bootstrapping a new instance<aclass=headerlinkhref=#bootstrapping-a-new-instancetitle="Permanent link">¶</a></h3><p>We support a one time run of custom sql files on init. In order to use this place <code>*.sql</code> files in:</p><p><divclass="language-text highlight"><pre><span></span><code><spanid=__span-2-1><aid=__codelineno-2-1name=__codelineno-2-1href=#__codelineno-2-1></a>/config/initdb.d/
</span></code></pre></div> This will have the same effect as setting the <code>REMOTE_SQL</code> environment variable. The sql will only be run on the containers first boot and setup.</p><h3id=check-and-repair>Check and Repair<aclass=headerlinkhref=#check-and-repairtitle="Permanent link">¶</a></h3><p>If user databases are not in a healthy state (sometimes caused by a failed upgrade), it may be remedied by running:</p><divclass="language-shell highlight"><pre><span></span><code><spanid=__span-3-1><aid=__codelineno-3-1name=__codelineno-3-1href=#__codelineno-3-1></a>mariadb-check<spanclass=w></span>-u<spanclass=w></span>root<spanclass=w></span>-p<PASSWORD><spanclass=w></span>-c<spanclass=w></span>-A<spanclass=w></span><spanclass=c1># check all databases for errors</span>
</span><spanid=__span-3-2><aid=__codelineno-3-2name=__codelineno-3-2href=#__codelineno-3-2></a>mariadb-check<spanclass=w></span>-u<spanclass=w></span>root<spanclass=w></span>-p<PASSWORD><spanclass=w></span>-r<spanclass=w></span>-A<spanclass=w></span><spanclass=c1># repair all databases</span>
</span><spanid=__span-3-3><aid=__codelineno-3-3name=__codelineno-3-3href=#__codelineno-3-3></a>mariadb-check<spanclass=w></span>-u<spanclass=w></span>root<spanclass=w></span>-p<PASSWORD><spanclass=w></span>-a<spanclass=w></span>-A<spanclass=w></span><spanclass=c1># analyze all databases</span>
</span><spanid=__span-3-4><aid=__codelineno-3-4name=__codelineno-3-4href=#__codelineno-3-4></a>mariadb-check<spanclass=w></span>-u<spanclass=w></span>root<spanclass=w></span>-p<PASSWORD><spanclass=w></span>-o<spanclass=w></span>-A<spanclass=w></span><spanclass=c1># optimize all databases</span>
</span></code></pre></div><p>After running the above commands, you may need to run the upgrade command again.</p><h3id=upgrading>Upgrading<aclass=headerlinkhref=#upgradingtitle="Permanent link">¶</a></h3><p>When this container initializes, if <code>MYSQL_ROOT_PASSWORD</code> is set an upgrade check will run. If an upgrade is required the log will indicate the need stop any services that are accessing databases in this container, and then run the command:</p><divclass="language-shell highlight"><pre><span></span><code><spanid=__span-4-1><aid=__codelineno-4-1name=__codelineno-4-1href=#__codelineno-4-1></a>mariadb-upgrade<spanclass=w></span>-u<spanclass=w></span>root<spanclass=w></span>-p<PASSWORD>
</span></code></pre></div><h2id=read-only-operation>Read-Only Operation<aclass=headerlinkhref=#read-only-operationtitle="Permanent link">¶</a></h2><p>This image can be run with a read-only container filesystem. For details please <ahref=https://docs.linuxserver.io/misc/read-only/>read the docs</a>.</p><h3id=caveats>Caveats<aclass=headerlinkhref=#caveatstitle="Permanent link">¶</a></h3><ul><li><code>/tmp</code> must be mounted to tmpfs</li><li>Not supported on first run</li></ul><h2id=non-root-operation>Non-Root Operation<aclass=headerlinkhref=#non-root-operationtitle="Permanent link">¶</a></h2><p>This image can be run with a non-root user. For details please <ahref=https://docs.linuxserver.io/misc/non-root/>read the docs</a>.</p><h2id=usage>Usage<aclass=headerlinkhref=#usagetitle="Permanent link">¶</a></h2><p>To help you get started creating a container from this image you can either use docker-compose or the docker cli.</p><divclass="admonition info"><pclass=admonition-title>Info</p><p>Unless a parameter is flaged as 'optional', it is <em>mandatory</em> and a value must be provided.</p></div><h3id=docker-compose-recommended-click-here-for-more-info>docker-compose (recommended, <ahref=https://docs.linuxserver.io/general/docker-compose>click here for more info</a>)<aclass=headerlinkhref=#docker-compose-recommended-click-here-for-more-infotitle="Permanent link">¶</a></h3><divclass="language-yaml highlight"><pre><span></span><code><spanid=__span-5-1><aid=__codelineno-5-1name=__codelineno-5-1href=#__codelineno-5-1></a><spanclass=nn>---</span>
</span></code></pre></div><h3id=docker-cli-click-here-for-more-info>docker cli (<ahref=https://docs.docker.com/engine/reference/commandline/cli/>click here for more info</a>)<aclass=headerlinkhref=#docker-cli-click-here-for-more-infotitle="Permanent link">¶</a></h3><divclass="language-bash highlight"><pre><span></span><code><spanid=__span-6-1><aid=__codelineno-6-1name=__codelineno-6-1href=#__codelineno-6-1></a>docker<spanclass=w></span>run<spanclass=w></span>-d<spanclass=w></span><spanclass=se>\</span>
</span></code></pre></div><h2id=parameters>Parameters<aclass=headerlinkhref=#parameterstitle="Permanent link">¶</a></h2><p>Containers are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <code><external>:<internal></code> respectively. For example, <code>-p 8080:80</code> would expose port <code>80</code> from inside the container to be accessible from the host's IP on port <code>8080</code> outside the container.</p><h3id=ports-p>Ports (<code>-p</code>)<aclass=headerlinkhref=#ports-ptitle="Permanent link">¶</a></h3><table><thead><tr><thstyle="text-align: center;">Parameter</th><th>Function</th></tr></thead><tbody><tr><tdstyle="text-align: center;"><code>3306:3306</code></td><td>MariaDB listens on this port.</td></tr></tbody></table><h3id=environment-variables-e>Environment Variables (<code>-e</code>)<aclass=headerlinkhref=#environment-variables-etitle="Permanent link">¶</a></h3><table><thead><tr><thstyle="text-align: center;">Env</th><th>Function</th></tr></thead><tbody><tr><tdstyle="text-align: center;"><code>PUID=1000</code></td><td>for UserID - see below for explanation</td></tr><tr><tdstyle="text-align: center;"><code>PGID=1000</code></td><td>for GroupID - see below for explanation</td></tr><tr><tdstyle="text-align: center;"><code>TZ=Etc/UTC</code></td><td>specify a timezone to use, see this <ahref=https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List>list</a>.</td></tr><tr><tdstyle="text-align: center;"><code>MYSQL_ROOT_PASSWORD=ROOT_ACCESS_PASSWORD</code></td><td>Set this to root password for installation (minimum 4 characters & non-alphanumeric passwords must be properly escaped). (valid only for first run)</td></tr><tr><tdstyle="text-align: center;"><code>MYSQL_DATABASE=USER_DB_NAME</code></td><td>Specify the name of a database to be created. (valid only for first run)</td></tr><tr><tdstyle="text-align: center;"><code>MYSQL_USER=MYSQL_USER</code></td><td>This user will have superuser access to the database specified by MYSQL_DATABASE (do not use root here). (valid only for first run)</td></tr><tr><tdstyle="text-align: center;"><code>MYSQL_PASSWORD=DATABASE_PASSWORD</code></td><td>Set this to the password you want to use for you MYSQL_USER (minimum 4 characters & non-alphanumeric passwords must be properly escaped). (valid only for first run)</td></tr><tr><tdstyle="text-align: center;"><code>REMOTE_SQL=http://URL1/your.sql,https://URL2/your.sql</code></td><td>Set this to ingest sql files from an http/https endpoint (comma seperated array).</td></tr></tbody></table><h3id=volume-mappings-v>Volume Mappings (<code>-v</code>)<aclass=headerlinkhref=#volume-mappings-vtitle="Permanent link">¶</a></h3><table><thead><tr><thstyle="text-align: center;">Volume</th><th>Function</th></tr></thead><tbody><tr><tdstyle="text-align: center;"><code>/config</code></td><td>Persistent config files</td></tr></tbody></table><h4id=miscellaneous-options>Miscellaneous Options<aclass=headerlinkhref=#miscellaneous-optionstitle="Permanent link">¶</a></h4><table><thead><tr><thstyle="text-align: center;">Parameter</th><th>Function</th></tr></thead><tbody><tr><tdstyle="text-align: center;"><code>--read-only=true</code></td><td>Run container with a read-only filesystem. Please <ahref=https://docs.linuxserver.io/misc/read-only/>read the docs</a>.</td></tr><tr><tdstyle="text-align: center;"><code>--user=1000:1000</code></td><td>Run container with a non-root user. Please <ahref=https://docs.linuxserver.io/misc/non-root/>read the docs</a>.</td></tr></tbody></table><h2id=environment-variables-from-files-docker-secrets>Environment variables from files (Docker secrets)<aclass=headerlinkhref=#environment-variables-from-files-docker-secretstitle="Permanent link">¶</a></h2><p>You can set any environment variable from a file by using a special prepend <code>FILE__</code>.</p><p>As an
</span></code></pre></div><p>Will set the environment variable <code>MYVAR</code> based on the contents of the <code>/run/secrets/mysecretvariable</code> file.</p><h2id=umask-for-running-applications>Umask for running applications<aclass=headerlinkhref=#umask-for-running-applicationstitle="Permanent link">¶</a></h2><p>For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional <code>-e UMASK=022</code> setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up <ahref=https://en.wikipedia.org/wiki/Umask>here</a> before asking for support.</p><h2id=user-group-identifiers>User / Group Identifiers<aclass=headerlinkhref=#user-group-identifierstitle="Permanent link">¶</a></h2><p>When using volumes (<code>-v</code> flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user <code>PUID</code> and group <code>PGID</code>.</p><p>Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.</p><p>In this instance <code>PUID=1000</code> and <code>PGID=1000</code>, to find yours use <code>id your_user</code> as below:</p><divclass="language-bash highlight"><pre><span></span><code><spanid=__span-8-1><aid=__codelineno-8-1name=__codelineno-8-1href=#__codelineno-8-1></a>id<spanclass=w></span>your_user
</span></code></pre></div><h2id=docker-mods>Docker Mods<aclass=headerlinkhref=#docker-modstitle="Permanent link">¶</a></h2><p><ahref="https://mods.linuxserver.io/?mod=mariadb"title="view available mods for this container."><imgalt="Docker Mods"src="https://img.shields.io/badge/dynamic/yaml?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=mariadb&query=%24.mods%5B%27mariadb%27%5D.mod_count&url=https%3A%2F%2Fraw.githubusercontent.com%2Flinuxserver%2Fdocker-mods%2Fmaster%2Fmod-list.yml"></a><ahref="https://mods.linuxserver.io/?mod=universal"title="view available universal mods."><imgalt="Docker Universal Mods"src="https://img.shields.io/badge/dynamic/yaml?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=universal&query=%24.mods%5B%27universal%27%5D.mod_count&url=https%3A%2F%2Fraw.githubusercontent.com%2Flinuxserver%2Fdocker-mods%2Fmaster%2Fmod-list.yml"></a></p><p>We publish various <ahref=https://github.com/linuxserver/docker-mods>Docker Mods</a> to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.</p><h2id=support-info>Support Info<aclass=headerlinkhref=#support-infotitle="Permanent link">¶</a></h2><ul><li><p>Shell access whilst the container is running:</p><divclass="language-bash highlight"><pre><span></span><code><spanid=__span-10-1><aid=__codelineno-10-1name=__codelineno-10-1href=#__codelineno-10-1></a>docker<spanclass=w></span><spanclass=nb>exec</span><spanclass=w></span>-it<spanclass=w></span>mariadb<spanclass=w></span>/bin/bash
</span></code></pre></div></li><li><p>To monitor the logs of the container in realtime:</p><divclass="language-bash highlight"><pre><span></span><code><spanid=__span-11-1><aid=__codelineno-11-1name=__codelineno-11-1href=#__codelineno-11-1></a>docker<spanclass=w></span>logs<spanclass=w></span>-f<spanclass=w></span>mariadb
</span></code></pre></div></li><li><p>Container version number:</p><divclass="language-bash highlight"><pre><span></span><code><spanid=__span-12-1><aid=__codelineno-12-1name=__codelineno-12-1href=#__codelineno-12-1></a>docker<spanclass=w></span>inspect<spanclass=w></span>-f<spanclass=w></span><spanclass=s1>'{{ index .Config.Labels "build_version" }}'</span><spanclass=w></span>mariadb
</span></code></pre></div></li><li><p>Image version number:</p><divclass="language-bash highlight"><pre><span></span><code><spanid=__span-13-1><aid=__codelineno-13-1name=__codelineno-13-1href=#__codelineno-13-1></a>docker<spanclass=w></span>inspect<spanclass=w></span>-f<spanclass=w></span><spanclass=s1>'{{ index .Config.Labels "build_version" }}'</span><spanclass=w></span>lscr.io/linuxserver/mariadb:latest
</span></code></pre></div></li></ul><h2id=updating-info>Updating Info<aclass=headerlinkhref=#updating-infotitle="Permanent link">¶</a></h2><p>Most of our images are static, versioned, and require an image update and container recreation to update the app inside. With some exceptions (noted in the relevant readme.md), we do not recommend or support updating apps inside the container. Please consult the <ahref=#application-setup>Application Setup</a> section above to see if it is recommended for the image.</p><p>Below are the instructions for updating containers:</p><h3id=via-docker-compose>Via Docker Compose<aclass=headerlinkhref=#via-docker-composetitle="Permanent link">¶</a></h3><ul><li><p>Update images:</p><ul><li><p>All images:</p><divclass="language-bash highlight"><pre><span></span><code><spanid=__span-14-1><aid=__codelineno-14-1name=__codelineno-14-1href=#__codelineno-14-1></a>docker-compose<spanclass=w></span>pull
</span></code></pre></div></li></ul></li><li><p>You can also remove the old dangling images:</p><divclass="language-bash highlight"><pre><span></span><code><spanid=__span-18-1><aid=__codelineno-18-1name=__codelineno-18-1href=#__codelineno-18-1></a>docker<spanclass=w></span>image<spanclass=w></span>prune
</span></code></pre></div></li></ul><h3id=via-docker-run>Via Docker Run<aclass=headerlinkhref=#via-docker-runtitle="Permanent link">¶</a></h3><ul><li><p>Update the image:</p><divclass="language-bash highlight"><pre><span></span><code><spanid=__span-19-1><aid=__codelineno-19-1name=__codelineno-19-1href=#__codelineno-19-1></a>docker<spanclass=w></span>pull<spanclass=w></span>lscr.io/linuxserver/mariadb:latest
</span></code></pre></div></li><li><p>Stop the running container:</p><divclass="language-bash highlight"><pre><span></span><code><spanid=__span-20-1><aid=__codelineno-20-1name=__codelineno-20-1href=#__codelineno-20-1></a>docker<spanclass=w></span>stop<spanclass=w></span>mariadb
</span></code></pre></div></li><li><p>Delete the container:</p><divclass="language-bash highlight"><pre><span></span><code><spanid=__span-21-1><aid=__codelineno-21-1name=__codelineno-21-1href=#__codelineno-21-1></a>docker<spanclass=w></span>rm<spanclass=w></span>mariadb
</span></code></pre></div></li><li><p>Recreate a new container with the same docker run parameters as instructed above (if mapped correctly to a host folder, your <code>/config</code> folder and settings will be preserved)</p></li><li><p>You can also remove the old dangling images:</p><divclass="language-bash highlight"><pre><span></span><code><spanid=__span-22-1><aid=__codelineno-22-1name=__codelineno-22-1href=#__codelineno-22-1></a>docker<spanclass=w></span>image<spanclass=w></span>prune
</span></code></pre></div></li></ul><h3id=image-update-notifications-diun-docker-image-update-notifier>Image Update Notifications - Diun (Docker Image Update Notifier)<aclass=headerlinkhref=#image-update-notifications-diun-docker-image-update-notifiertitle="Permanent link">¶</a></h3><divclass="admonition tip"><pclass=admonition-title>Tip</p><p>We recommend <ahref=https://crazymax.dev/diun/>Diun</a> for update notifications. Other tools that automatically update containers unattended are not recommended or supported.</p></div><h2id=building-locally>Building locally<aclass=headerlinkhref=#building-locallytitle="Permanent link">¶</a></h2><p>If you want to make local modifications to these images for development purposes or just to customize the logic:</p><divclass="language-bash highlight"><pre><span></span><code><spanid=__span-23-1><aid=__codelineno-23-1name=__codelineno-23-1href=#__codelineno-23-1></a>git<spanclass=w></span>clone<spanclass=w></span>https://github.com/linuxserver/docker-mariadb.git
</span></code></pre></div><p>The ARM variants can be built on x86_64 hardware and vice versa using <code>lscr.io/linuxserver/qemu-static</code></p><divclass="language-bash highlight"><pre><span></span><code><spanid=__span-24-1><aid=__codelineno-24-1name=__codelineno-24-1href=#__codelineno-24-1></a>docker<spanclass=w></span>run<spanclass=w></span>--rm<spanclass=w></span>--privileged<spanclass=w></span>lscr.io/linuxserver/qemu-static<spanclass=w></span>--reset
</span></code></pre></div><p>Once registered you can define the dockerfile to use with <code>-f Dockerfile.aarch64</code>.</p><p>To help with development, we generate this dependency graph.</p><detailsclass=info><summary>Init dependency graph</summary><divclass=d2><divclass=d2-light><svgdata-d2-version=v0.7.0preserveaspectratio="xMinYMin meet"viewbox="0 0 660 3202"role=imgaria-label=Diagram><svgclass="d2-2a48e361d340418cb25a4d20fca388fe d2-svg"width=660height=3202viewbox="11 11 660 3202"><rectx=11.000000y=11.000000width=660.000000height=3202.000000rx=0.000000fill=#FFFFFFstroke-width=0class=" fill-N7"/><styletype=text/css>