1
0
Fork 0
mirror of https://github.com/nginx-proxy/nginx-proxy synced 2024-05-06 15:46:09 +02:00

feat: support proxy + container in host network mode

This commit is contained in:
Nicolas Duchon 2023-05-09 19:31:42 +02:00
parent b88d33d2f3
commit 35b1493e16
No known key found for this signature in database
GPG Key ID: EA3151C66A4D79E7
4 changed files with 53 additions and 0 deletions

View File

@ -68,6 +68,12 @@
{{- continue }}
{{- end }}
{{- if eq .Name "host" }}
{{- /* Handle containers in host nework mode */}}
{{- if (index $.globals.networks "host") }}
# both container and proxy are in host network mode, using localhost IP
{{- $ip = "127.0.0.1" }}
{{- continue }}
{{- end }}
{{- range sortObjectsByKeysAsc $.globals.CurrentContainer.Networks "Name" }}
{{- if and . .Gateway }}
# container is in host network mode, using {{ .Name }} gateway IP

View File

@ -160,6 +160,10 @@ def container_ip(container: Container):
net_info = container.attrs["NetworkSettings"]["Networks"]
if "bridge" in net_info:
return net_info["bridge"]["IPAddress"]
# container is running in host network mode
if "host" in net_info:
return "127.0.0.1"
# not default bridge network, fallback on first network defined
network_name = list(net_info.keys())[0]
@ -173,6 +177,10 @@ def container_ipv6(container):
net_info = container.attrs["NetworkSettings"]["Networks"]
if "bridge" in net_info:
return net_info["bridge"]["GlobalIPv6Address"]
# container is running in host network mode
if "host" in net_info:
return "::1"
# not default bridge network, fallback on first network defined
network_name = list(net_info.keys())[0]

View File

@ -0,0 +1,13 @@
import pytest
def test_forwards_to_host_network_container_1(docker_compose, nginxproxy):
r = nginxproxy.get("http://host-network-1.nginx-proxy.tld:8888/port")
assert r.status_code == 200
assert r.text == "answer from port 8080\n"
def test_forwards_to_host_network_container_2(docker_compose, nginxproxy):
r = nginxproxy.get("http://host-network-2.nginx-proxy.tld:8888/port")
assert r.status_code == 200
assert r.text == "answer from port 8181\n"

View File

@ -0,0 +1,26 @@
version: "2"
services:
host-network-1:
image: web
environment:
WEB_PORTS: "8080"
VIRTUAL_HOST: "host-network-1.nginx-proxy.tld"
VIRTUAL_PORT: "8080"
network_mode: host
host-network-2:
image: web
environment:
WEB_PORTS: "8181"
VIRTUAL_HOST: "host-network-2.nginx-proxy.tld"
VIRTUAL_PORT: "8181"
network_mode: host
sut:
image: nginxproxy/nginx-proxy:test
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
environment:
HTTP_PORT: 8888
network_mode: host