我试图在docker上托管一个使用MySQL db的应用程序。我正在使用docker compose。我的yml文件如下所示:
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
我有dbcreation.sql
创建数据库架构并保存在yml文件夹中。当我运行yml文件时,好像文件没有运行。
我错过了什么?
答案 0 :(得分:23)
只需将.sql文件(dbcreation.sql)放在一个文件夹(即。/ mysql_init)中,然后将该文件夹添加为如下的卷:
volumes:
- /mysql_init:/docker-entrypoint-initdb.d
MySQL映像将在启动时执行/docker-entrypoint-initdb.d中的所有.sql,.sh和.sql.gz文件。
答案 1 :(得分:22)
1)创建转储文件 dbcreation.sql
2)创建 import.sh 文件:
#!/usr/bin/env bash
mysql -u root -p$MYSQL_ROOT_PASSWORD < /tmp/dbcreation.sql
3)创建 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"
&#34; - ./dbcreation.sql:/tmp/dbcreation.sql" - &#34; - local_path:path_inside_container&#34;
4)运行
docker-compose up
docker exec database.dev bash /tmp/import.sh