How can I create mysql db using docker?

I am trying to host an application using MySQL db on docker. I am using docker compose. my yml file looks like this:

version: '2' volumes: data_sql: services: medical-mysql: image: mysql hostname: medical-mysql volumes: - data_sql:/dbcreation.sql environment: MYSQL_DATABASE: Medical MYSQL_ROOT_PASSWORD: root STARTUP_SQL: data_sql ports: - "3306:3306" medical-main: build: . ports: - "8080:8080" depends_on: - medical-mysql 

I have a dbcreation.sql that creates a db schema and is stored in the yml folder. When I run the yml file, it seems that the file is not running.

What did I miss?

+5
source share
2 answers

1) Create a dbcreation.sql dump file

2) Create an import.sh file:

 #!/usr/bin/env bash mysql -u root -p$MYSQL_ROOT_PASSWORD < /tmp/dbcreation.sql 

3) Create docker-compose.yaml

 database: image: mysql container_name: database.dev command: mysqld --user=root --verbose volumes: - ./dbcreation.sql:/tmp/dbcreation.sql - ./import.sh:/tmp/import.sh ports: - "3306:3306" environment: MYSQL_DATABASE: "test" MYSQL_USER: "test" MYSQL_PASSWORD: "test" MYSQL_ROOT_PASSWORD: "root" MYSQL_ALLOW_EMPTY_PASSWORD: "yes" 

"-./dbcreation.sql:/tmp/dbcreation.sql" - "- local_path: path_inside_container"

4) Run

 docker-compose up docker exec database.dev bash /tmp/import.sh 
+10
source

Just put the .sql file (dbcreation.sql) in a folder (i.e. / mysql_init) and add the folder as a volume like this:

 volumes: - /mysql_init:/docker-entrypoint-initdb.d 

The MySQL image will execute all .sql, .sh and .sql.gz files in / docker -entrypoint-initdb.d at startup.

+5
source

Source: https://habr.com/ru/post/1244580/


All Articles