这不是常见问题解答:“如何安装主机目录,以便它在容器中可见”,答案为docker run -v /host/path:/container/path
。
相反,专用容器可以在安装点中装载一些有趣的数据。如何使该安装点内的数据在主机中可见?
例如运行gluster/gluster-centos glusterfs映像时,容器具有显示和安装glusterfs数据的功能。我可以在主机中显示这些数据,所以也不必在主机中安装glusterfs代码吗?
我尝试docker run -v /host/path:/container/path
,然后从容器内部:
mkdir /container/path/mountpoint
mount -t glusterfs server:volume /container/path/mountpoint
在容器中,我可以在/container/path/mountpoint
下的glusterfs卷中看到数据,但是在主机上,/host/path/mountpoint
存在但为空。如何将容器/container/path/mountpoint
中的数据暴露给主机?
编辑:我发现我可以看到挂载点内的数据为:
containerPid=$(docker inspect -f '{{.State.Pid}}' containername)
sudo ls -l /proc/$containerPid/root/container/path/mountpoint
但是我希望有一些更优雅的东西...(而且不需要root即可查看数据)
答案 0 :(得分:0)
您正在寻找shared
挂载标志(有关bind mounts的更多信息,请执行以下操作:
docker run -v /host/path:/container/path:shared ...
例如,如果我在主机上运行此命令(我需要--privileged
才能使mount
运行):
# mkdir /tmp/foo
# docker run -it --rm --privileged -v /tmp/foo:/foo:shared alpine sh
然后在容器内:
container# mkdir /foo/mnt
container# mount -o bind /etc /foo/mnt
在主机上,我看到:
# ls /tmp/foo
alpine-release group issue motd passwd resolv.conf ssl
apk hostname logrotate.d mtab periodic securetty sysctl.conf
conf.d hosts modprobe.d network profile services sysctl.d
crontabs init.d modules opt profile.d shadow udhcpd.conf
fstab inittab modules-load.d os-release protocols shells
我认为这完全可以再现您的要求。