skip to Main Content

I have a container with RabbitMQ, it has to connect to the external IP of the application container, the problem is that this external IP is dynamic and changes every time. Accordingly, I have to manually change the configuration of my RabbitMQ every time. Maybe you can somehow set a static ip for the "App" container so that it does not change or somehow connect these two containers?

version: '3'
services:
#PHP Service
app:
    build:
        context: .
        dockerfile: Dockerfile
    image: digitalocean.com/php
    container_name: app
    restart: unless-stopped
    tty: true
    environment:
        SERVICE_NAME: app
        SERVICE_TAGS: dev
    working_dir: /var/www
    volumes:
        - ./:/var/www
        - ./docker/php/local.ini:/usr/local/etc/php/conf.d/local.ini
    networks:
        - postgres
#Nginx Service
webserver:
    image: nginx:alpine
    container_name: webserver
    restart: unless-stopped
    tty: true
    ports:
        - "80:80"
        - "443:443"
    volumes:
        - ./:/var/www
        - ./docker/nginx/conf.d/:/etc/nginx/conf.d/
    networks:
        - postgres
#Redis
redis:
    image: 'redis:alpine'
    ports:
        - "6379:6379"
#PostgreSQL        
postgres:
    container_name: postgres_container
    image: postgres
    hostname: postgres
    environment:
        POSTGRES_DB: postgres
        POSTGRES_USER: postgres
        POSTGRES_PASSWORD: secret
        PGDATA: /data/postgres
    volumes:
        - postgres:/data/postgres
    ports:
        - "5432:5432"
    networks:
        - postgres
    restart: unless-stopped

pgadmin:
    container_name: pgadmin_container
    image: dpage/pgadmin4
    environment:
        PGADMIN_DEFAULT_EMAIL: ${PGADMIN_DEFAULT_EMAIL:[email protected]}
        PGADMIN_DEFAULT_PASSWORD: ${PGADMIN_DEFAULT_PASSWORD:-admin}
    volumes:
        - pgadmin:/root/.pgadmin
    ports:
        - "${PGADMIN_PORT:-5050}:80"
    networks:
        - postgres
    restart: unless-stopped  
    depends_on: 
        - postgres     
#RabbitMQ
rabbit:
    image: "rabbitmq:3-management"
    hostname: "rabbit"
    environment:
        RABBITMQ_ERLANG_COOKIE: "SWQOKODSQALRPCLNMEQG"
        RABBITMQ_DEFAULT_USER: "rabbitmq"
        RABBITMQ_DEFAULT_PASS: "rabbitmq"
        RABBITMQ_DEFAULT_VHOST: "/"
    ports:
        - "15672:15672"
        - "5672:5672"
    labels:
        NAME: "rabbitmq"    
    networks:
        - postgres     
#ElasticSearch
elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:5.4.3
    ports:
        - "9200:9200"
        - "9300:9300"
    networks:
        - postgres                      
#Docker Networks
networks:
  postgres:
    driver: bridge
volumes:
    postgres:
        pgadmin:  

2

Answers


  1. If they are in the same networks You can simply use the service name instead of the IP, just use the app, You can ping the app service name inside the rabbitMQ container and it works.

    Login or Signup to reply.
  2. as you are using docker-compose all your containers are already on the same network. You can access a container from another container using the name you have specified:
    i.e for rabbitmq it is rabbit
    for redis it will be redis

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search