volumen swarm portus own create docker ulimit

swarm - cómo configurar el ulimit/descriptor de archivo en el contenedor del docker la etiqueta de la imagen es phusion/baseimage-docker



own docker server (7)

Necesito establecer el límite del descriptor de archivo correctamente en el contenedor de docker que conecto al contenedor con ssh ( https://github.com/phusion/baseimage-docker )

Ya probado:

  • edite limits.conf el contenedor ignore este archivo
  • procedimiento de inicio que se encuentra en https://coderwall.com/p/myodcq pero esta imagen de la ventana acoplable tiene un tipo diferente de proceso init. (ejecutarlo)
  • Traté de modificar la configuración de la biblioteca pam en /etc/pam.d
  • intente habilitar pam para ssh en sshd_config

El resultado siempre es el mismo.

bash: ulimit: open files: cannot modify limit: Operation not permitted


Aquí esta lo que hice.

establecer ulimit -n 32000 en el archivo /etc/init.d/docker

y reinicia el servicio de docker

docker run -ti node:latest /bin/bash

ejecuta este comando para verificar

user@4d04d06d5022:/# ulimit -a

debería ver esto en el resultado

open files (-n) 32000

[user@ip ec2-user]# docker run -ti node /bin/bash user@4d04d06d5022:/# ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 58729 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited open files (-n) 32000 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 10240 cpu time (seconds, -t) unlimited max user processes (-u) 58729 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited


Después de buscar, encontré esto en una discusión de grupos de Google:

Docker actualmente inhibe esta capacidad para una mayor seguridad.

Esto se debe a que la configuración ulimit del sistema host se aplica al contenedor acoplable. Se considera un riesgo de seguridad que los programas que se ejecutan en un contenedor puedan cambiar la configuración de ulimit para el host.

La buena noticia es que tiene dos soluciones diferentes para elegir.

  1. Elimine sys_resource de lxc_template.go y recompile el lxc_template.go . Entonces podrás establecer el ulimit tan alto como quieras.

o

  1. Detener el demonio docker. Cambie la configuración de ulimit en el host. Comienza el demonio docker. Ahora tiene sus límites revisados ​​y sus procesos secundarios también.

Apliqué el segundo método:

  1. sudo service docker stop;

  2. cambió los límites en /etc/security/limits.conf

  3. reiniciar la máquina

  4. ejecutar mi contenedor

  5. Ejecute ulimit -a en el contenedor para confirmar que el límite de archivos abiertos se ha heredado.

Ver: https://groups.google.com/forum/#!searchin/docker-user/limits/docker-user/T45Kc9vD804/v8J_N4gLbacJ


El comando de docker run --ulimit tiene un indicador de --ulimit . Puede usar este indicador para establecer el límite de archivo abierto en su contenedor acoplable.

Ejecute el siguiente comando al girar su contenedor para establecer el límite de archivos abiertos.

docker run --ulimit nofile=<softlimit>:<hardlimit> el primer valor antes de los dos puntos indica el límite del archivo de software y el valor después de los dos puntos indica el límite del archivo de disco duro. Puede verificar esto ejecutando su contenedor en modo interactivo y ejecutando el siguiente comando en su container shell ulimit -n

PD: echa un vistazo a esta blog en el blog para mayor claridad


En realidad, he intentado con la respuesta anterior, pero no pareció funcionar.

Para que mis contenedores reconocieran el cambio de ulimit , tuve que actualizar el archivo docker.conf antes de iniciarlos:

$ sudo service docker stop $ sudo bash -c "echo /"limit nofile 262144 262144/" >> /etc/init/docker.conf" $ sudo service docker start


He probado muchas opciones y no estoy seguro de por qué algunas soluciones sugeridas anteriormente funcionan en una máquina y no en otras.

Una solución que funciona y que es simple y puede funcionar por contenedor es:

docker run --ulimit memlock=819200000:819200000 -h <docker_host_name> --name=current -v /home/user_home:/user_home -i -d -t docker_user_name/image_name


La última ventana acoplable admite la configuración de ulimits a través de la línea de comandos y la API. Por ejemplo, la docker run --ulimit <type>=<soft>:<hard> docker run toma --ulimit <type>=<soft>:<hard> y puede tener tantas como quiera. Entonces, para su nofile, un ejemplo sería --ulimit nofile=262144:262144


Para boot2docker, podemos configurarlo en /var/lib/boot2docker/profile , por ejemplo:

ulimit -n 2018

Tenga cuidado de no establecer este límite demasiado alto, ya que se ralentizará. Ver error #1332440 . Lo tuve con debian jessie.