我使用的是 Docker 17.06.0-ce,我正在尝试在容器中挂载 CIFS 共享,但运气不佳。如果我使用 --privileged
,它有效,但这对我来说并不理想。我尝试过使用 --cap-add
以及 this answer 中的建议(甚至尝试使用 --cap-add ALL
但没有成功。
相同的挂载命令在主机系统上也可以正常工作。
这是我尝试过的一个简单的 docker 文件
FROM alpine:latest
RUN apk add --no-cache cifs-utils
使用许多不同的排列运行,所有排列都具有以下相同的结果:
作品:
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
的更改现在一直在使用这些类型的坐骑吗?还是我还缺少其他东西?
最佳答案
我开始使用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
日志
提示:用于调试使用DKV_NETSHARE_OPTS="cifs --netrc=/root/ --verbose"
在/etc/default/docker-volume-netshare
或停止服务并启动docker-volume-netshare cifs --netrc=/root/ --verbose
在外壳中)
$ dmesg | tail
$ tail -50 /var/log/docker-volume-netshare.log
资源
关于docker - 无法在 Docker 容器中挂载 cifs 文件系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45111699/