Fork 0
mirror of https://github.com/nginx-proxy/nginx-proxy synced 2024-05-20 22:46:08 +02:00
Automated nginx proxy for Docker containers using docker-gen
Go to file
Nicolas Duchon ce2a78bebf
Merge pull request #2455 from nginx-proxy/dependabot/pip/test/requirements/pytest-8.2.1
ci: bump pytest from 8.2.0 to 8.2.1 in /test/requirements
2024-05-20 10:01:12 +02:00
.github Add s390x support 2024-02-01 14:42:15 +08:00
app refactor: move nginx daemon off to procfile 2023-12-25 19:16:10 +01:00
docs Merge pull request #2434 from nginx-proxy/multiport-support 2024-05-09 12:29:00 +02:00
test ci: bump pytest from 8.2.0 to 8.2.1 in /test/requirements 2024-05-20 04:47:19 +00:00
.dockerignore chore: include license into the Docker images 2022-03-09 12:05:56 +01:00
.gitignore Modified tests to include dhparams 2017-03-07 14:04:44 -05:00
Dockerfile.alpine build: bump nginxproxy/docker-gen from 0.13.0-debian to 0.13.1-debian 2024-05-16 16:23:18 +00:00
Dockerfile.debian build: bump nginxproxy/docker-gen from 0.13.0-debian to 0.13.1-debian 2024-05-16 16:23:18 +00:00
LICENSE docs: update maintainers list on license 2022-01-11 19:46:42 +01:00
Makefile ci: use build matrix rather than separate jobs 2023-12-19 18:39:20 +01:00
README.md docs: update nginx version badge 2024-05-01 13:38:32 +02:00
docker-compose-separate-containers.yml ci: ensure all compose files are valid compose v2 + formatting 2023-12-12 21:56:27 +01:00
docker-compose.yml docs: add comment about host network to compose example 2024-02-22 05:59:51 -07:00
network_internal.conf fix: Move NETWORK_ACCESS to location block 2022-02-24 15:08:18 +01:00
nginx.tmpl fix: include a complete fastcgi_params config 2024-05-16 13:11:50 +02:00

Test GitHub release nginx 1.26.0 Docker Image Size Docker stars Docker pulls

nginx-proxy sets up a container running nginx and docker-gen. docker-gen generates reverse proxy configs for nginx and reloads nginx when containers are started and stopped.

See Automated Nginx Reverse Proxy for Docker for why you might want to use this.


To run it:

docker run --detach \
    --name nginx-proxy \
    --publish 80:80 \
    --volume /var/run/docker.sock:/tmp/docker.sock:ro \

Then start any containers (here an nginx container) you want proxied with an env var VIRTUAL_HOST=subdomain.yourdomain.com

docker run --detach \
    --name your-proxied-app \
    --env VIRTUAL_HOST=foo.bar.com \

Provided your DNS is setup to resolve foo.bar.com to the host running nginx-proxy, a request to http://foo.bar.com will then be routed to a container with the VIRTUAL_HOST env var set to foo.bar.com (in this case, the your-proxied-app container).

The containers being proxied must :

  • expose the port to be proxied, either by using the EXPOSE directive in their Dockerfile or by using the --expose flag to docker run or docker create.
  • share at least one Docker network with the nginx-proxy container: by default, if you don't pass the --net flag when your nginx-proxy container is created, it will only be attached to the default bridge network. This means that it will not be able to connect to containers on networks other than bridge.

Note: providing a port number in VIRTUAL_HOST isn't suported, please see virtual ports or custom external HTTP/HTTPS ports depending on what you want to achieve.

Image variants

The nginx-proxy images are available in two flavors.

Debian based version

This image is based on the nginx:mainline image, itself based on the debian slim image.

docker pull nginxproxy/nginx-proxy:1.5

Alpine based version (-alpine suffix)

This image is based on the nginx:alpine image.

docker pull nginxproxy/nginx-proxy:1.5-alpine

⚠️ a note on latest and alpine:

It is not recommended to use the latest (nginxproxy/nginx-proxy, nginxproxy/nginx-proxy:latest) or alpine (nginxproxy/nginx-proxy:alpine) tag for production setups.

Those tags point to the latest commit in the main branch. They do not carry any promise of stability, and using them will probably put your nginx-proxy setup at risk of experiencing uncontrolled updates to non backward compatible versions (or versions with breaking changes). You should always specify the version you want to use explicitly to ensure your setup doesn't break when the image is updated.

Additional documentation

Please check the docs section.