将 NFS docker 卷中的单个文件装载到容器中
Mounting a single file from an NFS docker volume into a container
示例(为简洁起见省略了许多选项):
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
这个错误是因为没有名称为 traefik/traefik.toml
的卷,这意味着卷名必须是文件的完整路径(即您不能将路径附加到卷名)?
试图设置 device: ":/volume/docker/traefik/traefik.toml"
只是 returns 一个 not a directory
错误。
有没有办法将单个文件挂载到容器中?
您不能在命名卷内装载文件或子目录,源是命名卷或主机路径。 NFS 本身以及您在 Linux 中挂载的大多数文件系统都要求您挂载整个文件系统,而不是单个文件,当您深入到 inode 级别时,这通常是一件非常好的事情。
我能想到的剩余选项是将整个目录挂载到容器内的其他位置,并符号链接到您想要的文件。或者将NFS目录挂载到主机上,然后做一个主机挂载(bind mount)到一个特定的文件。
然而,考虑到您提供的示例,使用 docker 配置将是我理想的解决方案,完全删除 NFS 挂载,并获取文件的只读副本,该副本将自动分发到 运行容器。
有关配置的更多详细信息:https://docs.docker.com/engine/swarm/configs/
我相信我找到了问题所在!
错误:
volumes:
- traefik/traefik.toml:/traefik.toml
正确:
volumes:
- /traefik/traefik.toml:/traefik.toml
卷以“/”开头
示例(为简洁起见省略了许多选项):
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
这个错误是因为没有名称为 traefik/traefik.toml
的卷,这意味着卷名必须是文件的完整路径(即您不能将路径附加到卷名)?
试图设置 device: ":/volume/docker/traefik/traefik.toml"
只是 returns 一个 not a directory
错误。
有没有办法将单个文件挂载到容器中?
您不能在命名卷内装载文件或子目录,源是命名卷或主机路径。 NFS 本身以及您在 Linux 中挂载的大多数文件系统都要求您挂载整个文件系统,而不是单个文件,当您深入到 inode 级别时,这通常是一件非常好的事情。
我能想到的剩余选项是将整个目录挂载到容器内的其他位置,并符号链接到您想要的文件。或者将NFS目录挂载到主机上,然后做一个主机挂载(bind mount)到一个特定的文件。
然而,考虑到您提供的示例,使用 docker 配置将是我理想的解决方案,完全删除 NFS 挂载,并获取文件的只读副本,该副本将自动分发到 运行容器。
有关配置的更多详细信息:https://docs.docker.com/engine/swarm/configs/
我相信我找到了问题所在!
错误:
volumes:
- traefik/traefik.toml:/traefik.toml
正确:
volumes:
- /traefik/traefik.toml:/traefik.toml
卷以“/”开头