[GH-ISSUE #5473] Proxy container starts but no logs #11537

Closed
opened 2026-08-05 01:29:57 -04:00 by saavagebueno · 14 comments
Owner

Originally created by @LordJuice1 on GitHub (Feb 27, 2026).
Original GitHub issue: https://github.com/netbirdio/netbird/issues/5473

Describe the problem

Following the official migration guides for reverse proxy. I run the proxy container and it shows as started. Running docker compose logs -f proxy shows nothing. Running the command to list the keys, it shows it has never been used. I have verified the .env is being read by running docker compose config

To Reproduce

Steps to reproduce the behavior:

  1. Start with latest version
  2. Start container and verify it works
  3. Follow guide
  4. Go to Reverse Proxy > Services and find it blank

Expected behavior

For the proxy container to be running and my proxy address to be in the admin console

Are you using NetBird Cloud?

Self-hosted on a Rpi4b

NetBird version

0.66.0

Is any other VPN software installed?

If yes, which one?

Debug output

To help us resolve the problem, please attach the following anonymized status output

netbird status -dA

Create and upload a debug bundle, and share the returned file key:

netbird debug for 1m -AS -U bd56fee3758d5613e99c1ecdd690445a91f3193a6846ebbe0b701dd3abdee061/a67b44c4-9f90-4910-acea-5d8c3fd49d9a

Uploaded files are automatically deleted after 30 days.

Alternatively, create the file only and attach it here manually:

netbird debug for 1m -AS

Have you tried these troubleshooting steps?

  • [ x] Reviewed client troubleshooting (if applicable)
  • [ x] Checked for newer NetBird versions
  • [ x] Searched for similar issues on GitHub (including closed ones)
  • [ x] Restarted the NetBird client
  • Disabled other VPN software
  • [ x

netbird status -dA.log

] Checked firewall settings

Originally created by @LordJuice1 on GitHub (Feb 27, 2026). Original GitHub issue: https://github.com/netbirdio/netbird/issues/5473 **Describe the problem** Following the official migration guides for reverse proxy. I run the proxy container and it shows as started. Running `docker compose logs -f proxy` shows nothing. Running the command to list the keys, it shows it has never been used. I have verified the .env is being read by running `docker compose config` **To Reproduce** Steps to reproduce the behavior: 1. Start with latest version 2. Start container and verify it works 3. Follow guide 4. Go to Reverse Proxy > Services and find it blank **Expected behavior** For the proxy container to be running and my proxy address to be in the admin console **Are you using NetBird Cloud?** Self-hosted on a Rpi4b **NetBird version** `0.66.0` **Is any other VPN software installed?** If yes, which one? **Debug output** To help us resolve the problem, please attach the following anonymized status output netbird status -dA Create and upload a debug bundle, and share the returned file key: netbird debug for 1m -AS -U `bd56fee3758d5613e99c1ecdd690445a91f3193a6846ebbe0b701dd3abdee061/a67b44c4-9f90-4910-acea-5d8c3fd49d9a` *Uploaded files are automatically deleted after 30 days.* Alternatively, create the file only and attach it here manually: netbird debug for 1m -AS **Have you tried these troubleshooting steps?** - [ x] Reviewed [client troubleshooting](https://docs.netbird.io/how-to/troubleshooting-client) (if applicable) - [ x] Checked for newer NetBird versions - [ x] Searched for similar issues on GitHub (including closed ones) - [ x] Restarted the NetBird client - [ ] Disabled other VPN software - [ x [netbird status -dA.log](https://github.com/user-attachments/files/25610122/netbird.status.-dA.log) ] Checked firewall settings
saavagebueno added the triage-needed label 2026-08-05 01:29:57 -04:00
Author
Owner

@heymoe commented on GitHub (Feb 27, 2026):

It's been my experience that unless you have some reverse proxies configured and are active, you won't see any logs unless you enable debug logging. To enable debug logging, edit the proxy.env file and set NB_PROXY_DEBUG_LOG to true. Then restart Netbird.

<!-- gh-comment-id:3975331040 --> @heymoe commented on GitHub (Feb 27, 2026): It's been my experience that unless you have some reverse proxies configured and are active, you won't see any logs unless you enable debug logging. To enable debug logging, edit the proxy.env file and set NB_PROXY_DEBUG_LOG to true. Then restart Netbird.
Author
Owner

@LordJuice1 commented on GitHub (Feb 28, 2026):

I added that line and restarted. Unfortunately it still shows a blank

<!-- gh-comment-id:3978393636 --> @LordJuice1 commented on GitHub (Feb 28, 2026): I added that line and restarted. Unfortunately it still shows a blank
Author
Owner

@heymoe commented on GitHub (Mar 1, 2026):

Weird, I get like 20 lines of logs when starting Netbird with NB_PROXY_DEBUG_LOGS=true and nothing when starting Netbird with NB_PROXY_DEBUG_LOGS=false (when no reverse proxy configured or they are disabled) when running docker compose logs proxy. Did you double check to make sure there wasn't an existing NB_PROXY_DEBUG_LOGS line in your proxy.env file? The proxy.env file the Netbird install script created already had the line in there set to false when I did the install.

When you run docker compose ps after Netbird has started, does the proxy container say it's running and doesn't look like it's restarting (as in the STATUS up time for the proxy container is not the same as the other Netbird containers).

<!-- gh-comment-id:3980102711 --> @heymoe commented on GitHub (Mar 1, 2026): Weird, I get like 20 lines of logs when starting Netbird with `NB_PROXY_DEBUG_LOGS=true` and nothing when starting Netbird with `NB_PROXY_DEBUG_LOGS=false` (when no reverse proxy configured or they are disabled) when running `docker compose logs proxy`. Did you double check to make sure there wasn't an existing `NB_PROXY_DEBUG_LOGS` line in your proxy.env file? The proxy.env file the Netbird install script created already had the line in there set to false when I did the install. When you run `docker compose ps` after Netbird has started, does the proxy container say it's running and doesn't look like it's restarting (as in the STATUS up time for the proxy container is not the same as the other Netbird containers).
Author
Owner

@LordJuice1 commented on GitHub (Mar 1, 2026):

I have just the one NB_PROXY_DEBUG_LOG in my proxy.env. I never had one before since I am doing a migration on an existing install. Status shows up for 18 hours for proxy

<!-- gh-comment-id:3980465211 --> @LordJuice1 commented on GitHub (Mar 1, 2026): I have just the one `NB_PROXY_DEBUG_LOG` in my proxy.env. I never had one before since I am doing a migration on an existing install. Status shows up for 18 hours for proxy
Author
Owner

@LordJuice1 commented on GitHub (Mar 1, 2026):

Here is my redacted proxy.env file that I crated based on their instructions

NB_PROXY_DOMAIN=proxy.domain.tld
NB_PROXY_TOKEN=nbx_
NB_PROXY_MANAGEMENT_ADDRESS=http://vpn2.domain.tld:80
NB_PROXY_ALLOW_INSECURE=true
NB_PROXY_ADDRESS=:8443
NB_PROXY_ACME_CERTIFICATES=true
NB_PROXY_ACME_CHALLENGE_TYPE=tls-alpn-01
NB_PROXY_CERTIFICATE_DIRECTORY=/certs
NB_PROXY_DEBUG_LOG=true
<!-- gh-comment-id:3980489341 --> @LordJuice1 commented on GitHub (Mar 1, 2026): Here is my redacted `proxy.env` file that I crated based on their instructions ``` NB_PROXY_DOMAIN=proxy.domain.tld NB_PROXY_TOKEN=nbx_ NB_PROXY_MANAGEMENT_ADDRESS=http://vpn2.domain.tld:80 NB_PROXY_ALLOW_INSECURE=true NB_PROXY_ADDRESS=:8443 NB_PROXY_ACME_CERTIFICATES=true NB_PROXY_ACME_CHALLENGE_TYPE=tls-alpn-01 NB_PROXY_CERTIFICATE_DIRECTORY=/certs NB_PROXY_DEBUG_LOG=true ```
Author
Owner

@heymoe commented on GitHub (Mar 2, 2026):

This is everything in my proxy.env

NB_PROXY_DEBUG_LOGS=false
NB_PROXY_MANAGEMENT_ADDRESS=http://netbird-server:80
NB_PROXY_ALLOW_INSECURE=true
NB_PROXY_DOMAIN=proxy.domain.tld
NB_PROXY_ADDRESS=:8443
NB_PROXY_TOKEN=nbx_xxxxxxxxxxxxx
NB_PROXY_CERTIFICATE_DIRECTORY=/certs
NB_PROXY_ACME_CERTIFICATES=true
NB_PROXY_ACME_CHALLENGE_TYPE=tls-alpn-01
NB_PROXY_ACME_ADDRESS=proxy.domain.tld
NB_PROXY_FORWARDED_PROTO=https
NB_PROXY_PROXY_PROTOCOL=true
NB_PROXY_TRUSTED_PROXIES=172.30.0.10
NB_PROXY_PRESHARED_KEY=<only needed if you're using a preshared-key>

Everything except for the NB_PROXY_PRESHARED_KEY was generated by the install script.

<!-- gh-comment-id:3982245549 --> @heymoe commented on GitHub (Mar 2, 2026): This is everything in my proxy.env ``` NB_PROXY_DEBUG_LOGS=false NB_PROXY_MANAGEMENT_ADDRESS=http://netbird-server:80 NB_PROXY_ALLOW_INSECURE=true NB_PROXY_DOMAIN=proxy.domain.tld NB_PROXY_ADDRESS=:8443 NB_PROXY_TOKEN=nbx_xxxxxxxxxxxxx NB_PROXY_CERTIFICATE_DIRECTORY=/certs NB_PROXY_ACME_CERTIFICATES=true NB_PROXY_ACME_CHALLENGE_TYPE=tls-alpn-01 NB_PROXY_ACME_ADDRESS=proxy.domain.tld NB_PROXY_FORWARDED_PROTO=https NB_PROXY_PROXY_PROTOCOL=true NB_PROXY_TRUSTED_PROXIES=172.30.0.10 NB_PROXY_PRESHARED_KEY=<only needed if you're using a preshared-key> ``` Everything except for the `NB_PROXY_PRESHARED_KEY` was generated by the install script.
Author
Owner

@LordJuice1 commented on GitHub (Mar 2, 2026):

Strange how its different from their docs. I did a copy and paste of yours and added in the info for my server and I actually got log output this time

2026-03-02T17:28:31.858Z DEBG proxy/server.go:542: connecting to management mapping stream
netbird-proxy  | 2026-03-02T17:28:31.858Z DEBG proxy/server.go:561: management mapping stream established
netbird-proxy  | 2026-03-02T17:28:31.861Z WARN proxy/server.go:580: management connection failed, retrying in 1.422s: mapping stream: receive msg: rpc error: code = Unimplemented desc = unexpected HTTP status code received from server: 404 (Not Found); transport: received unexpected content-type "text/plain; charset=utf-8"
<!-- gh-comment-id:3985835539 --> @LordJuice1 commented on GitHub (Mar 2, 2026): Strange how its different from their docs. I did a copy and paste of yours and added in the info for my server and I actually got log output this time ``` 2026-03-02T17:28:31.858Z DEBG proxy/server.go:542: connecting to management mapping stream netbird-proxy | 2026-03-02T17:28:31.858Z DEBG proxy/server.go:561: management mapping stream established netbird-proxy | 2026-03-02T17:28:31.861Z WARN proxy/server.go:580: management connection failed, retrying in 1.422s: mapping stream: receive msg: rpc error: code = Unimplemented desc = unexpected HTTP status code received from server: 404 (Not Found); transport: received unexpected content-type "text/plain; charset=utf-8" ```
Author
Owner

@heymoe commented on GitHub (Mar 3, 2026):

Yeah, I noticed that what the newer install scripts generates is not the same as the manual update docs says to change which is why I've been running the new install script in a temp folder and then comparing the difference between my current config and a fresh install and then syncing my current configs to match.

It looks like maybe the error you're now seeing might be related to a missing Traefik PathPrefix for the proxy service. Two ways to maybe fix that one but this assumes you're running the the unified netbird-server container in your deployment.

  1. Change the URL for NB_PROXY_MANAGEMENT_ADDRESS from your public netbird URL to the name of the name of the netbird-server container which should just be netbird-server: NB_PROXY_MANAGEMENT_ADDRESS=http://netbird-server:80 . This will have the proxy container talk directly to the netbird-server container inside the docker network vs having the proxy jumping out of the docker network and back in via the Traefik container.

  2. In your docker-compose.yml under the labels section for the netbird-server container you should see a line that looks like this:

- traefik.http.routers.netbird-grpc.rule=Host(`netbird.public.tld`) && (PathPrefix(`/signalexchange.SignalExchange/`) || PathPrefix(`/management.ManagementService/`))

Update it to look like this which is just adding another PathPrefix for the proxy service:

- traefik.http.routers.netbird-grpc.rule=Host(`netbird.public.tld`) && (PathPrefix(`/signalexchange.SignalExchange/`) || PathPrefix(`/management.ManagementService/`) || PathPrefix(`/management.ProxyService/`))

Without that additional PathPrefix, Traefik doesn't know where to send requests for the proxy service when they come in from the public side which is likely causing the 404 error you are seeing.

Option 2 is likely best if you plan to run additional external proxy servers otherwise they won't be able to register themselves.

<!-- gh-comment-id:3989156070 --> @heymoe commented on GitHub (Mar 3, 2026): Yeah, I noticed that what the newer install scripts generates is not the same as the manual update docs says to change which is why I've been running the new install script in a temp folder and then comparing the difference between my current config and a fresh install and then syncing my current configs to match. It looks like maybe the error you're now seeing might be related to a missing Traefik PathPrefix for the proxy service. Two ways to maybe fix that one but this assumes you're running the the unified netbird-server container in your deployment. 1) Change the URL for `NB_PROXY_MANAGEMENT_ADDRESS` from your public netbird URL to the name of the name of the netbird-server container which should just be netbird-server: `NB_PROXY_MANAGEMENT_ADDRESS=http://netbird-server:80` . This will have the proxy container talk directly to the netbird-server container inside the docker network vs having the proxy jumping out of the docker network and back in via the Traefik container. 2) In your docker-compose.yml under the labels section for the netbird-server container you should see a line that looks like this: ``` - traefik.http.routers.netbird-grpc.rule=Host(`netbird.public.tld`) && (PathPrefix(`/signalexchange.SignalExchange/`) || PathPrefix(`/management.ManagementService/`)) ``` Update it to look like this which is just adding another PathPrefix for the proxy service: ``` - traefik.http.routers.netbird-grpc.rule=Host(`netbird.public.tld`) && (PathPrefix(`/signalexchange.SignalExchange/`) || PathPrefix(`/management.ManagementService/`) || PathPrefix(`/management.ProxyService/`)) ``` Without that additional PathPrefix, Traefik doesn't know where to send requests for the proxy service when they come in from the public side which is likely causing the 404 error you are seeing. Option 2 is likely best if you plan to run additional external proxy servers otherwise they won't be able to register themselves.
Author
Owner

@LordJuice1 commented on GitHub (Mar 3, 2026):

The only change I made was changing to NB_PROXY_MANAGEMENT_ADDRESS=http://netbird-server:80. That alone seems to have worked

<!-- gh-comment-id:3993517312 --> @LordJuice1 commented on GitHub (Mar 3, 2026): The only change I made was changing to `NB_PROXY_MANAGEMENT_ADDRESS=http://netbird-server:80`. That alone seems to have worked
Author
Owner

@LordJuice1 commented on GitHub (Mar 3, 2026):

It looks like I'm having a different problem now. Most likely unrelated to this post. I'll post it here regardless in case

WARN client/internal/profilemanager/service.go:360: failed to get active profile state: failed to set default active profile state: failed to set active profile to default: failed to write active profile state: create temp: open /var/lib/netbird/.2563522726active_profile.json: permission denied
netbird-proxy  | 2026-03-03T21:18:32.192Z WARN client/firewall/create_linux.go:49: failed to create native firewall: create firewall: no firewall manager found. Proceeding with userspace
netbird-proxy  | 2026-03-03T21:18:32.211Z INFO [domain: subsite.site.tld, account_id: xxxxxxxx] proxy/internal/roundtrip/netbird.go:317: notified management about tunnel connection
netbird-proxy  | 2026-03-03T21:18:34.821Z WARN proxy/internal/acme/manager.go:139: prefetch certificate for domain "subsite.site.tld": acme/autocert: unable to satisfy "https://acme-v02.api.letsencrypt.org/acme/authz/3xxxxxxx" for domain "subsite.site.tld": no viable challenge type found
<!-- gh-comment-id:3993627265 --> @LordJuice1 commented on GitHub (Mar 3, 2026): It looks like I'm having a different problem now. Most likely unrelated to this post. I'll post it here regardless in case ``` WARN client/internal/profilemanager/service.go:360: failed to get active profile state: failed to set default active profile state: failed to set active profile to default: failed to write active profile state: create temp: open /var/lib/netbird/.2563522726active_profile.json: permission denied netbird-proxy | 2026-03-03T21:18:32.192Z WARN client/firewall/create_linux.go:49: failed to create native firewall: create firewall: no firewall manager found. Proceeding with userspace netbird-proxy | 2026-03-03T21:18:32.211Z INFO [domain: subsite.site.tld, account_id: xxxxxxxx] proxy/internal/roundtrip/netbird.go:317: notified management about tunnel connection netbird-proxy | 2026-03-03T21:18:34.821Z WARN proxy/internal/acme/manager.go:139: prefetch certificate for domain "subsite.site.tld": acme/autocert: unable to satisfy "https://acme-v02.api.letsencrypt.org/acme/authz/3xxxxxxx" for domain "subsite.site.tld": no viable challenge type found ```
Author
Owner

@heymoe commented on GitHub (Mar 3, 2026):

The first few lines seem to be normal as my proxy reports them also. It seems that you're now having a problem getting a SSL cert.

Assuming the domain name from the acme URL you left in your logs is the domain they are trying to use for your reverse proxy, It seems the issue is that domain doesn't resolve to an IP / comes up as an NX domain which would explain why the proxy isn't able to get a cert for it.

The proxy needs a domain / URL that is different than the name / URL you're using for Netbird. I'm assuming you're Netbird instance is working except for the reverse proxy features at this point.

So, if you setup netbird.domain.tld for your main Netbird URL and that points to the IP 1.2.3.4 (where 1.2.3.4 is the IP of the device that is hosting your Netbird instance) then you need to setup another DNS entry for say proxy.domain.tld that also points to 1.2.3.4 and configure your proxy.env file to use proxy.domain.tld for NB_PROXY_DOMAIN and NB_PROXY_ACME_ADDRESS.

<!-- gh-comment-id:3994224518 --> @heymoe commented on GitHub (Mar 3, 2026): The first few lines seem to be normal as my proxy reports them also. It seems that you're now having a problem getting a SSL cert. Assuming the domain name from the acme URL you left in your logs is the domain they are trying to use for your reverse proxy, It seems the issue is that domain doesn't resolve to an IP / comes up as an NX domain which would explain why the proxy isn't able to get a cert for it. The proxy needs a domain / URL that is different than the name / URL you're using for Netbird. I'm assuming you're Netbird instance is working except for the reverse proxy features at this point. So, if you setup `netbird.domain.tld` for your main Netbird URL and that points to the IP 1.2.3.4 (where 1.2.3.4 is the IP of the device that is hosting your Netbird instance) then you need to setup another DNS entry for say `proxy.domain.tld` that also points to 1.2.3.4 and configure your proxy.env file to use `proxy.domain.tld` for `NB_PROXY_DOMAIN` and `NB_PROXY_ACME_ADDRESS`.
Author
Owner

@LordJuice1 commented on GitHub (Mar 4, 2026):

So with NPM I had it set up as (for example) immich.site.tld. So I would like to keep it that way compared to immich.proxy.site.tld. I set up a custom domain for *.site.tld with it pointing to my cluster that is proxy.site.tld. Perhaps I'm setting it up incorrectly.

I made a resource under the networks tab named immich, and pointed it to the IP of the service and then under targets, added the IP again and the port number

<!-- gh-comment-id:3998513005 --> @LordJuice1 commented on GitHub (Mar 4, 2026): So with NPM I had it set up as (for example) immich.site.tld. So I would like to keep it that way compared to immich.proxy.site.tld. I set up a custom domain for *.site.tld with it pointing to my cluster that is proxy.site.tld. Perhaps I'm setting it up incorrectly. I made a resource under the networks tab named immich, and pointed it to the IP of the service and then under targets, added the IP again and the port number
Author
Owner

@heymoe commented on GitHub (Mar 4, 2026):

I just tested a setup that would do what you're wanting to do by using 2 different domains. It might be doable using just 1 but I'm not able to test that scenario without resetting my current deployment.

This is the setup I tested using 2 domains.

Domain #1: myhome.com
Domain #2: myservices.com

Netbird setup:

  • dashboard DNS name: netbird.myhome.com
  • proxy DNS name: proxy.myhome.com

Once Netbird is up and running, add a custom domain: *.myservices.com

Once Netbird verifies the custom domain, you can then add proxy services using the custom domain:

For example: immich.myservices.com, jellyfin.myservices.com, etc.. etc..

You might be able to use a single domain for everything but as I noted I personally haven't test this setup but this is how I could see it working.

Netbird setup:

  • dashboard DNS name: dashboard.myservices.com
  • proxy DNS name: myservices.com

Assuming Netbird doesn't have a problem with the proxy DNS name being the base domain and not a sub-domain (e.g: proxy.myservices.com), you should be able to just add proxy services as myapps.myservices.com without needing a custom domain.

Alternatively, if Netbird wants the proxy DNS name to be a sub-domain, then set the proxy DNS name to proxy.myservices.com and then add a custom domain for: *.myservices.com.

<!-- gh-comment-id:4000722281 --> @heymoe commented on GitHub (Mar 4, 2026): I just tested a setup that would do what you're wanting to do by using 2 different domains. It might be doable using just 1 but I'm not able to test that scenario without resetting my current deployment. This is the setup I tested using 2 domains. Domain #1: myhome.com Domain #2: myservices.com Netbird setup: - dashboard DNS name: netbird.myhome.com - proxy DNS name: proxy.myhome.com Once Netbird is up and running, add a custom domain: *.myservices.com Once Netbird verifies the custom domain, you can then add proxy services using the custom domain: For example: immich.myservices.com, jellyfin.myservices.com, etc.. etc.. You might be able to use a single domain for everything but as I noted I personally haven't test this setup but this is how I could see it working. Netbird setup: - dashboard DNS name: dashboard.myservices.com - proxy DNS name: myservices.com Assuming Netbird doesn't have a problem with the proxy DNS name being the base domain and not a sub-domain (e.g: proxy.myservices.com), you should be able to just add proxy services as `myapps.myservices.com` without needing a custom domain. Alternatively, if Netbird wants the proxy DNS name to be a sub-domain, then set the proxy DNS name to proxy.myservices.com and then add a custom domain for: *.myservices.com.
Author
Owner

@LordJuice1 commented on GitHub (Mar 4, 2026):

I did some more digging today. Even if i do subdomain.proxy.netbird.tld, it is forever spinning on issuing a cert, with errors in the logs. I also see some more tickets posted about this. I think it will be best I make a new one as well as now I have a different problem than before, which was the container wasn't starting with following their docs.

Thanks a ton for the help on the original problem. See you on the next one most likely. Ha

<!-- gh-comment-id:4001931853 --> @LordJuice1 commented on GitHub (Mar 4, 2026): I did some more digging today. Even if i do subdomain.proxy.netbird.tld, it is forever spinning on issuing a cert, with errors in the logs. I also see some more tickets posted about this. I think it will be best I make a new one as well as now I have a different problem than before, which was the container wasn't starting with following their docs. Thanks a ton for the help on the original problem. See you on the next one most likely. Ha
Sign in to join this conversation.
No Label triage-needed
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: DYNR/netbird#11537