mirror of
https://github.com/netbirdio/netbird.git
synced 2026-07-18 20:49:56 +00:00
The CLI up path only tolerated a not-yet-ready daemon via a 10s blocking dial, so "netbird service start" immediately followed by "netbird up" (e.g. a container entrypoint) failed with a generic "daemon not running" error. The container entrypoint worked around this with a shell poll loop (status --check live) before running up. Move the readiness wait into the CLI, mirroring how the GUI already dials: - DialClientGRPCServer now uses grpc.NewClient with a tuned reconnect backoff and waits for the connection to reach READY (retrying on TRANSIENT_FAILURE) up to a 30s deadline, instead of grpc.DialContext + WithBlock with a hard 10s timeout. - up now polls Status via waitForDaemonStatus, retrying while the RPC is Unavailable (socket up but service not yet registered). Add an explicit daemon-ready signal so clients can wait deterministically instead of heuristically: - New optional StatusResponse.daemonReady field (field 5, wire-compatible with older GUIs/daemons which leave it unset). Regenerated with the pinned protoc v33.1 toolchain so no version churn leaks into the diff. - The server sets ready once Start succeeds and the DaemonService is registered (SetReady, called from the service controller). - waitForDaemonStatus waits for daemonReady=true (or an already-Connected status), with a bounded grace window so older daemons that never set the field are not blocked. Simplify the container entrypoint accordingly: drop the readiness poll loop (up now waits) and the now-dead NB_ENTRYPOINT_SERVICE_TIMEOUT env, keeping only the daemon+up process glue and SIGTERM forwarding for clean shutdown.
33 lines
1.1 KiB
Plaintext
33 lines
1.1 KiB
Plaintext
# build & run locally with:
|
|
# cd "$(git rev-parse --show-toplevel)"
|
|
# CGO_ENABLED=0 go build -o netbird ./client
|
|
# podman build -t localhost/netbird:latest -f client/Dockerfile --ignorefile .dockerignore-client .
|
|
# podman run --rm -it --cap-add={BPF,NET_ADMIN,NET_RAW} localhost/netbird:latest
|
|
|
|
FROM alpine:3.24
|
|
|
|
RUN apk add --no-cache \
|
|
bash \
|
|
ca-certificates \
|
|
&& adduser -D -h /var/lib/netbird netbird
|
|
|
|
WORKDIR /var/lib/netbird
|
|
USER netbird:netbird
|
|
|
|
ENV \
|
|
NETBIRD_BIN="/usr/local/bin/netbird" \
|
|
NB_USE_NETSTACK_MODE="true" \
|
|
NB_ENABLE_NETSTACK_LOCAL_FORWARDING="true" \
|
|
NB_CONFIG="/var/lib/netbird/config.json" \
|
|
NB_STATE_DIR="/var/lib/netbird" \
|
|
NB_DAEMON_ADDR="unix:///var/lib/netbird/netbird.sock" \
|
|
NB_LOG_FILE="console,/var/lib/netbird/client.log" \
|
|
NB_DISABLE_DNS="true" \
|
|
NB_ENABLE_CAPTURE="false"
|
|
|
|
ENTRYPOINT [ "/usr/local/bin/netbird-entrypoint.sh" ]
|
|
ARG TARGETPLATFORM
|
|
ARG NETBIRD_BINARY=$TARGETPLATFORM/netbird
|
|
COPY client/netbird-entrypoint.sh /usr/local/bin/netbird-entrypoint.sh
|
|
COPY "${NETBIRD_BINARY}" /usr/local/bin/netbird
|