Docker卷NFS uid
我正在设立dovecot
作为docker集装箱。 我想在NAS上通过NFS存储Maildir
。
我正在创build像这样的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
尝试作为vmail
用户访问Maildir
并且该用户没有NFS共享权限的事实相关的 – 但是即使每个人都可以在NFS共享上写入访问权限做出改变。
我正在寻找任何build议,让这个NFS卷正确地装入我的docker集装箱。
问候StHeine
同时我发现了这个问题。 要解决这个问题,我不得不删除useradd
命令中的-m
,以防止它创build/home/vmail
目录:
RUN useradd -p vmail -s /bin/false vmail VOLUME /home/vmail
因为如果存在的话,将卷挂载到同一个地方,docker会尝试将现有的文件夹数据复制到卷中,并将其chown
到卷的所有权。 由于从NAS通过NFS来的卷是没有适当的用户名,但nobody
– 和chown
失败。
我发现引用了nocopy
来防止nocopy
这样做,但是我还没有想到如何在docker create
语句中设置它。