无法在Docker容器中挂载cifs文件系统

我在Docker 17.06.0-ce上,我试图在容器中挂载一个CIFS共享,只有一些运气。 如果我使用--privileged ,它可以工作,但是这不是我想要的。 我已经尝试使用--cap-add以及build议在这个答案 (即使尝试与 – --cap-add ALL没有成功。

相同的mount命令也可以在主机系统上正常工作。

这是我试过玩过的一个简单的docker文件

 FROM alpine:latest RUN apk add --no-cache cifs-utils 

运行许多不同的排列,所有结果如下:

Works: docker run --rm -it --privileged cifs-test /bin/sh

不起作用: docker run --rm -it --cap-add SYS_ADMIN --cap-add DAC_READ_SEARCH cifs-test /bin/sh

不起作用: docker run --rm -it --cap-add SYS_ADMIN --cap-add DAC_READ_SEARCH --cap-add NET_ADMIN cifs-test /bin/sh

不起作用: docker run --rm -it --cap-add ALL cifs-test /bin/sh

和命令:

mkdir /test && mount.cifs //myserver/testpath /test -o user=auser,password=somepass,domain=mydomain

以上每个run命令的结果除了第一个:

 mount error(13): Permission denied Refer to the mount.cifs(8) manual page (eg man mount.cifs) 

在Docker中有什么变化,现在需要 – 这些types的坐骑--privileged都有--privileged ? 还是有什么我失踪?

到目前为止,我开始使用docker-volume-netshare ,取得了很好的成功。 有一些小问题,如使用docker volume create不是持久的,但是看起来像这个卷驱动器是非常有用的。 一个优点是特殊的大写/特权模式是不必要的。 这里有一些关于如何使用它的提示。

安装(Ubuntu / Debian)

 $ curl -L -o /tmp/docker-volume-netshare_0.34_amd64.deb https://github.com/ContainX/docker-volume-netshare/releases/download/v0.34/docker-volume-netshare_0.34_amd64.deb $ sudo dpkg -i /tmp/docker-volume-netshare_0.34_amd64.deb $ rm /tmp/docker-volume-netshare_0.34_amd64.deb 

configuration

 $ sudo vi /etc/default/docker-volume-netshare 

作为单一设置进入

 DKV_NETSHARE_OPTS="cifs --netrc=/root/" 

然后

 $ sudo vi /root/.netrc 

每台主机input以下设置:

 machine <host> username <user> password <password> domain <domain> 

请注意, <host>必须是主机名或IP地址,后跟冒号(例如10.20.30.4:

将卷驱动程序作为systemd服务启用

注意:如果您的操作系统不支持systemd ,则另一种将其作为服务安装的方法是必要的。

 $ sudo systemctl enable docker-volume-netshare 

docker rundocker service create使用卷

 $ sudo docker run -it --rm --mount type=volume,volume-driver=cifs,source=<myvol>,destination=<absolute-path-in-container>,volume-opt=share=<ip>:/<share> ubuntu:zesty bash $ sudo docker service create --name <name> --mount type=volume,volume-driver=cifs,source=<myvol>,destination=<absolute-path-in-container>,volume-opt=share=<host>/<share> <image> 

显然,不需要在多个容器中使用相同的卷,因为这些卷只映射到一个cifs共享,而cifs共享则在安装它的容器之间共享。 如上所述,不要使用此卷驱动程序docker volume create docker-volume-netshare卷volume,因为一旦docker-volume-netshare停止和/或重新启动(因此重新启动),卷就会丢失。

得到帮助

 $ docker-volume-netshare --help $ docker-volume-netshare cifs --help 

日志

提示:在/etc/default/docker-volume-netshare使用DKV_NETSHARE_OPTS="cifs --netrc=/root/ --verbose"或停止服务并启动docker-volume-netshare cifs --netrc=/root/ --verbose在一个shell中)

 $ dmesg | tail $ tail -50 /var/log/docker-volume-netshare.log 

资源

  • github上
  • 项目