docker存储-目录挂载

大纲:

docker目录挂载:

为啥要目录挂载:

对一个容器进行启动修改后,删除该容器再重启一个相同容器,以前修改内容丢失,第2个原因是容器内部为了保持轻量很多vim等命令工具没有,即即使容器内部有一套自己的文件系统也很难管理

举例如下:

要修改docker容器nginx容器的默认首页需要使用docker exec命令进入docker容器内部再使用echo命令修改/usr/share/nginx/html页面,比较麻烦,并且docker容器内部有自己的文件系统,所以容器内部的数据都存在容器内,当把已启动且运行过的nginx容器删除,然后再重新启动一个nginx容器,则开始在第一个nginx容器中修改的nginx首页等数据就会丢失

模拟过程:

后台启动nginx容器+修改nginx容器内部默认页内容:

如下在浏览器中用80端口访问新启动的nginx容器,访问的是默认的nginx首页,docker exec it 容器id前3位 bash即进入该容器内部bash页面,然后cd定位到nginx容器的默认页位置,再echo修改默认页内容,具体的nginx容器的默认页位置要去docker nginx镜像官方docker hub去查

强制删除容器+重启新容器,发现修改内容丢失(看最后一张图):

啥是目录挂载:

容器内部的文件跟主机上的文件做了映射,容器内部文件修改则对应主机文件修改,主机文件修改则容器内部对应文件同步也做修改

实现目录挂载:

在容器启动时加-v命令,-v 主机文件目录地址:容器内部文件目录地址,实现主机和容器文件目录映射(注意是文件目录地址而不是具体的文件地址【也可以直接写文件地址,就是文件地址太单一了,不如文件目录可容纳的文件多,推荐写文件目录】,如果要做映射再在主机下添加容器内部该文件目录下的文件即可,比如容器内部该目录下a.html,那主机要做文件映射,只需要在-v映射的目录下添加a.html文件,此时浏览器访问容器内部文件直接访问主机上的a.html文件,则要修改容器内部a.html文件内容直接修改主机上的a.html文件即可)

修改主机文件映射容器内部文件:

docker run -d -p 80:80 -v /app/nghtml:/usr/share/nginx/html --name app01 nginx:用官方nginx最新镜像启动叫app01的nginx容器,端口映射为主机上的80对应容器内部的80端口,文件目录映射为主机上的/app/nghtml目录下的文件对应容器内的/usr/share/nginx/html目录下的文件

注意:开始启动后马上在浏览器访问nginx,此时nginx首页访问显示403,因为用了-v文件目录映射后,此时访问容器走的文件目录路径为映射好的主机文件目录路径而不是容器内部的/usr/share/nginx/html目录,主机文件目录/app/nghtml下并没有index.html文件,所以nginx首页访问失败

修改主机映射目录下默认页内容再在浏览器访问nginx首页,显示访问成功且内容为修改主机下的默认页内容

删除执行-v命令后的容器再重启一个nginx新容器,浏览器再访问:

发现nginx容器首页依然为主机上的/app/nghtml文件目录下的index.html内容,即只要主机上的映射文件不变,对容器先前的修改操作就可应用到下一个新启动的容器中

修改容器内部文件映射到主机文件:

docker常用命令:

打印出所有容器:docker ps -a

打印出所有容器id:docker ps -aq

具体在使用命令前可以用docker --help来确定一下

批量强制删除容器(使用强制是因为容器还是运行状态,如果不使用强制删删不了,得先停止容器才能删):docker rm -f $(docker ps -aq) -f强制删除的容器id为docker ps -aq查询出来的所有容器id

写的好啰嗦。。。。。。。未完待续。。。。。。。。

相关推荐
Java后端的Ai之路3 分钟前
Linux端口进程查找与终止教程
linux·运维·服务器
busy dog~乌鸦~33 分钟前
【THM-题目答案】:Web Fundamentals-How The Web Works-DNS in Detail: Domain Hierarchy
运维·web安全·网络安全·系统安全
mounter6252 小时前
深度解析:Linux 内核为何要移除“直接映射” (Direct Map)?
linux·运维·服务器·security·linux kernel·direct mem map
AC赳赳老秦2 小时前
HR必备:OpenClaw批量筛选简历、发送面试通知,优化招聘流程
运维·人工智能·python·eclipse·github·deepseek·openclaw
NineData2 小时前
NineData亮相香港国际创科展InnoEX 2026,以AI加速布局全球市场
运维·后端
another heaven3 小时前
【Docker/虚拟机 深度对比Docker与虚拟机:原理、区别与最佳使用场景】
运维·docker·容器
带娃的IT创业者3 小时前
零停机迁移:如何将服务器成本从 $1432 降至 $233
运维·服务器·网络·成本优化·服务器迁移·零停机·hetzner
独自归家的兔3 小时前
2026年4月16日 Ubuntu系统 Docker 的安装与配置
运维·docker·容器
舒一笑3 小时前
Docker 离线镜像导入后变成 <none>:<none>?一文讲透原因、排查与正确打包姿势
后端·docker·容器
福老板的生意经4 小时前
从成本失控到ROI翻倍:企业数字化营销投放的落地路径与工具选型指南
大数据·运维·人工智能