Docker实践(21) – 使用sshfs挂载远程volume

我们已经讨论过如何挂载本地文件,不过很快我们就会遇到如何挂载远程文件系统的问题了。例如可能你想共享远程服务器上的数据库并把它当作本地数据库使用。
虽然理论上可以设置一个NFS服务器并通过在你服务器挂载目录访问远程文件,不过有一种对于大多数用户快速简单的方法,此方法不需要在服务器端安装任何软件(只需要SSH)。

设置sshfs需要root权限,并且需要安装FUSE(Linux的“用户空间文件系统”内核模块)。你可以通过执行ls /dev/fuse来判断系统是否已经安装有。

问题

你想找到一个不需要配置服务器端的方法来挂载远程的文件系统。

解决方法

使用sshfs来挂载远程文件系统

讨论

sshfs通过使用FUSE内核模块提供的文件系统标准接口和SSH访问远程文件系统,所有的通信使用SSH进行。SSHFS还提供了各种幕后功能(例如远程文件预读),以让我们觉得是在操作本地文件。下图说明它是如何工作的。

我们现在来做下试验。首先在你主机运行一个带–privileged参数的容器:

  1. $ docker run -t -i --privileged debian /bin/bash

然后当它启动后,在容器内部运行apt-get update && apt-get install sshfs安装SSHFS。
当SSHFS安装完成后,按如何登录远程主机:

  1. $ LOCALPATH=/path/to/local/directory
  2. $ mkdir $LOCALPATH
  3. $ sshfs user@host:/path/to/remote/directory $LOCALPATH

现在你应该能通过本地的$LOCALPATH目录看到远程主机的目录内容了。
不需要时可以通过fusermount命令来取消挂载:

  1. fusermount -u /path/to/local/directory
标签:DockerSSH 发布于:2019-11-20 15:32:20