问题1.docker run -it的方式进入mysql数据库后mysql -uroot -p报错:ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’ (2),但先使用-it的后台创建再用exec打开并不会报错。
    (find命令没有找到mysql.sock文件)(尝试解决时安装mysql-server后并没有找到mysql-sever相关文件)
    问题2:在创建新容器时挂载上一个mysql容器的volume后:docker run —volumes-from mysqldock -d mysql然后exec进入数据库报错ERROR 2002。

    参考文档:https://www.jianshu.com/p/530d00f97cbf

    image.png

    直接run进入mysql容器后进入数据库报错2002(HY000),查看报错后没有mysql service,mysql.sock和dip
    未解决!

    image.png
    先后台启用后exec进入docker未发现报错。(原理未知)

    image.png
    进入mysql数据库创建classics库

    image.png
    创建film1表格

    image.png
    对film1表格录入数据,保存,docker commit创建新容器

    image.png
    打开新容器后重新进入mysql,此处可见mysql密码和账号都未改变,继承了上一容器的数据。

    image.png
    进入mysql后classic数据库消失,film1表格消失。

    image.png
    docker inspect查看容器详细信息,在”Source”中可以查明,mysql数据库volume数据卷的存放目录,而此目录并不会被commit到新容器内同一目录下

    image.png
    验证volume信息
    It can be useful to commit a container’s file changes or settings into a new image.
    —docker hub

    解决思路:1.volume在创建镜像时直接挂载到新容器上
    2.mount命令拷贝旧容器的数据挂载到新容器上

    1:
    image.png
    直接挂载volume无法打开mysql(原因未知)(已解决,如下所示)
    问题解决:
    如果-v指定挂载了宿主机目录时,指定的目录在docker commit时并不会被打包(数据丢失),实际在-v操作时因Bind Mount机制做的是incode替换操作,将容器内部的实际操作转移到了宿主机相应目录下,而-v挂载目录是在namespace创建之后,chroot挂载之前,所以挂载事件只在容器内部可见,宿主机并不知道这个绑定的存在。而在docker commit时打包的是可读可写层,但数据实际存储在宿主机对应目录下,所以并不会被打包。
    2:
    image.png
    拷贝原容器中mysql的数据挂载到新容器上,登入

    image.png
    出现classics,成功
    **

    附:docker mysql安装vimimage.png

    image.png