Esta configuración particular cae bajo la influencia del espacio de nombres de red en el que se ejecuta Docker.
Como regla general /proc
modifica la configuración que es relevante en todo el sistema, técnicamente hablando, sin embargo, está modificando la configuración en /proc/net
que devuelve resultados por espacio de nombres de red.
Tenga en cuenta que /proc/net
es en realidad un enlace simbólico a /proc/self/net
ya que realmente refleja la configuración del espacio de nombres en el que está trabajando.
Docker 1.12+ tiene soporte nativo para ajustar los valores de sysctl dentro de los contenedores. Aquí hay un extracto de la documentación:
Configure los parámetros del kernel con espacio de nombres (sysctls) en tiempo de ejecución
--sysctl establece los parámetros del núcleo con espacio de nombres (sysctls) en el contenedor. Por ejemplo, para activar el reenvío de IP en el espacio de nombres de la red de contenedores, ejecute este comando:
docker run --sysctl net.ipv4.ip_forward=1 someimage
Usando tu ejemplo, la forma correcta de subir net.core.somaxconn
sería:
docker run ... --sysctl net.core.somaxconn=65535 ...
El contenedor privilegiado todavía usa su propio espacio de nombres de proceso para /proc
. Lo que puedes hacer es montar el /proc
real dentro del contenedor:
docker run --rm --privileged -v /proc:/host-proc ubuntu:latest \
'echo 65535 > /host-proc/sys/net/core/somaxconn'