Kernel Tuning with Privileged Docker Container
This particular setting falls under the influence of the network namespace that docker runs in.
As a general rule /proc
does alter settings that are relevent systemwide, technically speaking however you are altering settings in /proc/net
which returns results on a per network namespace basis.
Note that /proc/net
is actually a symlink to /proc/self/net
as it really does reflect the settings of the namespace that you are doing the work in.
Docker 1.12+ has native support for tweaking sysctl values inside the containers. Here is an excerpt from the documentation:
Configure namespaced kernel parameters (sysctls) at runtime
The --sysctl sets namespaced kernel parameters (sysctls) in the container. For example, to turn on IP forwarding in the containers network namespace, run this command:
docker run --sysctl net.ipv4.ip_forward=1 someimage
Using your example, the correct way to raise net.core.somaxconn
would be:
docker run ... --sysctl net.core.somaxconn=65535 ...
The privileged container is still using its own process namespace for /proc
. What you can do is to mount the real /proc
inside the container:
docker run --rm --privileged -v /proc:/host-proc ubuntu:latest \
'echo 65535 > /host-proc/sys/net/core/somaxconn'