【发布时间】:2017-12-20 01:41:13
【问题描述】:
我在 Docker 17.06.0-ce 上,我正在尝试将 CIFS 共享挂载到容器中,只是运气不错。如果我使用--privileged,它可以工作,但这对我来说并不理想。我尝试过使用--cap-add 以及this answer 中的建议(即使尝试使用--cap-add ALL 也没有成功。
同样的 mount 命令在主机系统上也能正常工作。
这是我尝试过的一个简单的 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?还是我还缺少其他东西?
【问题讨论】:
-
为什么不把它挂载到宿主机中,并在一个卷中与容器共享呢?
-
如果它是一个静态容器,我通常会这样做,但是我将其作为 CI/CD 管道的一部分,并且可能连接到 100 多个不同的服务器,所以它需要动态的。我想我找到了一个使用 docker-volume-netshare 插件的解决方案,该插件支持动态安装主机。需要再测试一下。