我通过使用此博客文章创建了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容器共享内存。
答案 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