raj*_*j19 13 docker docker-compose
我试图在docker-compose.yml文件执行期间创建一个mysql数据库模式
version: "2"
services:
web:
build: docker
ports:
- "8080:8080"
environment:
- MYSQL_ROOT_PASSWORD=root
mysql:
image: mysql:latest
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=test
ports:
- "3306:3306"
links:
- web
onrun:
command: "docker exec -i test_mysql_1 mysql -uroot -proot test <dummy1.sql"
Run Code Online (Sandbox Code Playgroud)
我试过onrun,但这不起作用.我正在构建第一张图片,但从docker hub中拉出第二张图片.请熟悉如何在docker-compose之后执行以下命令
Tar*_*ani 23
没有什么比这更好的onrun了docker-compose.它只会调出容器并执行命令.现在你几乎没有选择
使用mysql图像初始化
mysql:
image: mysql:latest
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=test
volumes:
- ./dummy1.sql:/docker-entrypoint-initdb.d/dummy1.sql
ports:
- "3306:3306"
Run Code Online (Sandbox Code Playgroud)
你可以将你的sql文件放在/docker-entrypoint-initdb.d容器里面
使用bash脚本
docker-compose up -d
# Give some time for mysql to get up
sleep 20
docker-compose exec mysql mysql -uroot -proot test <dummy1.sql
Run Code Online (Sandbox Code Playgroud)
使用其他docker服务初始化DB
version: "2"
services:
web:
build: docker
ports:
- "8080:8080"
environment:
- MYSQL_ROOT_PASSWORD=root
mysql:
image: mysql:latest
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=test
ports:
- "3306:3306"
mysqlinit:
image: mysql:latest
volumes:
- ./dummy1.sql:/dump/dummy1.sql
command: bash -c "sleep 20 && mysql -h mysql -uroot -proot test < /dump/dummy1.sql"
Run Code Online (Sandbox Code Playgroud)
你运行另一个服务,它将为你启动数据库,就像mysqlinit上面的那个
当容器第一次启动时,将使用提供的配置变量创建和初始化具有指定名称的新数据库。此外,它将执行在 /docker-entrypoint-initdb.d 中找到的扩展名为 .sh、.sql 和 .sql.gz 的文件。文件将按字母顺序执行。
来自https://hub.docker.com/_/mysql/
这是在容器创建时有多少数据库(postgresql、mysql 等)初始化自己的便捷方式。您应该创建一个 *.sql /*.sh 文件并通过卷将其绑定到新容器中:
db:
image: mysql:latest
volumes:
- ./db/entrypoint:/docker-entrypoint-initdb.d
environment:
- MYSQL_ROOT_PASSWORD=iamgroot
- MYSQL_DATABASE=gotg
Run Code Online (Sandbox Code Playgroud)
这会将所有 sql / sh 文件加载到容器中,然后自动执行。
| 归档时间: |
|
| 查看次数: |
19211 次 |
| 最近记录: |