pasar ejecutar copiar contenedor archivos archivo docker linux-containers

ejecutar - ¿Es posible compartir memoria entre contenedores docker?



ejecutar dockerfile (3)

Según lo sugerido por , busqué la fuente de Docker y también con la ayuda de devs guys en #docker-dev compilé con éxito Docker para eliminar el espacio de nombres de IPC.

Para lograr esto, es necesario comentar la línea "NEWIPC": true, en el archivo default_template.go ubicado en la carpeta docker/daemon/execdriver/native/template del código fuente de Docker.

El código antiguo ahora funciona perfectamente.

Trabajo en una aplicación con diferentes procesos y me piden que contenga esos procesos para lograr un mayor aislamiento.

El problema es que los procesos comparten la memoria con un único proceso de "hipervisor" para intercambiar datos (usan buffers compartidos clásicos). Esta solución se implementó por requisitos de rendimiento y porque se ejecuta en el espacio de usuario, por lo que no hay cambio de contenido entre espacio de usuario y espacio de kernel.

Si no me equivoco, no es posible ejecutar más de un contenedor de ventana acoplable dentro de un solo espacio de nombres IPC, pero no sé si es posible que un solo contenedor de ventana acoplable pertenezca a diferentes espacios de nombres IPC, esto podría resolver mi problema.

Otras soluciones son bienvenidas, solo tenga en cuenta que el rendimiento es un requisito, gracias de antemano.


Técnicamente, puede compartir el mismo espacio de nombres IPC entre contenedores, pero Docker no lo admite (todavía).

Si puede usar mmap() lugar de IPC, puede compartir un volumen entre ambos contenedores y asignar un archivo en ese volumen; Será el mismo archivo, y por lo tanto se compartirá correctamente.

Si realmente necesita compartir el espacio de nombres IPC (porque no puede cambiar el código existente), es hora de escribir un código Go y contribuir a Docker :-)

La ruta más fácil probablemente sería agregar una bandera al enlace libcontainer, para que pueda iniciar un contenedor reutilizando el espacio de nombres IPC del host (o de otro contenedor). Verifique la implementación de la bandera --net , ya que logra exactamente eso, pero para el espacio de nombres de la red.


Las --ipc=host y --ipc=container:id se han agregado a los comandos de create y run Docker para compartir recursos de IPC.

--ipc="" : Set the IPC mode for the container, ''container:<name|id>'': reuses another container''s IPC namespace ''host'': use the host''s IPC namespace inside the container

IPC con el anfitrión

docker run --ipc=host <image>

IPC con otro contenedor

docker run --ipc=container:<id> <image>