Docker-compose vs. docker run

I do like the basic idea of Docker. However, using it is cumbersome, at least sometimes.

docker-compose seems to offer a great opportunity to start-up a solution which is based on a set of Docker containers. It would be great if it would work in exactly the same manner as docker run. However, it does not seem to do so regarding its networking behaviour.

I have a, unfortunately rather complex solution, where I have a set of containers running. All of them using Thrift communication. Unfortunately, version 12 with no reasonable option to upgrade because it would result in refactoring the whole communication layer. Too, much work for too little time and if I had the time I would replace Thrift all together. So no bashing needed there. However, for now I’m stuck with it.

Reason to rease this issue here is my hope that somebody could give me a hint on where to find a in depth documentation on what docker-compose dose differently rather than docker run when it comes to networking and port mapping. Because what I’m saying is that I do have a show case where I can show that there IS a difference between starting a container using a .yaml file and starting the same (i.e. identical image) with docker run and identical port mapping and parameter passing to the container as the .yaml file suggests. Result is the container started with docker-compose crashes deep in the Thrift dll which the container started with docker run happily works. Ok, yes, mentioning dll means I’m using mono because the solution itself is mainly based on C# and yes .NET. Why then use Thrift? Well, was not my decision. People wanted to be language independent.

So admittingly it is a quite let’s challenging melange of technologies and probably not what you would use. However, I would really like to understand the difference between docker-compose and docker run …

Thanks for your help.