For the complete documentation index, see llms.txt. This page is also available as Markdown.

Inference Server binds to localhost by default

inference server start now publishes the server port on 127.0.0.1 instead of on every network interface. A server started with the CLI answers only the machine it is running on.

# new default: reachable only from this machine
inference server start

# previous behaviour: reachable from every machine that can route to this host
inference server start --bind-address 0.0.0.0

NVIDIA Jetson keeps the old behaviour. Jetson images are headless edge devices that are almost always driven from another machine, so they are still published on 0.0.0.0 and nothing breaks for them. That also means a Jetson is reachable by anything on its network by default - apply the controls below, or pin it down with --bind-address 127.0.0.1.

Why

A self-hosted Inference Server requires no authentication by default, and it executes Workflows Custom Python blocks. Together that is arbitrary code execution on your host for anyone who can reach port 9001. Publishing on every interface handed that to everything on the local network, including untrusted Wi-Fi. Loopback is now the default so the safe configuration is the one you get without thinking about it.

Before you bind to 0.0.0.0

Exposing the port is opting into a deployment that needs its own controls:

  • Set WORKSPACES_WHITELISTED_FOR_LOCAL_DEPLOYMENT, or put your own authentication in front of the server.

  • Set ALLOW_CUSTOM_PYTHON_EXECUTION_IN_WORKFLOWS=false unless your Workflows genuinely need custom Python.

  • Terminate TLS at the server or an upstream proxy if requests leave the host.

If you start containers yourself

Nothing changed, and nothing can: HOST selects the interface inside the container, which is a separate network namespace, so the image cannot restrict what the host publishes. docker run -p 9001:9001 still publishes on every interface. To get the new behaviour, bind the host side of the mapping explicitly:

Under --network host there is no port mapping, so set -e HOST=127.0.0.1 instead. In Kubernetes, keep HOST=0.0.0.0 and control exposure with the Service type and NetworkPolicy.

Also in this change

  • Raspberry Pi and other CPU/GPU targets get the new 127.0.0.1 default; only Jetson images are exempt.

  • inference server start --tunnel still publishes on 0.0.0.0, because the tunnel runs in a separate container and reaches the server through the host gateway. The CLI prints a notice when it does this.

  • The macOS and Windows desktop app bundles bind 127.0.0.1 as well. Set HOST=0.0.0.0 to restore the previous behaviour.

Last updated

Was this helpful?