使用docker-compose运行拒绝cifs权限但不使用docker-compose exec

时间:2018-05-10 02:20:16

标签: docker docker-compose cifs

我有一个安装cifs共享的脚本。

当我运行docker-compose run www ./myscript mount return

mount error(13): Permission denied Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)

当我运行docker-compose up -d www && docker-compose exec www ./my-script它可以挂载cifs共享。

我的docker-compose.yml看起来像

version: "3"
services:
  www:
    build:
      context: .
      dockerfile: ./www.dockerfile
    environment:
      - SAMBA_USER
      - SAMBA_PASS
      - SAMBA_PATH
      - SAMBA_MASK
    volumes:
      - ./www:/app
    cap_add:
      - SYS_ADMIN
      - DAC_READ_SEARCH
    tty: true
    stdin_open: true
    command: tail -f /dev/null # hang container so I can exec in

我的www.dockerfile看起来像

FROM ruby:2.3.3
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
RUN apt install -y cifs-utils
RUN mkdir /app
WORKDIR /app
COPY ./www /app

www / myscript看起来像

#!/bin/bash
mkdir -p /mnt/data
mount -t cifs -o username=$SAMBA_USER,password=$SAMBA_PASS "$SAMBA_PATH" /mnt/data
ls /mnt/data

Docker版本18.03.0-ce,build 0520e24

docker-compose版本1.20.1,构建5d8c71b

我真的希望./myscript作为docker-compose命令运行,但它也会返回权限被拒绝。有线索吗? TIA

2 个答案:

答案 0 :(得分:2)

在我的情况下,除了#include<Windows.h> #include<d2d1.h> LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { if (uMsg == WM_DESTROY) { PostQuitMessage(0); return 0; DefWindowProc(hwnd, uMsg, wParam, lParam); } } int WINAPI wWinMain(HINSTANCE hinstance, HINSTANCE prevInstance, LPWSTR cmd, int nCmdShow) { WNDCLASSEX windowclass; ZeroMemory(&windowclass, sizeof(WNDCLASSEX)); windowclass.cbSize = sizeof(WNDCLASSEX); windowclass.hbrBackground = (HBRUSH)COLOR_BACKGROUND; windowclass.hInstance = hinstance; windowclass.lpfnWndProc = WindowProc; windowclass.lpszClassName = "CrystalWindow"; windowclass.style = CS_HREDRAW | CS_VREDRAW; RegisterClassEx(&windowclass); HWND windowHandle = CreateWindow("CrystalWindow", "Crystal Engine", WS_OVERLAPPEDWINDOW,100, 100, 800, 600, NULL, NULL, hinstance, 0); if (!windowHandle) { return -1; } ShowWindow(windowHandle,nCmdShow); MSG message; while (GetMessage(&message, NULL, 0, 0)) { DispatchMessage(&message); } return 0; } 之外,我还必须禁用(最好编写自己的模板)apparmor模板,因为默认的docker apparmor模板具有--cap-add SYS_ADMIN --cap-add DAC_READ_SEARCH指令。

例如

deny mount

答案 1 :(得分:0)

使用&#39;特权:true&#39;在我的撰写文件工作,但感到邪恶。

我在这个列表https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities中尝试了一堆随机功能,但无法找到任何可行的组合(不具备系统性)。

最终决定不使用samba。