I have two Docker containers
Now, on my local web api is local host and Console applicat
You can use the link
option with docker run
:
Run the API:
docker run -d --name api api_image
Run the client:
docker run --link api busybox ping api
You should see that api
can be resolved by docker.
That said, going with docker-compose
is still a better option.
The problem can be solved easily if using compose feature. With compose, you just create one configuration file (docker-compose.yml
) like this :
version: '3'
services:
db:
image: postgres
web:
build: .
command: python3 manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
depends_on:
- db
To make it run, just call up
like this :
docker-compose up
This is the best way to run all your stack, so, check this reference : https://docs.docker.com/compose/
Success!
The idea is not to pass the url, but the hostname of the other container you want to call.
See Networking in Compose
By default Compose sets up a single network for your app. Each container for a service joins the default network and is both reachable by other containers on that network, and discoverable by them at a hostname identical to the container name.
This is what replace the deprecated --link option.
And if your containers are not running on a single Docker server node, Docker Swarm Mode would enable that discoverability across multiple nodes.