Pārlūkot izejas kodu

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.
Jason Wilder 11 gadi atpakaļ
vecāks
revīzija
592ed499d7
3 mainītis faili ar 31 papildinājumiem un 8 dzēšanām
  1. 3 3
      Dockerfile
  2. 27 4
      nginx.tmpl
  3. 1 1
      supervisor.conf

+ 3 - 3
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

+ 27 - 4
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 {

+ 1 - 1
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