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'