Как правильно использовать разделяемую память (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 
Другие вопросы по тегам