docker 打包内容丢失

等待时候 2017-09-13 09:15:42



A server 是一个容器、我通过 commit 生成镜像,然后在把镜像save打包成一个压缩包。

B server 是一个容器、是通过A server打包的镜像生成的、却少了几个数据库,这是怎么回事?

其中 B Server中的 shoe 也是我自己的数据库、却打包成功了,其它标红的却没有。
...全文
1392 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
我是一根柴 2017-09-21
  • 打赏
  • 举报
回复
容器在重启后会初始化。
等待时候 2017-09-21
  • 打赏
  • 举报
回复
引用 21 楼 qq_29237043 的回复:
容器在重启后会初始化。
重启并不会清空我数据库的
等待时候 2017-09-18
  • 打赏
  • 举报
回复
引用 18 楼 qq_33935295 的回复:
你的这个镜像只能运行一个数据库 你可以自己构建镜像运行多个数据库
也就是说、一个容器只能运行一个数据库吗? 不应该的啊、一个容器就是一个数据库,不仅仅只是运行一个数据库的啊 ! 但是出现我这样的情况、也不知道怎么办了
qq_33935295 2017-09-18
  • 打赏
  • 举报
回复
mysql只是数据库管理软件,人家的理念就是一个容器运行一个数据库,就是一个database,只是没有限制好
等待时候 2017-09-15
  • 打赏
  • 举报
回复
引用 16 楼 qq_33935295 的回复:
要持久化就是容器启动时指定MYSQL_DATABASE=shoe,只能有一个,如果要使用多个就自己构建镜像
那这样按照你的意思、一个容器只运行一个数据库吗?我不能在这个容器添加多个数据库吗?
qq_33935295 2017-09-15
  • 打赏
  • 举报
回复
引用 15 楼 janda2011 的回复:
[quote=引用 14 楼 qq_33935295 的回复:] 我做了实验,查看mysql的存储位置/var/lib/mysql,中只存了MYSQL_DATABASE=shoe指定的数据库, 也就是说其它的数据库没有持久化,可能是写在内存,或临时文件中, 在启动b的时候会执行脚本,可能因为并没有持久化才会造成数据丢失
那是不是制作完了容器之后、就需要持久化,手动持久化吗?怎么操作的[/quote] 要持久化就是容器启动时指定MYSQL_DATABASE=shoe,只能有一个,如果要使用多个就自己构建镜像
等待时候 2017-09-15
  • 打赏
  • 举报
回复
引用 14 楼 qq_33935295 的回复:
我做了实验,查看mysql的存储位置/var/lib/mysql,中只存了MYSQL_DATABASE=shoe指定的数据库, 也就是说其它的数据库没有持久化,可能是写在内存,或临时文件中, 在启动b的时候会执行脚本,可能因为并没有持久化才会造成数据丢失
那是不是制作完了容器之后、就需要持久化,手动持久化吗?怎么操作的
qq_33935295 2017-09-15
  • 打赏
  • 举报
回复
引用 13 楼 janda2011 的回复:
[quote=引用 12 楼 qq_33935295 的回复:] 不太清楚别人对mysql进行了哪些改动,建议你自己构建镜像使用,提交镜像最好容器停止服务,可能带来一些问题
一般来说commit 了之后、就会把容器全部生成镜像啊,包括容器里面操作的数据,难道真的是我这源镜像有问题? 为了避免错误、我停止了容器在操作的[/quote] 我做了实验,查看mysql的存储位置/var/lib/mysql,中只存了MYSQL_DATABASE=shoe指定的数据库, 也就是说其它的数据库没有持久化,可能是写在内存,或临时文件中, 在启动b的时候会执行脚本,可能因为并没有持久化才会造成数据丢失
等待时候 2017-09-15
  • 打赏
  • 举报
回复
引用 12 楼 qq_33935295 的回复:
不太清楚别人对mysql进行了哪些改动,建议你自己构建镜像使用,提交镜像最好容器停止服务,可能带来一些问题
一般来说commit 了之后、就会把容器全部生成镜像啊,包括容器里面操作的数据,难道真的是我这源镜像有问题? 为了避免错误、我停止了容器在操作的
qq_33935295 2017-09-15
  • 打赏
  • 举报
回复
不太清楚别人对数据库做了哪些改动
引用 11 楼 janda2011 的回复:
[quote=引用 10 楼 qq_33935295 的回复:] 问题排查 1、查看b的日志是否会初始化数据库 2、查看mysql的日志是否对数据进行操作 3、查看数据库的是否有数据,select 命令
我的镜像是网易蜂巢mysql镜像、地址如下: https://c.163.com/hub#/m/repository/?repoId=2955 1、并没有初始化、还存留我在a 的操作数据。 2、有a操作记录日志 3、有a的数据 启动命令为:
docker run -d --name mysql -p 3306:3306 b/mysql
因为在a 的时候我就指定了root帐号、以及创建了我的数据库、所以我在b的时候就只运行不做其它参数操作[/quote] 不太清楚别人对mysql进行了哪些改动,建议你自己构建镜像使用,提交镜像最好容器停止服务,可能带来一些问题
qq_33935295 2017-09-15
  • 打赏
  • 举报
