Why can’t I curl one docker container from another via the host

I know this isn’t strictly answer to the question but there’s a more Docker-ish way of solving your problem. I would forget about publishing the port for inter-container communication altogether. Instead create an overlay network using docker swarm. You can find the full guide here but in essence you do the following:

//create network    
docker network create --driver overlay --subnet=10.0.9.0/24 my-net
//Start Container A
docker run -d --name=A --network=my-net producer:latest
//Start Container B
docker run -d --name=B --network=my-net consumer:latest

//Magic has occured
docker exec -it B /bin/bash
> curl A:3000 //MIND BLOWN!

Then inside container be you can just curl hostname A and it will resolve for you (even when you start doing scaling etc.)

If you’re not keen on using Docker swarm you can still use Docker legacy links as well:

docker run -d --name B --link A:A consumer:latest

which would link any exposed (not published) ports in your A container.

And finally, if you start moving to production…forget about links & overlay networks altogether…use Kubernetes 🙂 Bit more difficult initial setup but they introduce a bunch of concepts & tools to make linking & scaling clusters of containers a lot easier! But that’s just my personal opinion.

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)