Docker for Mac中Alpine Linux只读iso9660根文件系统如何挂载为可写overlay?
解决Docker for Mac虚拟机只读根文件系统的问题,安装plotnetcfg工具
嘿,我之前在黑客松里也碰到过一模一样的需求!Docker for Mac的LinuxKit虚拟机确实默认是只读的ISO根文件系统,但我们可以通过aufs叠加挂载的方式把它改成可写,顺利完成工具安装和网络拓扑生成。下面是一步步的操作指南:
步骤1:进入Docker虚拟机
你已经用对了进入虚拟机的命令,再确认一下:
docker run --rm -it --privileged --pid=host walkerlee/nsenter -t 1 -m -u -i -n sh
执行后你就进入了Docker背后的LinuxKit主机环境。
步骤2:用aufs将根目录转为可写
- 先创建一个临时目录作为可写层:
mkdir -p /tmp/rootfs-rw - 用aufs挂载,把原只读根目录作为底层,临时目录作为可写叠加层:
执行完这个命令后,你再检查挂载情况:mount -t aufs -o dirs=/tmp/rootfs-rw:/ none /mount | grep /,就会看到根目录已经变成aufs类型,支持写入了。
步骤3:安装plotnetcfg和依赖
因为是Alpine Linux环境,直接用apk包管理器操作:
apk update && apk add plotnetcfg graphviz
这样plotnetcfg和生成图表需要的Graphviz就都安装好了。
步骤4:生成网络拓扑并导出到Mac主机
为了方便把生成的dot文件拿到Mac上渲染,建议你重新进入虚拟机时挂载Mac本地目录:
# 先退出之前的nsenter容器,重新执行这个命令,把Mac的~/docker-output目录挂载到虚拟机的/output docker run --rm -it --privileged --pid=host -v ~/docker-output:/output walkerlee/nsenter -t 1 -m -u -i -n sh
然后在虚拟机里运行plotnetcfg,把结果写到挂载的目录:
plotnetcfg > /output/network.dot
回到Mac上,你就能在~/docker-output里找到network.dot文件,直接用Graphviz渲染成图片:
dot -Tpng ~/docker-output/network.dot -o ~/docker-output/network.png
注意事项
- 所有修改都是临时的:重启Docker for Mac后,虚拟机会重新从ISO启动,之前的可写层和安装的工具都会消失,完全适合黑客松这种临时场景。
- 如果aufs挂载失败,检查内核是否支持:可以用
cat /proc/filesystems | grep aufs确认,Docker for Mac的LinuxKit内核默认是开启aufs支持的。
内容的提问来源于stack exchange,提问作者Bryan Hunt
相关产品推荐
相关产品推荐

