I can't give a simple answer here, but a few notes might help.
I've never seen "expose" as a run parameter for Docker, only in Dockerfiles. I'm not sure what that's all about, but it might be blocking access when you thought you were granting it.
Docker has several networking. The simplest is to merely let the containers share the same network as the host. A popular alternative is to let Docker set up a VPN between containers, however, and that's quite common when you have service containers with their own private database.
The secret of how to be miserable is to constantly expect things are going to happen the way that they are "supposed" to happen.
You can have faith, which carries the understanding that you may be disappointed. Then there's being a willfully-blind idiot, which virtually guarantees it.
Do the next thing next. That’s a pretty good rule. Read the tiny ad, that’s a pretty good rule, too.
a bit of art, as a gift, the permaculture playing cards