将Docker容器存储到NAS存储设备中

3

我正在尝试将存储卷挂载到容器内部。就像Linux一样,我给出了以下命令:

**mount 10.#.##.###:/nvol1 /tmp**

这会导致“访问被拒绝”的错误,我已将容器和主机IP添加到存储中,以允许来自容器和主机服务器的流量。但是我无法在容器中挂载存储卷?我是否漏掉了什么?我正在使用Centos操作系统。
编辑备注:我已成功将存储挂载到Docker主机上,并使主机文件系统与容器之间通信。然而,这个新的测试案例寻求直接在容器上挂载存储卷而不是在Docker主机上。
1个回答

7

如果不禁用Docker提供的隔离功能(否则未经信任的应用程序可能会挂载主机根文件系统并逃脱),则无法在容器内运行mount命令。 Docker通过从容器内的root用户中删除各种权限来防止此类情况发生。

对于NFS挂载,通常有两种方法之一将其作为卷装入容器中:

  1. 在主机上挂载NFS目录,并将主机目录映射到容器中。这样您就可以直接在主机上管理卷并在容器内进行管理。

  2. 将NFS目录直接作为卷直接装入容器中。

对于选项2,您可以使用以下内容定义卷:

$ docker volume create --driver local \
    --opt type=nfs \
    --opt o=addr=10.1.23.123,rw \
    --opt device=:/nvol1 \
    nvol1

$ docker run -v nvol1:/tmp your_image

编辑:如果要跳过docker volume create步骤,您可以使用--mount选项从运行命令中执行此操作:

$ docker run -it --rm \
  --mount type=volume,dst=/container/path,volume-driver=local,volume-opt=type=nfs,volume-opt=o=addr=192.168.1.1,volume-opt=device=:/host/path \
  foo

在 Docker 文件中添加给定格式后,在构建 bash-4.2# docker build 时会抛出错误。 正在将构建上下文发送到 Docker 守护程序 39.42 kB 步骤 1: DOCKER 未知指令:DOCKERbash-4.2# more Dockerfile docker volume create --driver local
--opt type=nfs
--opt o=addr=10.#.###.###:/xbbl7nvol1,rw
--opt device=:/tmp
nvol1
- Nilan
这些是Shell命令,而不是Dockerfile的条目。您无法在构建时执行此操作。请更新您的问题,准确说明您要做什么,您正在运行哪些命令以及使用哪些文件。 - BMitch
@Satte在你的问题中多次提到你正在尝试将卷挂载到容器中,这也是上面的答案描述的内容。但是你的评论问如何在构建时在Dockerfile中完成此操作以更新你的镜像。请确切说明你使用的命令和文件,并更新你的问题。请查看mcve - BMitch
我认为你提供的答案可以列举如下:
  1. 在Docker主机上创建卷
  2. 将卷挂载到存储
  3. 在容器内部挂载文件夹
我正在尝试的是:
  1. 直接将存储挂载到容器中,而不是在主机上进行挂载。 原因:因为如果我的容器从一个主机移动到另一个主机,挂载将无法工作。希望你明白我的问题。
- Nilan
有不同的方法可以做到这一点,但它们取决于您如何运行容器。如果没有您正在运行的命令和使用的文件,我无法提供更多帮助。 - BMitch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接