跨 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 选项为runcreate 使用通用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 设置为“主机”

Docker容器和内存消耗

跨线程共享内存访问

跨多个 docker-compose 项目的共享卷 [重复]

容器docker的作用是啥 这四个好处你知道几个

如果只有一个线程使用互斥锁,跨线程的共享内存会损坏吗?