I don't think that you are properly using environment variables. Please refer environment variables in compose.
You can access one container from other container simply by using service name of that container. And this is the recommended way.
But if you prefer IP addresses for your own reasons, I am telling you how to set the static ip address of container, i would not recommend it though.
version: '2'
services:
api:
build: ./api/
command: python3 manage.py runserver
volumes:
- ./api:/code
ports:
- "8000:80"
networks:
- dock_net:
ipv4_address: 127.0.0.3
container_name: con_api
web:
build: ./web/
command: python3 manage.py runserver
volumes:
- ./web:/code
ports:
- "8001:80"
networks:
- dock_net:
ipv4_address: 127.0.0.4
container_name: con_web
networks:
dock_net:
driver: bridge
ipam:
config:
- subnet: 127.0.0.0/8
gateway: 127.0.0.1
This will assign the required IP-addresses to your containers. API
will be at 127.0.0.3
and web
will be at 127.0.0.4
EDIT: If you want to access service named api
from inside the web container then you can use its ip address as we have allocated here. http://127.0.0.3:80/ or you can also use http://api:80/
The api
is used in place of IP address because its the service name and when no hostname is given, service name is taken as default hostname. If you want to know about hostnames refer to this question.