gpt4 book ai didi

docker - 来自另一个容器的 Docker 中的 mount.cifs 需要特权

转载 作者:行者123 更新时间:2023-12-02 19:00:33 24 4
gpt4 key购买 nike

我的用例是一个转码农场,它从 Samba 共享读取输入并将其写入另一个。

使用 mount.cifs在 Docker 中需要 SYS_ADMINDAC_READ_SEARCH能力。我可以使用两台主机并运行 smbd在一台主机上,并将其共享挂载到另一台主机上。 (smbdmount 都在容器内运行,只是在不同的主机上。)

但是,我不能,使用相同的 mount命令,将 Samba 共享挂载到正在运行的容器的主机上 smbd .

编辑:它适用于 Docker 桌面,但在 Linux 主机中失败。 (使用相同的docker引擎服务器版本)

TL;DR 以下 Docker Compose 失败,除非我授予它特权访问权限。

环境:在 Docker for Mac 上工作,不在裸机 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)

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:

我的问题,
  • 为什么在同一个 Docker 主机上运行时需要特权?
  • 我可以使其更具限制性(仅提供所需的内容)吗?
  • 最佳答案

    您的用例中有什么需要在容器内完成安装的吗?让 docker 处理挂载怎么样?

    在您的示例中,您正在启动一个容器以公开 samba 共享,并启动另一个容器以从中读取。如何简单地将两个容器绑定(bind)到同一个 docker 卷(即在 docker-compose 的顶层定义一个命名卷,并在两个服务中使用它)?这是在容器之间共享挂载的常用方式,并且不需要特权或开放端口。见 this SO answer例如。

    如果这个“共享文件夹”必须是 CIFS(因为在现实生活中它不是 samba 容器,而是 Windows 服务器?),您可以使用 volume-driver 定义卷。指向 docker volume plugin 的参数支持CIFS,如this onethis other one .您的“安装程序”容器将从已安装的 CIFS 共享开始。无需从容器内部安装,因此无需特权容器或扩展帽。

    关于docker - 来自另一个容器的 Docker 中的 mount.cifs 需要特权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60788240/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com