跨 docker 容器的共享内存
Posted
技术标签:
【中文标题】跨 docker 容器的共享内存【英文标题】:Shared memory across docker containers 【发布时间】:2016-06-08 11:27:20 【问题描述】:如果 Websphere MQ 用作使用 Java MQ 类而不是 JTA 的 XA(分布式事务)事务管理器,则 Java 应用程序和 WMQ 都需要驻留在同一主机上。有人告诉我这是因为共享内存被用作进程间通信机制。 Java 应用程序和 Websphere MQ 都需要访问共享内存才能使 XA 工作。
如果我们将 WMQ 部署在一个 docker 容器中,并将我们的 Java 应用程序保存在另一个 docker 容器中,两者都在同一主机上,我们是否能够将 WMQ 用作 XA 协调器?
我们是否必须使用容器的某些特殊配置才能使其正常工作?我们可以让两个容器使用共同的共享内存吗?
问候, 亚什
【问题讨论】:
【参考方案1】:您可以通过--ipc
选项为run
和create
使用通用IPC 名称空间
docker run -d --name=wmq wmq
docker run -d --ipc=container:wmq app
或者一个不太安全的主机ipc
docker run -d --ipc=host wmq
docker run -d --ipc=host app
我不确定 MQ 是否明确支持 XA 设置,但 IBM 确实支持 Docker 中的 MQ。
【讨论】:
以上是关于跨 docker 容器的共享内存的主要内容,如果未能解决你的问题,请参考以下文章
尝试从 docker 容器访问共享内存时出现“权限被拒绝”,即使 --ipc 设置为“主机”