Docker卷NFS uid

时间:2017-12-18 19:25:09

标签: docker nfs docker-volume dovecot

我正在设置dovecot作为泊坞窗容器。我想通过NFS将Maildir存储在NAS上。

我正在创建这样的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语句 - 它可以正常工作(但显然无法访问我的Maildir数据NAS)。 我非常确定这与dovecot尝试访问Maildir vmail用户的事实有关,并且该用户没有权限NFS共享 - 但即使给予每个人对NFS共享的访问权限也没有什么区别。

我正在寻找任何建议,以便将此NFS卷正确安装到我的docker容器中。

此致   StHeine

1 个答案:

答案 0 :(得分:0)

与此同时我发现了这个问题。 为了解决这个问题,我必须删除-m命令中的useradd以防止它创建/home/vmail目录:

RUN useradd -p vmail -s /bin/false vmail
VOLUME /home/vmail

因为如果存在,将卷安装到同一位置,docker会尝试将现有文件夹数据复制到卷中,并chown将此卷复制到卷的所有权。由于来自NAS的卷来自NAS,因此没有正确的uid,但nobody - 和chown失败。

我找到了nocopy的引用,以阻止docker这样做,但我还没想到如何在docker create语句中设置它。