Search code examples
dockerdocker-composedocker-network

How to access other container id inside docker-compose.yml?


I have a situation in which I have a docker-compose.yml file as follows

version: '3'

services:

  database:
    image: mcr.microsoft.com/mssql/server:2017-latest
    environment:
      - SA_PASSWORD=king@1234
      - ACCEPT_EULA=Y
    ports:
      - "8110:1433"
    container_name: app_db_con

  api:
    build:
      context: /home/shubham/Employee/EmployeeBackEnd/
    image: app-api:dev
    ports:
      - "8111:5001"
    container_name: app_api_con
    depends_on:
      - database

  web:
    build:
      context: /home/shubham/Employee/EmployeeFrontEnd/
    image: app-ui:dev
    ports:
      - "8112:80"
    container_name: app_web_con
    depends_on:
      - database
      - api

I want to access the database container id inside my api container as an argument. For example the args in below code:

  api:
    build:
      context: /home/shubham/Employee/EmployeeBackEnd/
    image: app-api:dev
    args:
      - Database_Server: database_container_id
    ports:
      - "8111:5001"
    container_name: app_api_con
    depends_on:
      - database

I am not sure how to achieve this. Please help if there is a different approach as well.

Thank You


Solution

  • By default, with docker-compose, each container is accessible by it's service name defined in the compose file.

    For example, in your case, if you want to access the database container from the api, you'll just have to use its name. You can try it out with this command :

    $ docker container exec -ti [your_api_container] ping database
    

    For more information about networking in compose, you can look at the official doc.