From 4fe821db4d2d6fc1c0536ffb55c1f6d5a5da1a08 Mon Sep 17 00:00:00 2001 From: Christoph Wempe Date: Sun, 18 Mar 2018 01:24:41 +0100 Subject: [PATCH 1/2] Use Env.UPSTREAM_NAME if host is not a docker container --- nginx.tmpl | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/nginx.tmpl b/nginx.tmpl index 6bf19d5..2223226 100644 --- a/nginx.tmpl +++ b/nginx.tmpl @@ -13,7 +13,13 @@ {{ end }} {{ else if .Network }} # {{ .Container.Name }} - {{ if .Network.IP }} + {{ if .Container.Env.UPSTREAM_NAME }} + {{ if .Container.Env.VIRTUAL_PORT }} + server {{ .Container.Env.UPSTREAM_NAME }}:{{ .Container.Env.VIRTUAL_PORT }}; + {{ else }} + server {{ .Container.Env.UPSTREAM_NAME }}; + {{ end }} + {{ else if .Network.IP }} server {{ .Network.IP }} down; {{ else }} server 127.0.0.1 down; @@ -129,9 +135,14 @@ upstream {{ $upstream_name }} { {{ range $knownNetwork := $CurrentContainer.Networks }} {{ range $containerNetwork := $container.Networks }} - {{ if (and (ne $containerNetwork.Name "ingress") (or (eq $knownNetwork.Name $containerNetwork.Name) (eq $knownNetwork.Name "host"))) }} - ## Can be connected with "{{ $containerNetwork.Name }}" network - + {{ if (and (ne $containerNetwork.Name "ingress") (or (or (eq $knownNetwork.Name $containerNetwork.Name) (eq $knownNetwork.Name "host")) $container.Env.UPSTREAM_NAME)) }} + {{/* Define $upstream_name if the host is not a docker container */}} + {{ if $container.Env.UPSTREAM_NAME }} + {{ $upstream_name := $container.Env.UPSTREAM_NAME }} + ## Host is not a docker container + {{ else }} + ## Can be connected with "{{ $containerNetwork.Name }}" network + {{ end }} {{/* If only 1 port exposed, use that */}} {{ if eq $addrLen 1 }} {{ $address := index $container.Addresses 0 }} From 409f5245588ee99ccd2daf438318b9f38d6d4753 Mon Sep 17 00:00:00 2001 From: Christoph Wempe Date: Sun, 18 Mar 2018 02:00:04 +0100 Subject: [PATCH 2/2] Add 'Non-Docker Host' section to README --- README.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/README.md b/README.md index c44bf80..c5c2463 100644 --- a/README.md +++ b/README.md @@ -144,6 +144,22 @@ To set the default host for nginx use the env var `DEFAULT_HOST=foo.bar.com` for $ docker run -d -p 80:80 -e DEFAULT_HOST=foo.bar.com -v /var/run/docker.sock:/tmp/docker.sock:ro jwilder/nginx-proxy +### Non-Docker Host + +If you want to proxy a web server that is not a docker conatiner but still want the benefit of [jwilder/docker-gen](https://index.docker.io/u/jwilder/docker-gen/) and [letsencrypt-nginx-proxy-companion](https://github.com/JrCs/docker-letsencrypt-nginx-proxy-companion) you can use a dummy container that just provideds the necessary upstream address to generate the nginx config. + +Start a [dummy container](https://hub.docker.com/r/cwempe/docker-dummy/) and define `VIRTUAL_HOST`, `UPSTREAM_NAME` (and `VIRTUAL_PORT` if the port is not 80) with the address of your web server. +Make sure nginx is able to connect to the web server. + +```console +$ docker run -d \ + -e VIRTUAL_HOST=foo.bar.com \ + -e VIRTUAL_PORT=8080 \ + -e UPSTREAM_NAME=webserver.local \ + --rm \ + cwempe/docker-dummy:latest +``` + ### Separate Containers nginx-proxy can also be run as two separate containers using the [jwilder/docker-gen](https://index.docker.io/u/jwilder/docker-gen/)