我有一个安装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
答案 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。