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.
- Elimine
sys_resource
delxc_template.go
y recompile ellxc_template.go
. Entonces podrás establecer el ulimit tan alto como quieras.
o
- 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:
sudo service docker stop;
cambió los límites en /etc/security/limits.conf
reiniciar la máquina
ejecutar mi contenedor
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.