--ipc=host使容器复用宿主机ipc命名空间,实现共享内存、信号量等ipc资源互通;需注意安全隔离风险及shm-size调整,验证可用ipcs -m和ls -l /dev/shm。
使用 --ipc=host 是让 docker 容器直接复用宿主机 ipc 命名空间的最直接方式,从而天然获得与宿主机进程(如 ros2 节点、数据库服务、监控代理等)共享内存的能力。
理解 --ipc=host 的作用
该参数使容器放弃独立的 IPC 命名空间,转而使用宿主机内核维护的那一套 IPC 资源池。这意味着:
- 容器内进程能通过
shmget()、shm_open()等系统调用访问宿主机上已创建的共享内存段 - 宿主机上的程序也能看到并连接容器创建的共享内存(只要权限允许)
- 信号量、消息队列等其他 IPC 对象也一并共享,不只限于
/dev/shm
实际启动命令示例
只需在 docker run 中添加该参数即可:
docker run -it --ipc=host --name my-app ubuntu:22.04
若还需增大共享内存容量(默认 /dev/shm 为 64MB),可同时指定:
docker run -it --ipc=host --shm-size=1g --name my-app ubuntu:22.04
关键注意事项
虽然高效,但需警惕隔离性与安全影响:
- 容器内任意进程都能读写宿主机所有共享内存段,可能造成数据污染或信息泄露
- 若多个容器都用
--ipc=host,它们彼此之间也自动共享 IPC —— 不再隔离 - 某些安全策略(如 SELinux、AppArmor)可能默认拒绝该模式,需额外配置策略规则
- 宿主机上残留的旧共享内存段(
ipcs -m可查)可能被容器意外复用,建议清理或统一命名规范
验证是否生效
进入容器后执行:
ls -l /dev/shm<br>ipcs -m
输出应与宿主机一致;若能看到宿主机创建的 ros2_* 或 dds_* 文件,说明共享内存通道已打通。










