Search code examples
apachedockerdocker-composereverse-proxy

BaGet with Apache2 Reverse Proxy on Docker Compose not working


I'm trying to setup BaGet in Docker with Docker Compose behind an Apache2 reverse proxy, where Apache2 is also running in Docker from Docker Compose.

I've done this successful with Jenkins and Sonar, but with BaGet (http://localhost:8000/baget) I get "Service Unavailable" even though it's available directly on its own port, e.g.: http://localhost:5555/.

My Docker Compose file looks like this:

version: "3"
services:
    smtp:
        container_name: smtp
        image: namshi/smtp

    jenkins:
        container_name: jenkins
        build: ./jenkins/
        environment:
            - JENKINS_OPTS="--prefix=/jenkins"

    sonar:
        container_name: sonar
        image: sonarqube:latest
    environment:
        - SONAR_WEB_CONTEXT=/sonar

    baget:
        container_name: baget
        image: loicsharma/baget:latest
        ports:
            - "5555:80"
        environment:
            - PathBase=/baget

    apache:
        container_name: apache
        build: ./apache/
        ports:
            - "8000:80"

My Apache2 Docker File looks like this:

FROM debian:stretch

RUN apt-get update
RUN apt-get install -y apache2 && apt-get clean

RUN a2enmod proxy
RUN a2enmod proxy_http
RUN a2dissite 000-default.conf

COPY devenv.conf /etc/apache2/sites-available/devenv.conf

RUN a2ensite devenv

EXPOSE 80
CMD apachectl -D FOREGROUND

And my Apache2 config file like this:

<VirtualHost *:80>
    ServerAdmin ...
    ServerName ...
    ServerAlias devenv
    ProxyRequests Off
    AllowEncodedSlashes NoDecode
    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>
    ProxyPreserveHost on
    
    ProxyPass /jenkins http://jenkins:8080/jenkins nocanon
    ProxyPassReverse /jenkins http://jenkins:8080/jenkins nocanon

    ProxyPass /sonar http://sonar:9000/sonar nocanon
    ProxyPassReverse /sonar http://sonar:9000/sonar nocanon

    ProxyPass /baget http://baget:5555/baget nocanon
    ProxyPassReverse /baget http://baget:5555/baget nocanon
</VirtualHost>

I've tried various different compinations of ProxyPass URLs, I've tried using localhost instead of the internal Docker Compose serivces names, I've tried different ports and I've tried running BaGet without the PathBase environment variable and nothing works!

I'm hoping it's something obvious with my configuration and not something odd goign on with BaGet.


Solution

  • So, I was using the wrong port:

    ProxyPass /baget http://baget:5555/baget nocanon
    ProxyPassReverse /baget http://baget:5555/baget nocanon
    

    should have been:

    ProxyPass /baget http://baget/baget nocanon
    ProxyPassReverse /baget http://baget/baget nocanon
    

    Docker containers in Docker Compose speak to each other on the internally mapped port, not the external one. Which, now I know, makes perfect sense!