簡體   English   中英

無法在Docker容器中掛載cifs文件系統

[英]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 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

日志

提示:對於調試,在/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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM