Lot's of people say that's a mess to maintain and too broken to actively use.
I often doubt if that's due to actual problems, or mix with that and bad decisions on the setup. Is dockering, keeping the data handling itself outside of it and a few other easy (or not so much) precautions enough to have a somewhat smoother sailing?
Also, how much time do you need to keep things from failing apart?
I didn’t want to give it access to the docker socket, with the ability to spawn its own containers. So instead I just use the nextcloud container directly. (With several other containers, like DB, reverse proxy, collabora, etc) It’s a mess to configure, hence their recommendation to use their “all in one” setup. All sorts of weird defaults with documentation that says “this is the default but you should absolutely change it to do X instead so that it performs better”. Things like setting up a service to generate thumbnails, setting up redis, etc.
Once configured though, it mostly just works. You can’t let it auto update between major versions, but you probably should be doing that anyway. There are usually breaking changes and you have to manually run a command or two between major updates. That doesn’t happen too frequently though.
I can’t speak to the quality of the all-in-one setup. It’s likely easier than what I did - but also what’s the point of putting it in docker and also giving it control of docker? Seems to defeat the point of containerization.
Only two problems I can think of: it's bit slow - even our company instance which has reasonable resources could be bit faster. Also they could use a better UI designer.
None of it is major problem for me. As self-hosted Dropbox/calendar/cospend it's perfectly fine.
Edit: In view of the other response, I checked my docker-compose and I am also using the community maintained image (https://hub.docker.com/_/nextcloud) instead of the all-in-one image. It is supported by MariaDB, redis, and aio-talk (for Nextcloud Talk).
Another thing: You should not skip major versions when upgrading. Pin the version in your Docker compose file.