尝试将 SQL 转储导入 MySQL 容器并随后将容器作为新映像提交时,用户可能会遇到使用新映像启动容器时数据库不保留新创建的数据的问题。本文调查了根本原因并提供了解决此问题的解决方案。
官方 MySQL Docker 映像将数据存储在卷中。这是一个理想的设置,可以确保数据在容器的生命周期之外持续存在。但是,数据卷绕过联合文件系统,并且不包含在映像提交过程中。因此,在容器运行时添加到数据库的数据不会反映在提交的镜像中。
要克服此限制并提交新添加的数据,用户可以创建自己的 MySQL 库没有数据量的图像。这涉及构建一个自定义映像,其中包含必要的软件和配置,但不包括任何卷挂载点。
FROM mysql:latest RUN apt-get update && apt-get install -y mysql-client
mysql -uroot -psecret -e 'create database <database_name>;' mysql -uroot -psecret <database_name> < /mnt/<sql_dump_file>.sql
docker commit -m "Imported <database_name> SQL dump" <container_id> <new_image_name>:<version>
通过创建没有卷的自定义 MySQL 基础映像,用户能够:
需要注意的是,数据添加到当容器不复存在时,提交后正在运行的容器将会丢失。这是因为数据不再存储在持久卷中,而是存储在容器的临时文件系统中。
以上是将容器作为镜像提交时如何保留MySQL数据库数据?的详细内容。更多信息请关注PHP中文网其他相关文章!