Earlier quoted context omitted.
If you have a fleet of services and currently work on services A and B you can just start up A - G in docker-compose based on CI-built images but mount your local build output into the A and B containers. Override their commands to watch filesystem changes so they reload themselves when you build. This can be easily managed with an personal override file on top of a committed compose file used by your team.
I agree the local dev environment UX is pretty much there. I use volume mounts myself. But when you're deploying on a remote host. OMG. Just sharing a Docker image internally is anguish. Developing as a remote team using Docker / Kubernetes workflow is just crazy. You're way WAY better off using serverless, where some implementations take ~2s to deploy my Go binary.
For sharing docker images, assuming you have write access to some dev repository, you can push to a tag tied to your development branch and others can configure their docker setups to pull that on restart.
Dev images can be built faster by just copying build output into an image as last step, that way other steps to prepare the image are cached. No need to use whatever slow things CI is doing in its Dockerfile.
It only takes a few lines of shell or makefile to automate most of these things. Of course local dev is still nicer.