docker的shm-size参数用于设置容器内/dev/shm大小,默认仅64mb,需通过docker run --shm-size=2g等方式显式指定,不支持dockerfile声明,且独立于内存限制。

Docker 的 shm-size 参数用于设置容器内 /dev/shm 文件系统的大小,默认只有 64MB。当运行依赖大量共享内存的应用(如 TensorFlow、PyTorch 多进程数据加载、某些数据库或科学计算程序)时,容易因空间不足报错:OSError: unable to mmap 134217728 bytes of shared memory 或类似提示。调整它很简单,关键是理解何时调、怎么设、设多大。
什么时候需要设置 shm-size
以下情况建议显式配置:
- 使用 PyTorch DataLoader 开启
num_workers > 0且pin_memory=True - 运行 TensorFlow 分布式训练或启用共享内存通信的模型服务
- 容器内启动 Redis、PostgreSQL 等依赖 shm 的服务(尤其开启 AOF 或大 buffer)
- 执行 OpenMP、MPI 程序,或调用
shm_open()/mmap()的自定义 C/C++ 应用
如何在 docker run 中指定 shm-size
直接通过 --shm-size 选项传入数值,支持单位后缀(b、k、m、g),不区分大小写:
docker run --shm-size=2g nginx:alpine
也可以用字节数(不推荐,易出错):
docker run --shm-size=2147483648 ubuntu:22.04
注意:--shm-size 必须在 docker run 命令中显式声明,不能在 Dockerfile 中设置(Dockerfile 无对应指令)。
MiniMax 图片理解 + 网络搜索 MCP 工具。适配 Docker 环境(极空间等),支持图片 OCR 识别、图像内容理解、网络搜索。API Key 安全存储在本地 credentials 文件,不暴露在代码中。
合理设置 shm-size 的大小建议
没有统一标准,需结合应用行为估算:
- PyTorch DataLoader:每个 worker 默认预分配约 64MB 共享内存;若用 8 个 worker,建议至少
--shm-size=512m - TensorFlow Serving 或 TF 2.x 多线程推理:常需
1g~2g,尤其 batch size 较大时 - 调试阶段可先设大些(如
--shm-size=4g),再根据df -h /dev/shm观察实际占用逐步下调 - 避免设得过大(如 16g),虽不影响宿主机内存,但可能掩盖程序内存泄漏问题
验证 shm-size 是否生效
进入容器后检查:
docker exec -it <container_id> df -h /dev/shm</container_id>
输出应显示你设定的大小,例如:
shm 2.0G 0 2.0G 0% /dev/shm
也可查看挂载信息确认参数来源:
docker exec -it <container_id> mount | grep shm</container_id>
正常会看到类似:shm on /dev/shm type tmpfs (rw,nosuid,nodev,noexec,relatime,size=2097152k)。










