无法在Docker容器

时间:2017-07-14 21:15:01

标签: docker cifs

我在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这些类型的坐骑吗?或者还有其他我想念的东西?

1 个答案:

答案 0 :(得分:1)

到目前为止,我开始使用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 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停止和/或重新启动(因此在重新启动时),卷就会丢失。

获取帮助

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

<强>日志

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

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

<强>资源