在 docker 容器内挂载 nfs 共享

新手上路,请多包涵

有谁知道如何使用 centos 基础映像在 docker 容器内挂载 nfs 共享?我试过这个命令:

 mount server:/dir /mount/point

并得到下一个错误:

mount.nfs: rpc.statd is not running but is required for remote locking.

mount.nfs: Either use '-o nolock' to keep locks local, or start statd.

mount.nfs: an incorrect mount option was specified

当我尝试将它与 -o nolock 选项一起使用时,错误是:

 mount.nfs: Operation not permitted

原文由 Anatoli 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.5k
2 个回答

从 docker 17.06 开始,您可以在运行时直接将 NFS 共享挂载到容器中,无需额外的能力

export NFS_VOL_NAME=mynfs
export NFS_LOCAL_MNT=/mnt/mynfs
export NFS_SERVER=my.nfs.server.com
export NFS_SHARE=/my/server/path
export NFS_OPTS=vers=4,soft

docker run --mount \
  "src=$NFS_VOL_NAME,dst=$NFS_LOCAL_MNT,volume-opt=device=:$NFS_SHARE,\"volume-opt=o=addr=$NFS_SERVER,$NFS_OPTS\",type=volume,volume-driver=local,volume-opt=type=nfs" \
  busybox ls $NFS_LOCAL_MNT

或者,您可以在容器之前创建卷:

 docker volume create \
  --driver local \
  --opt type=nfs \
  --opt o=addr=$NFS_SERVER,$NFS_OPTS \
  --opt device=:$NFS_SHARE \
  $NFS_VOL_NAME

docker run --rm -v $NFS_VOL_NAME:$NFS_LOCAL_MNT busybox ls $NFS_LOCAL_MNT

原文由 ThiagoAlves 发布,翻译遵循 CC BY-SA 4.0 许可协议

要使用 mount ,您需要 CAP_SYS_ADMIN 功能,Docker 在创建容器时会删除该功能。

有几种解决方案:

  1. 使用 --cap-add sys_admin 标志启动容器。这会导致 Docker 保留 CAP_SYS_ADMIN 功能,这应该允许您从容器内挂载 NFS 共享。这可能是一个安全问题;不要在不受信任的容器中执行此操作。 [此答案的先前版本建议使用 --privileged=true 保留 所有 功能,感谢@earcam 建议使用 --cap-add 代替]。
  2. 在主机上挂载 NFS 共享并将其作为主机卷传递到容器中:
    you@host > mount server:/dir /path/to/mount/point
   you@host > docker run -v /path/to/mount/point:/path/to/mount/point

  1. 使用 Docker 卷插件(如 Netshare 插件)将 NFS 共享直接挂载为容器卷:
    you@host > docker run \
     --volume-driver=nfs \
     -v server/dir:/path/to/mount/point \
     centos

原文由 helmbert 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题