如何通过Docker正确使用共享内存(dev / shm)?

时间:2020-05-20 14:22:19

标签: linux docker kerberos shared-memory sidecar

我通过使用此博客文章创建了Kerberos辅助工具:

可以在Docker中启动sidecar,并将其写入/ dev / shm(共享内存)中的票证缓存。

接下来,我有另一个应用程序容器,我想读取票证缓存,因此我试图在两个容器之间使用共享内存。

我尝试了以下操作:

这将以分离模式启动Sidecar:

docker run -d  --ipc=host --name ksidecar ksidecar

接下来,我使用相同的名称空间(“主机”)启动应用程序容器。

docker run --ipc=container:host -p 5000:5000 --name myapp myapi 

Sidecar会执行应有的操作并写入/ dev / shm。

但是

应用程序容器完全看不到任何值。

我已经尝试过修改“ -ipc”设置。对我而言,最有意义的配置是对Sidecar使用-ipc = shareable ,对于应用容器使用-ipc = container:ksidecar 。但是当我这样做时,我得到了:

泊坞窗:来自守护程序的错误响应:无法加入容器516dcc29a0f421b812380378ecc4f6de0032679319bdea4d2279946f4c3d2be2的IPC:不可共享的IPC(提示:使用IpcMode:shared作为施主容器。

当然,正如您所见,我已经做到了。

我可能做错了什么。但是我已经完成了数小时的搜索和各种实验,但仍然无法正常工作。

希望有人在那里有一个答案或一个示例,说明他们如何与Docker容器共享内存。

1 个答案:

答案 0 :(得分:1)

您的 myapp 容器应设置为使用与 sidecar 相同的 IPC 命名空间 host

docker run --ipc=host -p 5000:5000 --name myapp myapi 

如果您希望您的应用与 sidecar 共享相同的命名空间,您首先需要将 sidecar 的 IPC 命名空间设置为 shareable

docker run -d  --ipc=shareable --name ksidecar ksidecar

然后为您的应用程序使用该命名空间。

docker run --ipc=container:ksidecar -p 5000:5000 --name myapp myapi