I’m following the docs of mariadb. It says that the db should be created if it find a .sql in /docker-entrypoint-initdb.d.
I’m working on a Ubuntu Server in a Oracle Virtual BOX VM.
My docker-compose.yml looks like this:
version: "3.9"
services:
db:
image: mariadb:10
container_name: mariadb
ports:
- 3306:3306
environment:
- MYSQL_USER=user
- MYSQL_ROOT_PASSWORD=password
- MYSQL_PASSWORD=password
- MARIADB_DATABASE=database // tried with MYSQL_DATABASE and without this line
volumes:
- "db_data:/var/lib/mysql"
- ".database/initdb/dump.sql:/docker-entrypoint-initdb.d/initdb.sql"
# networks:
# - network
volumes:
db_data:
My initdb.sql looks like this (the one that should work in the end looks different but out of simplicity I reduced it to the max and could not even this simple one working):
CREATE DATABASE NEWDB;
I honestly don’t know where to look or what to do now because everywhere I looked for a possible solution I found that this is the bare minimum example that should work.
I tried to restarted docker, deleted all containers, images and volumes, modified the initdb.sql into:
CREATE USER user WITH PASSWORD 'password';
CREATE DATABASE IF NOT EXISTS database;
GRANT ALL PRIVILEGES ON DATABASE database TO user;
but the database is not initialized when I docker compose up.
I looked up the container and the initdb.sql was there.
EDIT: It somehow worked, when I docker compose up with MARIADB_DATABASE=database but the script initdb.sql still doesn’t work and it’s the most important thing because it set’s up the whole database.
(NOTE: On top of that I want to set up another PHP-container that runs a PHP-script in order to collect data that is being stored in the above MariaDB-container. The MariaDB is connected with a website that calls data from the container)
2
Answers
I came up with a solution. I used a base image of laravel (installed the laravel project with <curl -s "https://laravel.build/project-name?with=mariadb" | sudo bash> and modified it a little bit. So here's the docker-compose.yml:
Here you can see that the "10-create-testing-database.sh" is executed on startup. I tested this container and it created a database, so I just had to modify it a little bit and now the container creates a database and tables on container startup. Here's the "10-create-testing-database.sh":
I still don't know why my initial setup did not work. The only difference I see is that this working file is a .sh and the not working one is a .sql (this does not make sence to me but it what it is).
Dockerfile:
Well I’m using the following stack and it works fine for me.
php-apache:
This is an Apache server that runs all my
php
scripts. You can place your scripts in./src
directory and it will automatically be mounted toDocumentRoot
directory of theApache
server.db:
This the latest docker container of
MariaDb
adminer:
This is the lite-weight database browser which I use for creating and altering my databases. You can just visit
localhost:8081
and then enter the following credentials. It becomes simpler to manage the databases this way.Dockerfile:
This is a simple docker container which is extended from the base
php:8.0-apache
image, withmysql
extensions installed in it forPDO
support.P.S:
Here you’ll have to create all your databases manually via GUI of
Adminer
. But if you preferSQL
queries viainitdb.sql
then be my guest. I’ve just provided this configuration as a suggestion.