
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  The ASF licenses this file to You
# 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.  For additional information regarding
# copyright in this work, please see the NOTICE file in the top level
# directory of this distribution.


# Example Docker Compose setup for running Roller and PostreSQL locally


version: '3.2'

services:

   postgresql:
      image: "postgres:10.0"
      ports:
         - "5432:5432"
      volumes:
         - type: bind
           source: ./docker/postgresql-data
           target: /var/lib/postgresql/data
      environment:
         - POSTGRES_DB=rollerdb
         - POSTGRES_USER=scott
         - POSTGRES_PASSWORD=tiger

   roller:
      image:
         build: .
      ports:
         - "8080:8080"
      volumes:
         - type: bind
           source: ./docker/roller-data
           target: /var/lib/roller/data

