从另一个容器在Docker中装载.cifs需要权限

从另一个容器在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引擎服务器版本

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

在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: