Adding tty: true seems to solve the problem, and the container starts as expected. I assume for some reason the node is waiting on an interactive shell (which docker-compose doesn't provide) and so won't start. I didn't write the node so not super familiar, but I'll have a look and see if anything suggests it would be waiting for a shell.