Ce paramètre particulier tombe sous l'influence de l'espace de noms réseau dans lequel docker s'exécute.
En règle générale /proc
modifie les paramètres qui sont pertinents à l'échelle du système, techniquement parlant, cependant, vous modifiez les paramètres dans /proc/net
qui renvoie les résultats par espace de noms de réseau.
Notez que /proc/net
est en fait un lien symbolique vers /proc/self/net
car il reflète vraiment les paramètres de l'espace de noms dans lequel vous effectuez le travail.
Docker 1.12+ a un support natif pour ajuster les valeurs sysctl à l'intérieur des conteneurs. Voici un extrait de la documentation :
Configurer les paramètres du noyau avec espace de noms (sysctls) lors de l'exécution
Le --sysctl définit les paramètres du noyau avec espace de noms (sysctls) dans le conteneur. Par exemple, pour activer le transfert IP dans l'espace de noms réseau des conteneurs, exécutez cette commande :
docker run --sysctl net.ipv4.ip_forward=1 someimage
En utilisant votre exemple, la bonne façon d'augmenter net.core.somaxconn
serait :
docker run ... --sysctl net.core.somaxconn=65535 ...
Le conteneur privilégié utilise toujours son propre espace de noms de processus pour /proc
. Ce que vous pouvez faire est de monter le vrai /proc
à l'intérieur du conteneur :
docker run --rm --privileged -v /proc:/host-proc ubuntu:latest \
'echo 65535 > /host-proc/sys/net/core/somaxconn'