docker共享内存配置有三种方式:一是用--shm-size扩大单容器/dev/shm容量,适用于内部多进程高频共享;二是用--ipc=shareable和--ipc=container:实现跨容器ipc命名空间共享;三是挂载宿主机/dev/shm实现更灵活但需注意安全的共享。

创建带有共享内存的 Docker 容器,核心在于控制 /dev/shm 的大小和 IPC 命名空间的共享方式。默认每个容器有独立的 64MB /dev/shm,但若需跨容器通信或运行内存密集型应用(如 PyTorch 多进程加载、PostgreSQL、Chrome Headless),就必须显式配置。
直接扩大单个容器的共享内存大小
适用于容器内多进程高频共享数据(如训练脚本中的 DataLoader):
- 使用
--shm-size参数指定容量:docker run -it --shm-size="2g" ubuntu:22.04 bash
进入后执行
df -h /dev/shm可验证是否生效(显示 2G)。 - 支持单位:
b,k,m,g(不区分大小写),例如"512m"、"1G"。
让多个容器共享同一块内存区域
适用于低延迟协同场景(如音视频处理流水线、实时计算模块):
- 第一步:启动一个可被共享的容器(标记为
shareable):docker run -d --name shm-provider --ipc=shareable ubuntu:22.04 sleep infinity
- 第二步:其他容器通过
--ipc=container:接入它的 IPC 命名空间:docker run -it --ipc=container:shm-provider ubuntu:22.04 ipcs -m
此时两个容器看到的是同一套共享内存段(System V 或 POSIX),可用
shmget()/shm_open()访问相同 key 或路径。
挂载宿主机 /dev/shm 实现更灵活共享
适合调试或需与宿主机进程互通的场景(注意权限与安全隔离):
docker run -it -v /dev/shm:/dev/shm:rw ubuntu:22.04 bash
⚠️ 此方式绕过容器 IPC 隔离,所有挂载该路径的容器和宿主机进程都能访问同一 tmpfs,需确保应用逻辑能正确处理并发访问。
在 Docker Compose 中配置
YAML 文件中支持 shm_size 字段(对应 --shm-size)和 ipc 字段(对应 --ipc):
services:
app1:
image: ubuntu:22.04
shm_size: "1g"
ipc: "container:app2"
app2:
image: ubuntu:22.04
shm_size: "1g"
ipc: "shareable"
关键点在于:--shm-size 只扩展本容器 /dev/shm 容量,不实现跨容器共享;真正共享内存必须靠 --ipc 控制命名空间,或手动挂载同一 tmpfs 路径。选哪种方式,取决于你是否需要容器间直接读写同一内存段,还是仅需增大内部缓冲。











