从另一个容器在Docker中装载.cifs需要权限
我的用例是一个代码转换场,它从Samba共享读取输入并将其写入另一个共享 在Docker中使用从另一个容器在Docker中装载.cifs需要权限,docker,samba,Docker,Samba,我的用例是一个代码转换场,它从Samba共享读取输入并将其写入另一个共享 在Docker中使用mount.cifs需要SYS\u ADMIN和DAC\u READ\u SEARCH功能。我可以使用两台主机,在一台主机上运行smbd,并在另一台主机上装载其共享。(smbd和装载都在容器中运行,只是在不同的主机中。) 但是,我不能使用相同的mount命令,在运行smbd的容器的主机上装载Samba共享 编辑:它在Docker桌面上工作,但在Linux主机上失败。(使用相同的docker引擎服务器版本
mount.cifs
需要SYS\u ADMIN
和DAC\u READ\u SEARCH
功能。我可以使用两台主机,在一台主机上运行smbd
,并在另一台主机上装载其共享。(smbd和装载都在容器中运行,只是在不同的主机中。)
但是,我不能使用相同的mount
命令,在运行smbd
的容器的主机上装载Samba共享
编辑:它在Docker桌面上工作,但在Linux主机上失败。(使用相同的docker引擎服务器版本)
TL;除非我授予以下Docker Compose特权,否则它将失败
环境:在Mac Docker上工作,不在裸机Linux上工作(Ubuntu 18.04.4 4.15.0-91-generic Docker 19.03.8 containerd 1.2.13),不在Hyper-V虚拟化Linux上工作(Ubuntu 19.04 5.0.0-38-generic Docker 19.03.6 containerd 1.2.13)
我的问题,
为什么在同一Docker主机上运行时需要特权
我能把它限制得更严格些吗(只给它需要的东西)
您的用例中是否有要求在容器内完成安装的内容?让docker来处理坐骑怎么样
在您的示例中,您将启动一个容器以公开samba共享,并启动另一个容器以从中读取。简单地将两个容器绑定到同一个docker卷(即,在docker compose的顶层定义一个命名卷,并在两个服务中使用它)怎么样?这是在容器之间共享装载的常用方法,不需要特权或开放端口。例如,见
如果此“共享文件夹”必须是CIFS(因为在现实生活中它不是samba容器,而是Windows服务器?),则可以使用卷驱动程序
参数定义卷,该参数指向支持CIFS的,例如或。您的“装入器”容器将以已装入的CIFS共享开始。不需要从容器内部装载,因此不需要特权容器或扩展CAP。刚刚意识到downvoter可能认为这属于ServerFault。隐马尔可夫模型。。应该吗?我希望通过容器编排软件来编排。但我愿意使用卷驱动程序,因为微软有K8s的SMB插件。它在Docker for Mac和Windows中工作,但不是裸机Ubuntu服务器,我想我只是想知道为什么。不过谢谢你的建议:)
version: '3.4'
services:
samba:
image: dperson/samba
environment:
TZ: 'EST5EDT'
networks:
- default
ports:
- "137/udp"
- "138/udp"
- "139/tcp"
- "445/tcp"
tmpfs:
- /tmp
restart: unless-stopped
stdin_open: true
tty: true
volumes:
- /samba-data
command: '/bin/bash -c "touch /samba-data/file.txt && samba.sh -s \"data;/samba-data\" -u \"bob;bob\" -p"'
mounter:
image: ubuntu
command: '/bin/bash -c "apt update && apt install -y cifs-utils && mkdir /samba-data && mount -v -o username=bob,password=bob,vers=3.0,ro,port=445 //samba/data /samba-data"'
tty: true
# privileged: true
cap_add:
- SYS_ADMIN
- DAC_READ_SEARCH
networks:
default: