0

我正在运行 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:没有这样的设备

任何帮助表示赞赏。

谢谢,托马斯

4

0 回答 0