Hi,
I would first start by doing it exactly as the documentation says. And then start isolating the problem. You have too many systems interacting with each other that could be causing this issue. And the --signature-type=event that you removed bypasses some of the emulation mechanism. This would explain why it kind of worked.
For example, it says here[1] "The emulator listens on port 8085 on your localhost (127.0.0.1) by default". When I look at your docker compose, I do not see this port. In addition, how are you starting the emulator? Unless a command is included in the image, this[1] documentation says to run "gcloud beta emulators pubsub start". Unless there's something else I'm not seeing. Also, note this[2] step that says how to create a local push endpoint for testing push subscriptions.
My recommendation is to try isolating between a config issue or local system issue. Separate those two first by finding-out if the official configuration works. Otherwise, it will be very hard for others to perceive a potential local issue. As someone stated in the stackoverflow, the function is not being triggered. This is a communication issue and related to everything else before that.
Let me know if there's something I've missed