From 592ed499d7507599dc1957ca481e7b61a322a71f Mon Sep 17 00:00:00 2001 From: Jason Wilder Date: Mon, 19 May 2014 21:10:53 -0600 Subject: [PATCH] Improve port configuration Should address #6. The port selection now works as follows: * If there is only 1 port exposed by the container, that port is used. * If there is a VIRTUAL_PORT env variable defined, that port is used. * Otherwise, default to port 80, if exposed. --- Dockerfile | 6 +++--- nginx.tmpl | 31 +++++++++++++++++++++++++++---- supervisor.conf | 2 +- 3 files changed, 31 insertions(+), 8 deletions(-) diff --git a/Dockerfile b/Dockerfile index cf7715f..ba56340 100644 --- a/Dockerfile +++ b/Dockerfile @@ -7,15 +7,15 @@ RUN apt-get install -y python-software-properties wget supervisor RUN add-apt-repository -y ppa:nginx/stable RUN apt-get update -RUN apt-get install -y nginx +RUN apt-get install -y nginx RUN echo "daemon off;" >> /etc/nginx/nginx.conf RUN mkdir /app WORKDIR /app ADD . /app -RUN wget https://github.com/jwilder/docker-gen/releases/download/0.1.2/docker-gen-linux-amd64-0.1.2.tar.gz -RUN tar xvzf docker-gen-linux-amd64-0.1.2.tar.gz +RUN wget https://github.com/jwilder/docker-gen/releases/download/0.2.1/docker-gen-linux-amd64-0.2.1.tar.gz +RUN tar xvzf docker-gen-linux-amd64-0.2.1.tar.gz RUN mkdir -p /var/log/supervisor ADD supervisor.conf /etc/supervisor/conf.d/supervisor.conf diff --git a/nginx.tmpl b/nginx.tmpl index 469eda2..84606b5 100644 --- a/nginx.tmpl +++ b/nginx.tmpl @@ -2,11 +2,34 @@ upstream {{ $host }} { {{ range $index, $value := $containers }} - {{ with $address := index $value.Addresses 0 }} - server {{ $value.Gateway }}:{{ $address.HostPort }}; - {{ end }} -{{ end }} + {{ $addrLen := len $value.Addresses }} + {{/* If only 1 port exposed, use that */}} + {{ if eq $addrLen 1 }} + {{ with $address := index $value.Addresses 0 }} + # {{$value.Name}} + server {{ $address.IP }}:{{ $address.Port }}; + {{ end }} + + {{/* If more than one port exposed, use the one matching VIRTUAL_PORT env var */}} + {{ else if $value.Env.VIRTUAL_PORT }} + {{ range $i, $address := $value.Addresses }} + {{ if eq $address.Port $value.Env.VIRTUAL_PORT }} + # {{$value.Name}} + server {{ $address.IP }}:{{ $address.Port }}; + {{ end }} + {{ end }} + + {{/* Else default to standard web port 80 */}} + {{ else }} + {{ range $i, $address := $value.Addresses }} + {{ if eq $address.Port "80" }} + # {{$value.Name}} + server {{ $address.IP }}:{{ $address.Port }}; + {{ end }} + {{ end }} + {{ end }} +{{ end }} } server { diff --git a/supervisor.conf b/supervisor.conf index c9966d9..6b293b4 100644 --- a/supervisor.conf +++ b/supervisor.conf @@ -6,6 +6,6 @@ command=nginx directory=/etc/nginx [program:docker-gen] -command=./docker-gen -watch -notify "nginx -s reload" /app/nginx.tmpl /etc/nginx/sites-enabled/default +command=./docker-gen -watch -only-exposed -notify "nginx -s reload" /app/nginx.tmpl /etc/nginx/sites-enabled/default directory=/app