
# 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.

version: '3.2'

services:

   postgresql:
      image: "postgres:10.0"
      ports:
         - "5432:5432"
      volumes:
         - type: bind
           source: /Users/dave/src/apache-roller/deployment/docker-compose/postgresql-data
           target: /var/lib/postgresql/data
      environment:
         - POSTGRES_DB=rollerdb
         - POSTGRES_USER=scott
         - POSTGRES_PASSWORD=tiger

   roller:
      image: "roller:6.0.0-SNAPSHOT"
      ports:
         - "8080:8080"
      volumes:
         - type: bind
           source: /Users/dave/src/apache-roller/deployment/docker-compose/roller-data
           target: /var/lib/roller/data

