参考链接:滑动验证页面
原因是:您应该在运行容器之前清除 data_volume 并且将执行 sql 文件。 此卷 data_volume 可以利用以下命令删除: [root@localhost data]# rm -rf mysql/ --》留意:此目录是数据卷目录,即映射的宿主机持久化目录(即docker run -v /data/mysql:/var/lib/mysql->对应的/data/mysql目录),而不是容器内的目录
您的问题的根本原因可以在 docker-entrypoint.sh 中找到。当您运行 mysql 容器时,它会检查 mysql 目录 /var/lib/mysql 存在。假如该目录不存在(第一次运行),它将运行您的 SQL 文件。
关于docker-entrypoint-initdb.d下的sql脚本执行原理参考:
关于docker-entrypoint-initdb.d下的sql脚本在启动docker时没有执行原因分析_docker_一朝入魔-华为云开发者联盟
由脚本可以看出,对于docker-entrypoint-initdb.d 目录下的sql 文件,在执行前会判定DATABASE_ALREADY_EXISTS 为false
即 /data/mysql 目录并不存在-->个人总结:要保证每次更新mysql的脚本数据后,清理掉这个持久化的目录;但凡该服务器已经存在任何数据库,那么这个文件肯定不为空,故而不会执行sql脚本;
看到源代码内容DATABASE_ALREADY_EXISTS,效果为true就不执行sql脚本了:
declare -g DATABASE_ALREADY_EXISTS
if [ -d "$DATADIR/mysql" ]; then
DATABASE_ALREADY_EXISTS='true'
fi
在实际开发中的操作:
[root@localhost data]# docker stop mysql
mysql
[root@localhost data]# docker rm mysql
mysql
[root@localhost data]# docker rmi 192.168.95.101:5000/zww-test/mysql:5.7.1
Untagged: 192.168.95.101:5000/zww-test/mysql:5.7.1
Deleted: sha256:0ee6264d4db55dde75ee2c330418978b20b364f40aa8b42c8fc48c9c200b42
---》先清理掉运行中的mysql容器
[root@localhost data]# rm -rf mysql/
--》然后删除数据卷映射的宿主机目录
[root@localhost data]# ls
docker-compose.yml index.html initsql nginx tomcat1 tomcat2
[root@localhost data]# cd initsql/
--》进入Dockerfile和sql文件上传地点的目录:
[root@localhost initsql]# ls
Dockerfile tbuser.sql
[root@localhost initsql]# rm -rf tbuser.sql
[root@localhost initsql]# rz -E
rz waiting to receive.
--》上传相关sql文件和Dockerfile文件内容
/*
Navicat MySQL Data Transfer
Source Server : test
Source Server Version : 50558
Source Host : localhost:3306
Source Database : test_user
Target Server Type : MYSQL
Target Server Version : 50558
File Encoding : 65001
Date: 2024-06-01 00:29:55
*/
CREATE DATABASE IF NOT EXISTS test_user;
use test_user;
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for tbuser
-- ----------------------------
DROP TABLE IF EXISTS `tbuser`;
CREATE TABLE `tbuser` (
`userid` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(20) COLLATE utf8_bin DEFAULT NULL,
`password` varchar(20) COLLATE utf8_bin DEFAULT NULL,
`userroles` varchar(2) COLLATE utf8_bin DEFAULT NULL,
`nickname` varchar(50) COLLATE utf8_bin DEFAULT NULL,
PRIMARY KEY (`userid`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
-- ----------------------------
-- Records of tbuser
-- ----------------------------
INSERT INTO `tbuser` VALUES ('11', 'zhangsan', '123456', '1', 'woniu');
Dockerfile文件内容:
FROM mysql:5.7
# 作者信息,可以自定义
MAINTAINER mysql from date UTC by Asia/Shanghai "zhangweiwei"
ENV TZ Asia/Shanghai
COPY tbuser.sql /docker-entrypoint-initdb.d
RUN chmod +x /docker-entrypoint-initdb.d/tbuser.sql
[root@localhost initsql]# docker build -t 192.168.95.101:5000/zww-test/mysql:5.7.1 .
--》制作docker镜像
[+] Building 15.6s (8/8) FINISHED docker:default
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 333B 0.0s
=> [internal] load metadata for docker.io/library/mysql:5.7 15.3s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load build context 0.0s
=> => transferring context: 1.17kB 0.0s
=> [1/3] FROM docker.io/library/mysql:5.7@sha256:f2ad209efe9c67104167fc609cca6973c8422939491c9345270175a30 0.0s
=> CACHED [2/3] COPY tbuser.sql /docker-entrypoint-initdb.d 0.0s
=> [3/3] RUN chmod +x /docker-entrypoint-initdb.d/tbuser.sql 0.2s
=> exporting to image 0.0s
=> => exporting layers 0.0s
=> => writing image sha256:2b3f1cc1639a24e8d2fd811f81804a4bcbbcf84cdb7880075d7197ab1504b719 0.0s
=> => naming to 192.168.95.101:5000/zww-test/mysql:5.7.1 0.0s
[root@localhost initsql]# docker run -itd --name mysql --restart always --privileged=true -p 3306:3306 -e MYSQL_ROOT_PASSWORD=admin -v /data/mysql:/var/lib/mysql 192.168.95.101:5000/zww-test/mysql:5.7.1 --character-set-server=utf8 --collation-server=utf8_general_ci
e0cff9f3571fa76dc546e32eb9dec96f774a33fb2f214081d278fe72ef0e72ec
--》运行mysql容器
--》登录mysql客户端,打开数据库表,观察修改解决问题后的效果如图所示,完成sql文件初始化数据。
末了检查Dockerfile设置的mysql日期,可以看到时间也是及时的:
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |