将单个文件从 NFS docker 卷挂载到容器中

dal*_*ler 3 nfs docker docker-compose

示例(为简洁起见,省略了许多选项):

version: "3"
volumes:
  traefik:
    driver: local
    driver_opts:
      type: nfs
      o: "addr=192.168.1.100,soft,rw,nfsvers=4,async"
      device: ":/volume/docker/traefik"
services:
  traefik:
    volumes:
      - traefik/traefik.toml:/traefik.toml
Run Code Online (Sandbox Code Playgroud)

由于没有具有该名称的卷,这traefik/traefik.toml意味着卷名必须是文件的完整路径(即您不能将路径附加到卷名),因此会出现错误?

尝试设置device: ":/volume/docker/traefik/traefik.toml"只会返回not a directory错误。

有没有办法获取单个文件并将其安装到容器中?

BMi*_*tch 5

您无法在命名卷中装载文件或子目录,源是命名卷或主机路径。NFS 本身以及您在 Linux 中挂载的大多数文件系统都要求您挂载整个文件系统,而不是单个文件,当您深入到 inode 级别时,这通常是一件非常好的事情。

我能想到的剩余选项是将整个目录安装在容器内的其他位置,并符号链接到您想要的文件。或者通过NFS将目录挂载到主机上并对特定文件进行主机挂载(绑定挂载)。

然而,考虑到您提供的示例,使用 docker 配置将是我的理想解决方案,完全删除 NFS 挂载,并获取自动分发到运行容器的任何节点的文件的只读副本。

有关配置的更多详细信息:https ://docs.docker.com/engine/swarm/configs/