前置条件
1、拉取mysql镜像:
docker pull mysql
2、查看mysql镜像历史docker history
或者在docker hub查看
发现mysql启动并赋权执行命令如下:
docker-entrypoint.sh mysqld
该命令一直占用终端,无法执行下一步命令
解决思路
1、调整启动命令,让mysqld
在后台运行
2、判断root的执行sql权限是否正常,如果正常导入数据库
3、增加健康检查
基于上述,编写的start.sh脚本内容如下:
#!/bin/bash
str=$"\n"
nohup docker-entrypoint.sh mysqld &
sstrn=$(echo -e $str)
echo $sstrn
for i in {1..100}; do
if mysql -uroot -proot -e 'select 1';then
echo 'create database monitor ...';
mysql -uroot -proot -e 'create database weltest;';
echo 'start import database weltest...';
mysql -uroot -proot weltest<weltest.sql;
echo 'import database weltest success!';
break;
fi;
echo 'loop '$i 'sleep 3 s';
sleep 3;
done
重新构建镜像
执行构建命令,Dockerfile文件内容如下:
FROM mysql:latest
ADD start.sh /
执行构建命令:
docker build -t weltest_mysql:1.0.0 .
编写docker-compose
docker-compose版本为:v2.25.0,对应内容如下:
version: '3.9'
services:
mss_mysql:
image: weltest_mysql:1.0.0
ports:
- "3306:3306"
volumes:
- "/mysql/weltest.sql:/weltest.sql"
command:
- /bin/sh
- -c
- |
bash start.sh
/bin/sh
healthcheck:
test: mysql -uroot -proot weltest-e 'select 1'
interval: 30s
timeout: 10s
retries: 5
tty: true
stdin_open: true