簡體   English   中英

來自另一個容器的 Docker 中的 mount.cifs 需要特權

[英]mount.cifs in Docker from another container requires privilege

我的用例是一個轉碼農場,它從 Samba 共享讀取輸入並將其寫入另一個共享。

在 Docker 中使用mount.cifs需要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-通用 Docker 19.03.6 容器 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:

我的問題,

  1. 為什么在同一個 Docker 主機上運行時需要特權?
  2. 我可以讓它更嚴格嗎(只給它需要的東西)?

您的用例中是否有任何東西需要在容器內完成安裝? 讓 docker 處理 mount 怎么樣?

在您的示例中,您正在啟動一個容器以公開 samba 共享,並啟動另一個容器以從中讀取。 如何簡單地將兩個容器綁定到同一個 docker 卷(即在 docker-compose 的頂層定義一個命名卷,並在兩個服務中使用它)? 這是在容器之間共享掛載的常用方法,並且不需要特權或開放端口。 例如,請參閱此 SO 答案

如果這個“共享文件夾”必須是 CIFS(因為在現實生活中它不是 samba 容器,而是 Windows 服務器?),您可以使用指向支持 CIFS 的docker 卷插件volume-driver參數定義卷,例如這個這個另一個 您的“mounter”容器將從已經安裝的 CIFS 共享開始。 不需要從容器內部安裝,因此不需要特權容器或擴展帽。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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