非Root用户从主机访问容器文件系统及挂载容器目录方案
如何将容器内的/home目录挂载到主机/test目录
首先要明确:Docker原生只支持将主机路径挂载到容器内,反过来直接挂载容器路径到主机并没有内置的方法。不过我们可以通过sshfs工具实现实时挂载,满足你无需root访问overlay文件系统、避免复制的需求,具体操作如下:
容器内配置SSH服务
- 假设你的容器ID或名称是
my-container,先进入容器:docker exec -it my-container /bin/bash - 以Debian/Ubuntu系容器为例,更新软件源并安装openssh-server:
apt update && apt install -y openssh-server - 为root用户设置密码(或创建普通用户,安全性更高):
passwd root - 启动SSH服务:
service ssh start注:如果是CentOS/RHEL系容器,安装命令为
yum install -y openssh-server,启动命令为systemctl start sshd
获取容器IP地址
- 在主机上执行以下命令,获取容器的IP:
记下输出的IP(比如docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' my-container172.17.0.2),后续挂载会用到。
主机上安装并挂载
- 安装sshfs工具(这一步仅需临时使用root权限执行一次,后续挂载无需root):
sudo apt install sshfs # 适用于Debian/Ubuntu # 或 sudo yum install sshfs # 适用于CentOS/RHEL - 创建主机上的挂载目录(如果还未存在):
mkdir -p /test - 执行挂载命令,将容器内的
/home挂载到主机的/test:
输入你刚才设置的容器root密码后,就能实时访问主机sshfs root@172.17.0.2:/home /test/test目录查看容器/home的内容了。
卸载挂载(可选)
- 如果需要取消挂载,执行:
fusermount -u /test
额外优化建议
- 为了避免每次挂载都输入密码,可以配置SSH密钥登录:在主机生成密钥对,将公钥复制到容器的
/root/.ssh/authorized_keys文件中,之后就能实现免密挂载。 - 这种方法全程无需直接操作Docker的overlay文件系统,完全通过Docker命令和sshfs工具实现,既符合你无需root访问overlay的要求,也避免了复制文件的繁琐流程。
内容的提问来源于stack exchange,提问作者WinterS
相关产品推荐
相关产品推荐

