diff --git a/debug_toolbar/middleware.py b/debug_toolbar/middleware.py index 598ff3eef..466e62bd4 100644 --- a/debug_toolbar/middleware.py +++ b/debug_toolbar/middleware.py @@ -36,11 +36,7 @@ def show_toolbar(request): # This is a hack for docker installations. It attempts to look # up the IP address of the docker host. # This is not guaranteed to work. - docker_ip = ( - # Convert the last segment of the IP address to be .1 - ".".join(socket.gethostbyname("host.docker.internal").rsplit(".")[:-1]) - + ".1" - ) + docker_ip = socket.gethostbyname("gateway.docker.internal") if request.META.get("REMOTE_ADDR") == docker_ip: return True except socket.gaierror: diff --git a/docs/changes.rst b/docs/changes.rst index 608843e0f..f8fda5948 100644 --- a/docs/changes.rst +++ b/docs/changes.rst @@ -15,6 +15,7 @@ Pending * Added a Makefile target (``make help``) to get a quick overview of each target. * Avoided reinitializing the staticfiles storage during instrumentation. +* Simplify Docker IP determination by using gateway IP. 5.0.1 (2025-01-13) ------------------ diff --git a/tests/test_integration.py b/tests/test_integration.py index 3cc0b1420..da41be85e 100644 --- a/tests/test_integration.py +++ b/tests/test_integration.py @@ -67,13 +67,12 @@ def test_show_toolbar_INTERNAL_IPS(self): with self.settings(INTERNAL_IPS=[]): self.assertFalse(show_toolbar(self.request)) - @patch("socket.gethostbyname", return_value="127.0.0.255") + @patch("socket.gethostbyname", return_value="192.168.65.1") def test_show_toolbar_docker(self, mocked_gethostbyname): with self.settings(INTERNAL_IPS=[]): - # Is true because REMOTE_ADDR is 127.0.0.1 and the 255 - # is shifted to be 1. + self.request.META["REMOTE_ADDR"] = "192.168.65.1" self.assertTrue(show_toolbar(self.request)) - mocked_gethostbyname.assert_called_once_with("host.docker.internal") + mocked_gethostbyname.assert_called_once_with("gateway.docker.internal") def test_not_iterating_over_INTERNAL_IPS(self): """Verify that the middleware does not iterate over INTERNAL_IPS in some way. diff --git a/tests/test_integration_async.py b/tests/test_integration_async.py index c6fb88ca5..4fd116e6a 100644 --- a/tests/test_integration_async.py +++ b/tests/test_integration_async.py @@ -54,13 +54,12 @@ async def test_show_toolbar_INTERNAL_IPS(self): with self.settings(INTERNAL_IPS=[]): self.assertFalse(show_toolbar(self.request)) - @patch("socket.gethostbyname", return_value="127.0.0.255") + @patch("socket.gethostbyname", return_value="192.168.65.1") async def test_show_toolbar_docker(self, mocked_gethostbyname): with self.settings(INTERNAL_IPS=[]): - # Is true because REMOTE_ADDR is 127.0.0.1 and the 255 - # is shifted to be 1. + self.request.META["REMOTE_ADDR"] = "192.168.65.1" self.assertTrue(show_toolbar(self.request)) - mocked_gethostbyname.assert_called_once_with("host.docker.internal") + mocked_gethostbyname.assert_called_once_with("gateway.docker.internal") async def test_not_iterating_over_INTERNAL_IPS(self): """