我正在设置dovecot
作为docker容器。我想通过NFS在NAS上存储Maildir
。
我正在创建这样的docker卷:
docker volume create \
--driver local \
--opt type=nfs \
--opt o=addr=<ip>,rw \
--opt device=:/vmail \
vmail
在Dockerfile
,我有:
RUN useradd -m -p vmail -s /bin/false vmail
VOLUME /home/vmail
为了运行docker容器,我调用:
docker run \
-dit \
-p 993:993 \
--mount source=vmail,target=/home/vmail \
my_dovecot
但结果我得到:
docker: Error response from daemon: chown /var/lib/docker/volumes/vmail/_data: operation not permitted.
问题显然与我挂载NFS卷的方式有关,因为 - 如果我删除--mount
语句 - 它工作正常(但显然无法从NAS访问我的Maildir
数据)。我很确定这与dovecot
试图以Maildir
用户访问vmail
,并且该用户没有NFS共享权限这一事实有关 - 但即使给予每个人对NFS共享的写访问权也不做出改变。
我正在寻找任何建议,以便将这个NFS卷正确安装到我的docker容器中。
关心StHeine
与此同时,我发现了这个问题。解决这个问题,我不得不删除-m
命令中的useradd
,以防止它创建/home/vmail
目录:
RUN useradd -p vmail -s /bin/false vmail
VOLUME /home/vmail
因为如果存在,将卷安装到同一个地方,docker会尝试将现有的文件夹数据复制到卷中,并将chown
复制到卷的所有权。由于来自NAS的卷来自NFS的事实没有适当的uid,但nobody
- 和chown
失败。
我找到了对nocopy
的引用,以防止docker这样做,但我还没想到如何在docker create
语句中设置它。