1
0
mirror of https://github.com/thib8956/nginx-proxy synced 2025-07-01 14:25:46 +00:00

Merge pull request #2222 from rot169/support-hostnet-containers

Support containers running --net=host (#1537)
This commit is contained in:
Nicolas Duchon
2023-06-07 07:55:28 +02:00
committed by GitHub
7 changed files with 115 additions and 0 deletions

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_bridge_network_container(docker_compose, nginxproxy):
r = nginxproxy.get("http://bridge-network.nginx-proxy.tld/port")
assert r.status_code == 200
assert r.text == "answer from port 80\n"
def test_forwards_to_host_network_container(docker_compose, nginxproxy):
r = nginxproxy.get("http://host-network.nginx-proxy.tld/port")
assert r.status_code == 200
assert r.text == "answer from port 8080\n"

View File

@ -0,0 +1,31 @@
version: "2"
networks:
net1:
internal: true
net2:
services:
bridge-network:
image: web
environment:
WEB_PORTS: "80"
VIRTUAL_HOST: "bridge-network.nginx-proxy.tld"
networks:
- net2
host-network:
image: web
environment:
WEB_PORTS: "8080"
VIRTUAL_HOST: "host-network.nginx-proxy.tld"
VIRTUAL_PORT: "8080"
network_mode: host
sut:
image: nginxproxy/nginx-proxy:test
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
networks:
- net1
- net2

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