Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

257
Vistas
Limite los recursos de host utilizables en Docker compose sin enjambre

Simplemente quiero limitar los recursos de algunos contenedores Docker en un archivo docker-compose. La razón es simple: hay múltiples aplicaciones/servicios ejecutándose en el host. Así que quiero evitar que un solo contenedor pueda usar, por ejemplo, toda la memoria, lo que daña a los otros contenedores.

De los documentos aprendí, que esto se puede hacer usando resources . Pero esto está más allá deploy . Así que tengo que escribir mi archivo docker-compose como el siguiente ejemplo:

 php: image: php:7-fpm restart: always volumes: - ./www:/www deploy: resources: limits: memory: 512M

Esto me dio la advertencia:

ADVERTENCIA: Algunos servicios (php) usan la tecla 'implementar', que será ignorada. Compose no es compatible con la configuración de implementación: use docker stack deploy para implementar en un enjambre.

Y eso parece ser cierto: las docker stats confirman que el contenedor puede usar todo el RAM del host.

La documentación dice:

Especifique la configuración relacionada con la implementación y ejecución de servicios. Esto solo tiene efecto cuando se implementa en un enjambre con docker stack deployment, y se ignora mediante docker-compose up y docker-compose run.

Pero no necesito agrupar. Parece que no hay otra forma de limitar los recursos usando un archivo docker composer. ¿Por qué no es posible especificar algún tipo de etiqueta de memory como lo hace el parámetro de inicio en la docker run ?

Ejemplo: docker run --memory=1g $imageName

Esto funciona perfectamente para un solo contenedor. Pero no puedo usar esto (al menos sin violar una clara separación de preocupaciones), ya que necesito usar dos contenedores diferentes.

Editar: solución temporal

Descubrí que puedo usar mem_limit directamente después de pasar de la versión 3 a la versión 2 (colocando version: '2' en la parte superior). Pero actualmente estamos en la versión 3.1, por lo que esta no es una solución a largo plazo. Y los documentos dicen que deploy.resources es el nuevo reemplazo para las etiquetas v2 como mem_limit .

Algún día, la versión 2 quedará obsoleta. ¿Entonces la gestión de recursos ya no es posible con las últimas versiones, al menos sin tener un enjambre? Parece un empeoramiento para mí, no puedo creer esto...

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Dado que muchos usuarios de Docker Compose se han quejado de esta incompatibilidad de compose v3 vs v2, el equipo ha desarrollado el modo de compatibilidad .

Puede conservar la misma estructura de implementación que proporcionó y no se ignorará, simplemente agregando el indicador --compatibility al comando docker-compose (docker-compose --compatibility up), como se explica aquí . Probé esto con la versión 3.5 y lo verifiqué con las estadísticas de Docker y puedo confirmar que funciona.

over 4 years ago · Santiago Trujillo Denunciar

0

Puede ejecutar el demonio docker en modo enjambre en un solo host. Agregará funciones adicionales innecesarias como el descubrimiento del servicio etcd, pero eso es todo detrás de escena.

La documentación de Docker tiene una "nota" al respecto aquí https://docs.docker.com/engine/swarm/swarm-tutorial/#three-networked-host-machines

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda