首页  >  文章  >  数据库  >  将容器作为镜像提交时如何保留MySQL数据库数据?

将容器作为镜像提交时如何保留MySQL数据库数据?

Susan Sarandon
Susan Sarandon原创
2024-10-24 11:50:29741浏览

How to Preserve MySQL Database Data When Committing a Container as Image?

对 MySQL 容器中受损的数据库数据进行故障排除

尝试将 SQL 转储导入 MySQL 容器并随后将容器作为新映像提交时,用户可能会遇到使用新映像启动容器时数据库不保留新创建的数据的问题。本文调查了根本原因并提供了解决此问题的解决方案。

背景

官方 MySQL Docker 映像将数据存储在卷中。这是一个理想的设置,可以确保数据在容器的生命周期之外持续存在。但是,数据卷绕过联合文件系统,并且不包含在映像提交过程中。因此,在容器运行时添加到数据库的数据不会反映在提交的镜像中。

解决方案

要克服此限制并提交新添加的数据,用户可以创建自己的 MySQL 库没有数据量的图像。这涉及构建一个自定义映像,其中包含必要的软件和配置,但不包括任何卷挂载点。

分步指南

  1. 构建不带卷的自定义 MySQL 基础映像:
FROM mysql:latest
RUN apt-get update && apt-get install -y mysql-client
  1. 创建一个新的 MySQL 数据库并导入 SQL 转储:
mysql -uroot -psecret -e 'create database <database_name>;'
mysql -uroot -psecret <database_name> < /mnt/<sql_dump_file>.sql
  1. 将容器作为新映像提交:
docker commit -m "Imported <database_name> SQL dump" <container_id> <new_image_name>:<version>

此解决方案的优点

通过创建没有卷的自定义 MySQL 基础映像,用户能够:

  • 将数据提交到镜像并在容器终止后保留它。
  • 确保数据在容器重新启动和升级后仍然存在。

警告

需要注意的是,数据添加到当容器不复存在时,提交后正在运行的容器将会丢失。这是因为数据不再存储在持久卷中,而是存储在容器的临时文件系统中。

以上是将容器作为镜像提交时如何保留MySQL数据库数据?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn