No puedo especificar la limitación de CPU y memoria para los servicios especificados en la versión 3.
Con la versión 2 funciona bien con los parámetros mem_limit y cpu_shares en los servicios. Pero falla al usar la versión 3, ponerlos en la sección de deploy no parece valer la pena a menos que esté usando el modo de enjambre.
¿Alguien puede ayudar?
version: "3" services: node: build: context: . dockerfile: ./docker-build/Dockerfile.node restart: always environment: - VIRTUAL_HOST=localhost volumes: - logs:/app/out/ expose: - 8083 command: ["npm","start"] cap_drop: - NET_ADMIN - SYS_ADMINSé que el tema es un poco viejo y parece obsoleto, pero de todos modos pude usar estas opciones:
deploy: resources: limits: cpus: '0.001' memory: 50Mcuando se usa la versión 3.7 de docker-compose
Lo que ayudó en mi caso fue usar este comando:
docker-compose --compatibility up
--compatibility de compatibilidad significa (tomado de la documentación):
Si se establece, Compose intentará convertir claves de implementación en archivos v3 a su equivalente que no sea Swarm
Creo que es genial, que no tengo que revertir mi archivo docker-compose a v2.
deploy: resources: limits: cpus: '0.001' memory: 50M reservations: cpus: '0.0001' memory: 20MMás: https://docs.docker.com/compose/compose-file/compose-file-v3/#resources
En tu caso específico:
version: "3" services: node: image: USER/Your-Pre-Built-Image environment: - VIRTUAL_HOST=localhost volumes: - logs:/app/out/ command: ["npm","start"] cap_drop: - NET_ADMIN - SYS_ADMIN deploy: resources: limits: cpus: '0.001' memory: 50M reservations: cpus: '0.0001' memory: 20M volumes: - logs networks: default: driver: overlayNota:
También tenga en cuenta: las redes en modo Swarm no se conectan. Si desea conectarse solo internamente, debe conectarse a la red. Puede 1) especificar una red externa dentro de otro archivo de redacción, o debe crear la red con el parámetro --attachable (docker network create -d overlay My-Network --attachable) De lo contrario, debe publicar el puerto de esta manera:
ports: - 80:80Docker Compose no admite la clave de deploy . Solo se respeta cuando usa su archivo YAML de la versión 3 en un Docker Stack.
Este mensaje se imprime cuando agrega la clave de deploy a su archivo docker-compose.yml y luego ejecuta docker-compose up -d
ADVERTENCIA: Algunos servicios (base de datos) usan la tecla 'deploy', que será ignorada. Compose no es compatible con la configuración de 'implementación'; use la implementación de la
docker stack deploypara implementar en un enjambre.
La documentación ( https://docs.docker.com/compose/compose-file/#deploy ) 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.