当我使用docker -v 宿主机路径:容器内路径 进行挂载时,其中主机路径都是为空的目录文件。这时针对不同的镜像文件会出现两种不同的情况
1、对于mysql的镜像时,当空的主机路径 /home/mysql/data:/var/lib/mysql 映射容器中的mysql的数据时,docker可以将容器内的数据覆盖到主机目录上
2、对于kibana镜像,当空的主机路径/home/kibana/config:/usr/share/kibana/config 映射容器中kibana配置时,docker却是将宿主机上的空目录覆盖到容器中的路径上,导致启动失败。
1、问:为什么会出现这两种情况,是因为镜像创建dockerfile内容有相应配置,还是其他原因?
2、问:对于第二中有什么其他对应的解决方案吗?现在我解决的方式是先运行容器 将容器内的文件先复制出来,然后挂载。有没有方案是能在挂载时,解决将宿主机空目录覆盖到容器中?
mysql容器在启动之前,容器内的/var/lib/mysql其实就是空目录,在进行挂载和运行的时候,mysql的启动脚本
entrypoint.sh
会检测/var/lib/mysql
目录是否存在,如果不存在就会执行 init_database 的操作,只有在执行init_database 操作之后,文件才生成。具体可以看entrypoint.sh 的220行 364行。