Как правильно использовать разделяемую память (dev/shm) с помощью Docker?
Я создал сопроводительную статью Kerberos, используя это сообщение в блоге:
Коляску можно развернуть в Docker, и она будет записывать в кэш билетов в / dev / shm (общая память).
Затем у меня есть еще один контейнер приложения, который я хочу прочитать кэш билетов, поэтому я пытаюсь использовать общую память между двумя контейнерами.
Я пробовал следующее:
Это запускает коляску в отдельном режиме:
docker run -d --ipc=host --name ksidecar ksidecar
Затем я запускаю контейнер приложения, используя то же пространство имен ("Хост").
docker run --ipc=container:host -p 5000:5000 --name myapp myapi
Коляска делает то, что должна, и записывает в /dev/shm.
Но
Контейнер приложения вообще не видит значений.
Я экспериментировал с изменением настроек "-ipc". Конфигурация, которая имеет для меня наибольший смысл, заключается в использовании --ipc=shareable для сопроводительного файла и --ipc=container:ksidecar для контейнера приложения. Но когда я это делаю, я получаю:
docker: ответ об ошибке от демона: не удается присоединиться к IPC контейнера 516dcc29a0f421b812380378ecc4f6de0032679319bdea4d2279946f4c3d2be2: IPC без совместного использования (подсказка: используйте IpcMode: общий доступ для контейнера-донора.
Конечно, я сделал это, как видите.
Я наверное что-то не так делаю. Но я провел часы поиска и различных экспериментов, и все еще не могу заставить его работать.
Надеюсь, у кого-нибудь будет ответ или пример того, как они сделали общую память с контейнерами Docker.
1 ответ
Ваш
myapp
контейнер должен быть настроен на использование того же пространства имен IPC,
host
как коляска.
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