9

My docker-compose have a two service, and docker-compose.yml define enviroment variable ip address with container name,

 version: '2'

services:
  api:
    build: ./api/
    command: python3 manage.py runserver
    volumes:
      - ./api:/code
    ports:
      - "8000:80"
    networks:
      - dock_net
    container_name: con_api

  web:
    build: ./web/
    command: python3 manage.py runserver
    volumes:
      - ./web:/code
    ports:
      - "8001:80"
    networks:
      - dock_net
    container_name: con_web
    environment:
        Ip:con_ip

networks:
  dock_net:
      driver: bridge

But variable see "con_ip" not 127.0.0.3

onuryartasi
  • 587
  • 2
  • 6
  • 13
  • When you use docker-compose the services on the same network will be visible to each other. So you can use `web` and `api` inside both the containers. Why do you want to use this ip? `web` and `api` host names will automatically resolve to the container IP addresses – Tarun Lalwani Jul 31 '17 at 12:27
  • I use django python file , but env variable thats name not seeing ip address – onuryartasi Jul 31 '17 at 13:57
  • Not able to understand the problem. Please elaborate in details what you want and why you want the IP – Tarun Lalwani Jul 31 '17 at 14:13
  • I can't access container in python file because request another container And thank you for your answer :) – onuryartasi Jul 31 '17 at 17:09

1 Answers1

13

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.

Ayushya
  • 9,599
  • 6
  • 41
  • 57
  • Well, how I can access container with service name in python file ? Because I request Api web application And thank you for your answer :) – onuryartasi Jul 31 '17 at 17:07