linux - 如何使用 Docker 正确使用共享内存 (dev/shm)?
问题描述
我使用这篇博文创建了一个 Kerberos sidecar:
Sidecar 可以在 Docker 中启动,并写入 /dev/shm(共享内存)中的票证缓存。
接下来,我有另一个要读取票证缓存的应用程序容器,因此我尝试在两个容器之间使用共享内存。
我尝试了以下方法:
这将以分离模式启动 sidecar:
docker run -d --ipc=host --name ksidecar ksidecar
接下来,我使用相同的命名空间(“Host”)启动应用程序容器。
docker run --ipc=container:host -p 5000:5000 --name myapp myapi
Sidecar 完成了它应该做的事情并写入 /dev/shm。
但
应用容器根本看不到任何值。
我已经尝试修改“-ipc”设置。对我来说最有意义的配置是将--ipc=shareable用于 sidecar,将 --ipc=container:ksidecar用于应用容器。但是当我这样做时,我得到:
docker:来自守护进程的错误响应:无法加入容器 516dcc29a0f421b812380378ecc4f6de0032679319bdea4d2279946f4c3d2be2 的 IPC:不可共享的 IPC(提示:使用 IpcMode:shareable 用于供体容器。
当然,如你所见,我已经做到了。
我可能做错了什么。但是我已经进行了数小时的搜索和各种实验,但仍然无法使其正常工作。
希望有人能给出一个答案或一个例子,说明他们如何使用 Docker 容器完成共享内存。
解决方案
您的myapp
容器应设置为使用与host
sidecar 相同的 IPC 命名空间。
docker run --ipc=host -p 5000:5000 --name myapp myapi
如果您希望您的应用程序与边车共享相同的命名空间,您首先需要将边车的 IPC 命名空间设置为shareable
.
docker run -d --ipc=shareable --name ksidecar ksidecar
然后为您的应用程序使用该命名空间。
docker run --ipc=container:ksidecar -p 5000:5000 --name myapp myapi
推荐阅读
- javascript - 不使用 toArray() 获取 Dexie 值
- c++ - GetWindowText 和子字符串
- python - 将许多泡菜数据框合并为一个
- asp.net - 使用 Stripe Webhooks 更新数据库内的订阅状态
- php - 解析 SimpleXML 对象数据
- html-editor - 如何在 Extjs HtmlEditor 的末尾设置光标位置
- django - Django:问题声明具有相同相关对象的2个字段
- javascript - 在数据中渲染 vue 组件
- python-3.x - 如何根据熊猫中的列从特定行中提取文本?
- hana - SAP HANA XSA Node.js Express HTTPS (SHINE)