回复
你的这个镜像只能运行一个数据库 你可以自己构建镜像运行多个数据库
qq_33935295 2017-09-14
  • 打赏
  • 举报
回复
引用 8 楼 janda2011 的回复:
[quote=引用 7 楼 qq_33935295 的回复:]
1、查看a的dockerfile看和普通构建mysql是否一样
2、docke的文件系统ufw联合式文件系统,加-e 即使容器关闭,只要重启就会重新加载
3、重启容器a,看看是否有ecshop,xcp
建议:
如果是公司使用建议自己构建镜像,对于关键数据用volume备份

1、a 是直接从蜂巢镜像拉取下来的
2、不太明白
3、重启a、这两个数据库依然存在,不会消失 [/quote]
你启动b时候的命令是什么
等待时候 2017-09-14
  • 打赏
  • 举报
回复
引用 7 楼 qq_33935295 的回复:
1、查看a的dockerfile看和普通构建mysql是否一样 2、docke的文件系统ufw联合式文件系统,加-e 即使容器关闭,只要重启就会重新加载 3、重启容器a,看看是否有ecshop,xcp 建议: 如果是公司使用建议自己构建镜像,对于关键数据用volume备份
1、a 是直接从蜂巢镜像拉取下来的 2、不太明白 3、重启a、这两个数据库依然存在,不会消失
等待时候 2017-09-14
  • 打赏
  • 举报
回复
引用 10 楼 qq_33935295 的回复:
问题排查 1、查看b的日志是否会初始化数据库 2、查看mysql的日志是否对数据进行操作 3、查看数据库的是否有数据,select 命令
我的镜像是网易蜂巢mysql镜像、地址如下: https://c.163.com/hub#/m/repository/?repoId=2955 1、并没有初始化、还存留我在a 的操作数据。 2、有a操作记录日志 3、有a的数据 启动命令为:
docker run -d --name mysql -p 3306:3306 b/mysql
因为在a 的时候我就指定了root帐号、以及创建了我的数据库、所以我在b的时候就只运行不做其它参数操作
qq_33935295 2017-09-14
  • 打赏
  • 举报
回复
引用 9 楼 qq_33935295 的回复:
[quote=引用 8 楼 janda2011 的回复:]
[quote=引用 7 楼 qq_33935295 的回复:]
1、查看a的dockerfile看和普通构建mysql是否一样
2、docke的文件系统ufw联合式文件系统,加-e 即使容器关闭,只要重启就会重新加载
3、重启容器a,看看是否有ecshop,xcp
建议:
如果是公司使用建议自己构建镜像,对于关键数据用volume备份

1、a 是直接从蜂巢镜像拉取下来的
2、不太明白
3、重启a、这两个数据库依然存在,不会消失 [/quote]
你启动b时候的命令是什么[/quote]

1、你的镜像应该是官方的镜像,官方修改了mysql,下面是mysql镜像i1启动mysql的脚本,
https://github.com/docker-library/mysql/blob/master/8.0/docker-entrypoint.sh
2、当你创建容器的时候就会执行这个脚本
你通过-e这个参数设置了环境变量
你设置MYSQL_DATABASE这个参数
3、当你提交成镜像时会保存环境变量
4、当你启动b的时候,会执行这个脚本,由于环境变量中有MYSQL_DATABASE的配置,会创建这个数据库,

问题排查
1、查看b的日志是否会初始化数据库
2、查看mysql的日志是否对数据进行操作
3、查看数据库的是否有数据,select 命令
等待时候 2017-09-13
  • 打赏
  • 举报
回复
引用 3 楼 hemengsi123 的回复:
docker inspect A 看下详情呗
看详情、主要是看什么
綄羙谎唁 2017-09-13
  • 打赏
  • 举报
回复
docker inspect A 看下详情呗
等待时候 2017-09-13
  • 打赏
  • 举报
回复
shoe这个数据库是我run镜像的时候加的:

-e MYSQL_DATABASE=shoe
其它的数据库都是我手动在数据库里面创建的、不会和这个有关系吧
等待时候 2017-09-13
  • 打赏
  • 举报
回复
容器已经 stop、commit 之后、执行新的镜像、发现也没有那几个数据库
qq_33935295 2017-09-13
  • 打赏
  • 举报
回复
1、查看a的dockerfile看和普通构建mysql是否一样 2、docke的文件系统ufw联合式文件系统,加-e 即使容器关闭,只要重启就会重新加载 3、重启容器a,看看是否有ecshop,xcp 建议: 如果是公司使用建议自己构建镜像,对于关键数据用volume备份
加载更多回复(2)

1,163

社区成员

发帖
与我相关
我的任务
社区描述
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux 机器上,也可以实现虚拟化。
社区管理员
  • Docker
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