我正在运行 Windows 10、Docker 引擎 20.10.8 社区、WSL2 Ubuntu 20.04.3 LTS。我正在使用 Docker Compose 启动一些服务,主要是我从 docker-hub 获得的图像并且不修改,只需在它们运行后进行配置。我有 2 个 NFS 共享,我想将它们作为联合卷提供给这些服务。我不需要安装在 Windows 级别的 nfs 共享。我构建了一个 Dockerfile 和映像,用于挂载共享并使用 autofs 和在 Dockerfile 中运行的 startup.sh 脚本启动 union-fs 挂载。
如何将这些安装在该自定义容器中的已安装目录作为卷共享到我的 docker-compose.yml 中的其他容器?
自定义挂载容器的 Dockerfile:
\# syntax=docker/dockerfile:1
FROM ubuntu:20.04
RUN apt-get -y update
RUN apt-get install -y systemd autofs nfs-common netbase unionfs-fuse
ENTRYPOINT ["/config/startup.sh"]
启动文件:startup.sh
\#!/bin/bash
cp /config/auto.* /etc
[ ! -d "/nfs" ] && echo "Directory /nfs does not exist, making one"
[ ! -d "/nfs" ] && mkdir /nfs
rpcbind
service autofs restart
\#check if it worked
ls /nfs/auto/Elements && \
ls /nfs/auto/Volume_Originals && \
ls /misc/Media_union
echo "startup.sh done -3"
tail -f /dev/null
ps:容器需要以特权运行才能挂载工作。
另一个想法是将 NFS 挂载定义为顶层的卷。overlay2 存储驱动程序支持 nfs。所以 nfs 卷工作正常并且可以与服务共享。但是 unionfs 卷不起作用。overlay2 是否有类似 unionfs 的东西?如果我尝试这个,Docker 会抱怨:
volumes:
nfsElementsMedia:
driver: local
driver_opts:
type: nfs
o: addr=192.168.1.74,rw,timeo=100,noatime,nolock
device: ":/nfs/Elements/Media"
nfsVolume_OriginalsMedia:
driver: local
driver_opts:
type: nfs
o: addr=192.168.1.74,rw,timeo=100,noatime,nolock
device: ":/nfs/Volume_Originals/Media"
unionMedia_union:
driver: local
driver_opts:
type: unionfs
o: cow,max_files=32768,use_ino,suid,dev,allow_other,hard_remove,nonempty,rw,noatime
device: "nfsElementsMedia=RW:nfsVolume_OriginalsMedia=RO"
错误:安装卷'/var/lib/docker/volumes/docker_unionMedia_union/_data'时出错:无法安装本地卷:mount nfsElementsMedia=RW:nfsVolume_OriginalsMedia=RO:/var/lib/docker/volumes/docker_unionMedia_union/_data,标志:0x400,数据:cow,max_files=32768,use_ino,allow_other,hard_remove,nonempty:没有这样的设备
任何帮助表示赞赏。
谢谢,托马斯