Mysql数据库在每次docker重启时消失



背景:我正在更新我的dockerfile,并确保它的工作我重建我的docker从头开始使用系统修剪-a清除一切后。在它建立成功后,我尝试制作一个名为"database_A"并使用"显示数据库"它确实显示了&;database_a &;被创建。然而,每当我重新启动容器,它会消失,并检查使用查询"显示数据库"数据库&;database_a &;不存在

我是这样运行mysql容器的:

echo "runing mysql container..."
docker run --rm -it 
--network host 
-e MYSQL_ROOT_PASSWORD=secret 
--volume $(pwd)/mysql_data:/var/lib/mysql 
--volume $(pwd)/mysql.conf:/etc/mysql/mysql.conf.d 
--name mysql 
-p 3307:3307 
-d mysql:5.6

在mysql.conf.d/mysqld.cnf中指定

datadir     = /var/lib/mysql

使用mysql容器上的bash终端,我检查了/var/lib/mysql文件夹,ibdata1文件根本没有更新。我试着在/var/lib/mysql中创建一个文件夹,它确实出现在主机的/mysql_data中。所以它使用了正确的音量,但保存在不同的位置?我如何验证它?

尝试使用永久文件夹来存储mysql数据库数据文件。使用$(pwd)/mysql_data似乎是临时的,并且依赖于您运行容器的位置。

下面的流程显示了在删除容器并使用相同的绑定挂载启动新数据库后保留已创建的数据库:

$ docker run --name some-mysql -v ~/private/mysql-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=secret -d mysql:5.6
$docker exec -it some-mysql bash
root@0873b9898e23:/# mysql -uroot -psecret
Welcome to the MySQL monitor...
mysql> crete database test;
Query OK, 1 row affected (0.01 sec)
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.01 sec)
mysql> ^DBye
root@0873b9898e23:/# exit
# let's remove the container and create new one 
$ docker rm -f some-mysql
some-mysql
$docker run --name some-mysql -v ~/private/mysql-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=secret -d mysql:5.6
docker exec -it some-mysql bash
root@6f77e071321e:/# mysql -uroot -psecret
Welcome to the MySQL monitor....
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.01 sec)

另外,请注意mysql docker docs.

最新更新