Docker 容器到 NAS 存储

Sat*_*esh 2 storage containers docker

我正在尝试将存储卷安装到容器内部。就像我给了下面的命令的 linux

**mount 10.#.##.###:/nvol1 /tmp**
Run Code Online (Sandbox Code Playgroud)

这给出了“拒绝访问”错误,我已将容器和主机 IP 添加到存储中,以允许来自容器和主机服务器的流量。但是我无法在容器中安装存储卷?我错过了什么吗?我正在使用 Centos 操作系统。

编辑注意:我已经成功将存储挂载到Docker主机上,并在主机文件系统和容器之间进行了通信。然而,这个新的测试用例寻求直接在容器上而不是在 Docker 主机上安装存储卷

BMi*_*tch 6

如果不禁用 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
Run Code Online (Sandbox Code Playgroud)

编辑:要跳过该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
Run Code Online (Sandbox Code Playgroud)