首页
/ dockur/windows 的 Samba 共享文件夹怎么设为只读?

dockur/windows 的 Samba 共享文件夹怎么设为只读?

2026-09-08 18:25:01作者:昌雅子Ethen

dockur/windows 容器默认开启 Samba 文件共享:宿主机上 bind mount 到 /shared 的目录,会以桌面 Shared 文件夹和 Z: 盘的形式出现在 Windows 客户机里,用来在宿主机与容器内的 Windows 之间交换文件。如果 Windows 端只允许读取、不允许改动宿主机文件,可以在 compose 文件中加一个环境变量 SAMBA_READONLY。这篇文章说明如何开启只读模式、配置会在容器内如何生效,以及相关的边界条件。资料来自 readme.mddocs/environment.mdsrc/samba.sh

共享文件夹是如何建立的

先确认你的共享方式符合文档描述的路径,这是只读设置生效的前提:

  1. 在 compose 文件中把宿主机目录 bind mount 到容器的 /shared,例如:

    volumes:
      - ./example:/shared
    

    文档说明 ./example 是示例路径,需替换为你实际要共享的宿主机文件夹。

  2. 安装完成后,Windows 桌面会出现 Shared 文件夹,并映射为 Z: 盘(见 readme.md 中 “How do I share files with the host?”;盘符映射由安装脚本写入,见 src/answer.shnet.exe use Z: \\host.lan\Data /persistent:yes)。

  3. 容器启动时会生成 Samba 配置并启动 smbd,共享名在配置里为 Data。Samba 默认就是开启的:SAMBA 变量默认值为 Y(见 docs/environment.md 的 File Sharing 一节)。

开启只读模式

SAMBA_READONLY 变量默认是 N,文档中的说明为 “Enables read-only mode for the shared folder”。把它设为 Y 即可:

services:
  windows:
    image: dockurr/windows
    container_name: windows
    environment:
      VERSION: "11"
      SAMBA_READONLY: "Y"
    devices:
      - /dev/kvm
      - /dev/net/tun
    cap_add:
      - NET_ADMIN
    ports:
      - 8006:8006
      - 3389:3389/tcp
      - 3389:3389/udp
    volumes:
      - ./windows:/storage
      - ./example:/shared
    restart: always
    stop_grace_period: 2m

其中 ./example 替换为你实际要共享的宿主机文件夹;./windows:/storage 是保存磁盘镜像的挂载,可按文档要求调整。

src/samba.sh 的实现可以看到配置的具体生效方式:脚本在每次容器启动时重写 /etc/samba/smb.conf,为每个共享段生成如下条目:

[Data]
    path = /shared
    comment = Shared
    read only = yes
    guest ok = yes
    guest only = yes

也就是说,SAMBA_READONLY=Y 时会写入 read only = yes,否则写入 read only = no。由于配置是每次启动时重新生成的,修改环境变量后需要重建(或重启)容器,Samba 才会以只读方式重新导出共享;在 Windows 一侧,对应的表现就是 Shared 文件夹 / Z: 盘变为只读,无法写入宿主机目录。

验证与调试

  • 成功条件:重启容器后,容器内的 Samba 配置中该共享段带 read only = yes;在 Windows 中访问 Z: 盘或桌面 Shared 文件夹可以读取内容,写入会被 Samba 拒绝(这正是 docs/environment.md 中该变量的语义:“Enables read-only mode for the shared folder”)。
  • 调试输出:如果共享行为不符合预期,可以加 SAMBA_DEBUG: "Y" 开启 Samba debug 输出,脚本会实时跟踪 /var/log/samba/log.smbd 等日志;容器内 Samba 主配置路径为 /etc/samba/smb.confsrc/samba.shSAMBA_CONFIG 的默认值)。

需要注意的边界

  • 共享目录本身不可写时也是只读:即使未设置 SAMBA_READONLY,脚本也会对共享目录做一次真实的写入探测(mktemp 测试文件);如果宿主机挂载本身不可写,该共享会自动以只读方式导出。另外,未挂载 /shared 且没有兼容路径时,容器会发布一个仅含使用说明的内置目录,该回退共享永远是只读的。
  • Samba 依赖网络NETWORK 设为 N 禁用网络时,Samba 服务整体不启动(src/samba.shdisabled "$NETWORK" && return 0),此时谈共享只读已无意义;NAT 模式下容器会预留 139/tcp、445/tcp 给 Samba(见 src/install.shreserveSambaPorts)。
  • 只读作用于共享导出层SAMBA_READONLY 控制的是 Samba 共享的读写权限,宿主机上的源文件夹及其权限不变;如果你只是想改变挂载位置,参考 readme.md 中 “How do I change the storage location?”。

完成以上配置并重建容器后,Z: 盘与 Shared 文件夹即按只读方式提供文件交换能力,宿主机目录不会再被容器内的 Windows 写入。

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
33
18
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.14 K
2.75 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
857
1.35 K
docsdocs
暂无描述
Markdown
897
5.81 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
531
596
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
920
1.84 K
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.79 K
1.02 K
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.36 K
1.46 K
cann-learning-hubcann-learning-hub
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
1.02 K
519
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
548
390