[英]Unable to mount cifs filesystem in Docker container
我在Docker 17.06.0-ce上,我试图在一个容器中安装一个CIFS共享,只有一些运气。 如果我使用--privileged
,它可以工作,但这对我来说是不可取的。 我已经尝试使用--cap-add
以及此答案中的建议(甚至尝试使用--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 (e.g. man mount.cifs)
Docker中有什么变化需要 - 现在这些类型的坐骑--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
配置
$ sudo vi /etc/default/docker-volume-netshare
输入为单一设置
DKV_NETSHARE_OPTS="cifs --netrc=/root/"
然后
$ sudo vi /root/.netrc
为每个主机输入以下设置:
machine <host>
username <user>
password <password>
domain <domain>
请注意, <host>
必须是主机名或IP地址,后跟冒号(例如10.20.30.4:
将卷驱动程序作为systemd
服务启用
注意:如果您的操作系统不支持systemd
,则需要另一种将其安装为服务的方法。
$ sudo systemctl enable docker-volume-netshare
在docker run
和docker 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
停止和/或重新启动(因此在重新启动时),卷就会丢失。
得到帮助
$ 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中的docker-volume-netshare cifs --netrc=/root/ --verbose
)
$ dmesg | tail
$ tail -50 /var/log/docker-volume-netshare.log
资源
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.