#  Copyright (C) 2021 Nordix Foundation. All rights reserved.
#  ========================================================================
#  Licensed under the Apache License, Version 2.0 (the "License");
#  you may not use this file except in compliance with the License.
#  You may obtain a copy of the License at
#
#       http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing, software
#  distributed under the License is distributed on an "AS IS" BASIS,
#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#  See the License for the specific language governing permissions and
#  limitations under the License.
#  ============LICENSE_END=================================================
#
version: '3.5'

networks:
  default:
    driver: bridge
    name: nonrtric-docker-net

services:
  dmaap-mediator-go:
    image: nexus3.o-ran-sc.org:10004/o-ran-sc/nonrtric-dmaap-mediator-producer:1.0.0
    container_name: dmaap-mediator-go
    environment:
      - INFO_PRODUCER_HOST=http://consumer
      - LOG_LEVEL=Debug
      - INFO_PRODUCER_PORT=8088
      - INFO_COORD_ADDR=http://ecs:8083
      - MR_HOST=http://dmaap-mr
      - MR_PORT=3904
      - INFO_PRODUCER_SUPERVISION_CALLBACK_HOST=http://consumer
      - INFO_PRODUCER_SUPERVISION_CALLBACK_PORT=8088
      - INFO_JOB_CALLBACK_HOST=http://consumer
      - INFO_JOB_CALLBACK_PORT=8088
    networks:
      - default