A server 是一个容器、我通过 commit 生成镜像,然后在把镜像save打包成一个压缩包。B server 是一个容器、是通过A server打包的镜像生成的、却少了几个数据库,这是怎么回事?其中 B Server中的 shoe 也是我自己的数据库、却打包成功了,其它标红的却没有。

解决方案 »

  1.   

    容器已经 stop、commit 之后、执行新的镜像、发现也没有那几个数据库
      

  2.   

    shoe这个数据库是我run镜像的时候加的:-e MYSQL_DATABASE=shoe其它的数据库都是我手动在数据库里面创建的、不会和这个有关系吧
      

  3.   

    docker inspect A   看下详情呗
      

  4.   

    1、你的mysql镜像是自己构建的还是官方构建的
    2、你标红的数据库是否有数据
    3、你启动B的时候为什么加-e 这个参数,不加-e试试
    4、你启动B的时候把 -e MYSQL_DATABASE设置成你标红的三个数据库
      

  5.   


    1、A 是网易镜像拉取的
    2、有数据、是在run完容器时候、手动create 的数据库
    3、-e 是启动 A 的时候加的、因为我运行容器的时候就需要那个数据库
    4、如果B 启动的时候加 -e 会覆盖掉我原先创建的数据库
      

  6.   

    1、查看a的dockerfile看和普通构建mysql是否一样
    2、docke的文件系统ufw联合式文件系统,加-e 即使容器关闭,只要重启就会重新加载
    3、重启容器a,看看是否有ecshop,xcp
    建议:
     如果是公司使用建议自己构建镜像,对于关键数据用volume备份
      

  7.   

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

  8.   

    1、a 是直接从蜂巢镜像拉取下来的
    2、不太明白
    3、重启a、这两个数据库依然存在,不会消失 
    你启动b时候的命令是什么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 命令
      

  9.   


    我的镜像是网易蜂巢mysql镜像、地址如下:
    https://c.163.com/hub#/m/repository/?repoId=29551、并没有初始化、还存留我在a 的操作数据。
    2、有a操作记录日志
    3、有a的数据启动命令为:
    docker run -d --name mysql -p 3306:3306 b/mysql
    因为在a 的时候我就指定了root帐号、以及创建了我的数据库、所以我在b的时候就只运行不做其它参数操作
      

  10.   

    不太清楚别人对数据库做了哪些改动
    我的镜像是网易蜂巢mysql镜像、地址如下:
    https://c.163.com/hub#/m/repository/?repoId=29551、并没有初始化、还存留我在a 的操作数据。
    2、有a操作记录日志
    3、有a的数据启动命令为:
    docker run -d --name mysql -p 3306:3306 b/mysql
    因为在a 的时候我就指定了root帐号、以及创建了我的数据库、所以我在b的时候就只运行不做其它参数操作不太清楚别人对mysql进行了哪些改动,建议你自己构建镜像使用,提交镜像最好容器停止服务,可能带来一些问题
      

  11.   


    一般来说commit 了之后、就会把容器全部生成镜像啊,包括容器里面操作的数据,难道真的是我这源镜像有问题?为了避免错误、我停止了容器在操作的
      

  12.   


    一般来说commit 了之后、就会把容器全部生成镜像啊,包括容器里面操作的数据,难道真的是我这源镜像有问题?为了避免错误、我停止了容器在操作的我做了实验,查看mysql的存储位置/var/lib/mysql,中只存了MYSQL_DATABASE=shoe指定的数据库,
    也就是说其它的数据库没有持久化,可能是写在内存,或临时文件中,
    在启动b的时候会执行脚本,可能因为并没有持久化才会造成数据丢失
      

  13.   


    那是不是制作完了容器之后、就需要持久化,手动持久化吗?怎么操作的
    要持久化就是容器启动时指定MYSQL_DATABASE=shoe,只能有一个,如果要使用多个就自己构建镜像
      

  14.   

    mysql只是数据库管理软件,人家的理念就是一个容器运行一个数据库,就是一个database,只是没有限制好