簡體   English   中英

使用 docker-compose 在 docker 容器中安裝 Cifs

[英]Cifs mount in docker container with docker-compose

我想將目錄 cif 掛載到 docker-container 中。 由於有解決方案,我嘗試了 --privileged 標志並設置了所需的功能:

docker-compose.yaml:

version: '2.0'
services:
  mounttest:
    image: test

    privileged: true
    cap_add:
      - SYS_ADMIN
      - DAC_READ_SEARCH
    
    restart: unless-stopped
    container_name: test
    mem_limit: 500m
    build:
      context: .
      dockerfile: Dockerfile
    volumes:
      - .:/apps/docker-test/

Dockerfile:

FROM ubuntu:18.04

ADD . /apps/docker-test/

# APT-GET
RUN apt-get update && apt-get install -y \
    sudo \
    cifs-utils

# CHMOD SHELL SCRIPTS
RUN chmod 0755 /apps/docker-test/run.sh
RUN chmod 0755 /apps/docker-test/build.sh

RUN /apps/docker-test/build.sh
CMD bash /apps/docker-test/run.sh

構建.sh:

mkdir -p /test_folder
echo "Mount"
sudo mount -t cifs -o username=XXX,password=XXX,workgroup=XX //server/adress$ /test_folder

run.sh 啟動一個 python 腳本

這不起作用,而是:

docker-compose build

給我錯誤:

Unable to apply new capability set

我發現的所有解決方案都只提到了設置的特權標志或功能。 任何人都可以幫忙嗎?

發生此錯誤是因為您嘗試在build步驟中安裝設備。 在這一點上,這些功能不可用於構建容器,它似乎是作為一個標志推出,用於在構建套件中禁用安全性,而不是在構建時啟用自定義功能。

通常的做法是在開始構建過程時准備好 CIFS 掛載,因為它不會暴露任何身份驗證、設備或掛載點,而且 docker 更容易處理更改並對它們做出反應(因為構建過程努力在構建之前緩存所有內容)。

如果你仍然想這樣做,你需要一些額外的步驟來啟用來自buildkitddocker buildx的不安全標志:

請注意,截至今天 (2020-09-09),支持仍處於試驗階段,可能會發生不可預見的后果。

  1. 確保您使用的是 docker 19.03 或更高版本。
  2. 通過在~/.docker/config.json添加密鑰"experimental":"enabled"來啟用實驗性功能
  3. 創建並使用啟用了security.insecure權利的構建器:
docker buildx create --driver docker-container --name local \
      --buildkitd-flags '--allow-insecure-entitlement security.insecure' \
      --use
  1. 通過在第一行之前添加來更改您的Dockerfile以使用實驗性語法:
# syntax = docker/dockerfile:experimental
  1. 更改 Dockerfile 指令,使其在沒有安全約束的情況下運行代碼:
RUN --security=insecure /apps/docker-test/build.sh
  1. 使用 BuildKit 和--allow security.insecure標志構建您的 docker 鏡像:
docker buildx build --allow security.insecure .

這樣你的構建將能夠打破安全限制。 我必須重申,出於以下幾個原因,這不是推薦的做法:

  • 它將公開其他圖像的構建步驟以升級該權限漏洞。
  • 構建器無法正確緩存該層,因為它使用了不安全的功能。

記住這一點並快樂安裝:)

我找到的答案是將 mount 命令放入 run.sh 文件中。 由於 Dockerfile 中的命令(或 CMD)僅在運行時執行

docker-compose up

只有在預先完成的構建已經完成后才會執行安裝。

因此,在啟動python腳本之前,先執行mount命令。 就我而言,這僅適用於將特權標志設置為 true 的情況。

暫無
暫無

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

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