Skip to content

Debug toolbar doesn't show if using a docker webserver container #2020

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
Eraldo opened this issue Oct 25, 2024 · 2 comments
Open

Debug toolbar doesn't show if using a docker webserver container #2020

Eraldo opened this issue Oct 25, 2024 · 2 comments

Comments

@Eraldo
Copy link

Eraldo commented Oct 25, 2024

I tried the solution approach to auto detect the correct IP and add it to the INTERNAL_IPS:

INTERNAL_IPS = ["127.0.0.1", "10.0.2.2"]
if env("USE_DOCKER") == "yes":
    import socket

    hostname, _, ips = socket.gethostbyname_ex(socket.gethostname())
    INTERNAL_IPS += [".".join(ip.split(".")[:-1] + ["1"]) for ip in ips]

This correctly detects my "django" container ip (172.18.0.5) and adds it to the INTERNAL_IPS.

However I am using a caddy webserver (172.18.0.6) and so the debug toolbar does not show in the end.
If I manually add 172.18.0.6 to the INTERNAL_IPS, it works as expected. (just to confirm)

Any ideas? 😅

@pjrulez
Copy link

pjrulez commented Apr 13, 2025

I had the same issue.
Running django runserver on the host but the rest of the supporting services in a docker compose stack in development.

According to AI this is the solution:
import subprocess

   def get_nginx_docker_ip():
       try:
           # Run the `docker inspect` command to get the Nginx IP
           output = subprocess.check_output(
               [
           ``        "docker",
                   "inspect",
                   "-f",
                   "{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}",
                   "your_nginx_container_name",  # Replace with your container name
               ],
               stderr=subprocess.DEVNULL
           )
           # Decode byte response to string
           return output.decode("utf-8").strip()
       except subprocess.CalledProcessError:
           # Log this or handle if the container is not running
           print("Error: Could not determine Nginx IP")
           return None

   # Get the Nginx internal Docker IP and add to INTERNAL_IPS
   nginx_ip = get_nginx_docker_ip()

   INTERNAL_IPS = ["127.0.0.1"]  # Include localhost
   if nginx_ip:
       INTERNAL_IPS.append(nginx_ip)

I tried it and it works!

With DEBUG on, it runs it and my setting looks like this:

INTERNAL_IPS: ['127.0.0.1', '127.0.1.1', '172.18.0.3']

Where the last one is the IP of my nginx container.

@matthiask
Copy link
Member

@pjrulez thanks! I'm surprised this is even necessary when running runserver on the host because the browser will probably always connect from 127.0.0.1 then, and not from the docker gateway IP unless you're using your computer's external IP?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants