Web control plane for Linux NFS: manage exports, monitor throughput, and audit changes.
2.5K
Canonical Docker documentation for the production image. Source: github.com/TuiTenTuan/nfs-manager-v3.
Copy everything between the lines below into the Docker Hub repository Overview (Full description) for tuitentuan/nfs-manager-v3.
NFS Manager v3 — manage Linux NFS exports from a web UI. Self-hosted control plane: Go API, Next.js dashboard, PostgreSQL, validate-before-apply workflow, live monitoring, and RBAC.
Source: GitHub — TuiTenTuan/nfs-manager-v3 · Release: v20260620 · License: MIT
| Tag | Description |
|---|---|
latest | Newest stable release |
v20260620 | Pinned v20260620 release |
Semver tags (v20260611, v20260619, …) are immutable. latest tracks the most recent stable tag push.
docker pull tuitentuan/nfs-manager-v3:latest
docker pull tuitentuan/nfs-manager-v3:v20260620
Single container with:
8080 by default)3000 by default)nfs-utils, requires --privileged)PostgreSQL is not included. Use Docker Compose from the GitHub repo or run a separate Postgres container.
From a clone of the repo:
git clone https://github.com/TuiTenTuan/nfs-manager-v3.git
cd nfs-manager-v3
cp deploy/.env.example deploy/.env # edit secrets
make docker-up
Default URLs (see deploy/.env.example): UI http://localhost:3001/login, API http://localhost:8081/api/v3/health.
docker network create nfs-manager-net
docker run -d \
--name nfs-manager-postgres \
--network nfs-manager-net \
-e POSTGRES_USER=nfsmanager \
-e POSTGRES_PASSWORD=change-me \
-e POSTGRES_DB=nfsmanager_v3 \
-v nfs-manager-pgdata:/var/lib/postgresql \
postgres:18-alpine
docker run -d \
--name nfs-manager-app \
--network nfs-manager-net \
--privileged \
-p 3000:3000 -p 8080:8080 -p 2049:2049 -p 111:111 \
-v nfs-share:/srv \
-e DATABASE_HOST=nfs-manager-postgres \
-e DATABASE_PASSWORD=change-me \
-e JWT_ACCESS_SECRET=change-me-access-secret-min-32-chars \
-e JWT_REFRESH_SECRET=change-me-refresh-secret-min-32-chars \
-e NEXT_PUBLIC_API_BASE=http://localhost:8080/api/v3 \
-e CORS_ORIGIN=http://localhost:3000 \
tuitentuan/nfs-manager-v3:latest
Replace every change-me value. DATABASE_PASSWORD must match POSTGRES_PASSWORD. Check docker logs nfs-manager-app for the one-time admin password.
| Variable | Required | Notes |
|---|---|---|
DATABASE_PASSWORD | Yes | Must match Postgres password |
JWT_ACCESS_SECRET | Yes | Long random string |
JWT_REFRESH_SECRET | Yes | Long random string |
NEXT_PUBLIC_API_BASE | Recommended | Browser API URL; written to public/env.js at startup |
CORS_ORIGIN | Recommended | Comma-separated browser origins |
Full reference: README — Docker environment variables.
| Mount | Purpose |
|---|---|
/srv | NFS export paths (bind-mount or named volume) |
| Postgres data volume | Required when running external Postgres |
Compose bind-mounts ./deploy/srv → /srv for local testing.
--privileged so the kernel NFS daemon can start inside the image.NFS_ROOT_ALLOWLIST (default includes /srv, /data, /export, /mnt).DATABASE_HOST resolves on the Docker network and DATABASE_PASSWORD matches POSTGRES_PASSWORD.NEXT_PUBLIC_API_BASE to a URL reachable from the browser (not an internal Docker hostname).--privileged; on Docker Desktop, use a Linux or WSL2 NFS client.CORS_ORIGIN to your UI origin (e.g. http://localhost:3000).The production image is built from deploy/Dockerfile at the repository root. It packages:
/api/v3, JWT auth, PostgreSQL persistenceexportfsPostgreSQL (TimescaleDB in compose) runs as a separate service. See deploy/docker-compose.yml and deploy/.env.example.
Image: tuitentuan/nfs-manager-v3 on Docker Hub.
| Tag | When to use |
|---|---|
v1.0.0 | Pin to the v1.0.0 release |
latest | Always pull the newest stable build (updated on each v*.*.* tag push via CI) |
Future releases use semver tags (v1.1.0, …). Pin production deployments to a specific version tag.
From the repo root:
cp deploy/.env.example deploy/.env
# Edit DATABASE_PASSWORD, POSTGRES_PASSWORD, JWT_* secrets
make docker-up
| Service | Default URL |
|---|---|
| UI | http://localhost:3001/login |
| API | http://localhost:8081/api/v3/health |
| NFS | localhost:2049 |
Stop: make docker-down.
On first startup: docker compose -f deploy/docker-compose.yml logs app for the one-time admin password.
Pull the image:
docker pull tuitentuan/nfs-manager-v3:v1.0.0
Minimal two-container setup (Postgres + app) — see README — Run with docker run for the full command block with ports and env vars.
Build locally instead:
docker build -f deploy/Dockerfile -t nfs-manager-v3:latest \
--build-arg NEXT_PUBLIC_APP_NAME="NFS Manager v3" .
Runtime configuration comes from environment variables and (in compose) deploy/.env.
Build-time: NEXT_PUBLIC_APP_NAME (baked into the Next.js bundle during docker build).
Runtime (required): DATABASE_PASSWORD, JWT_ACCESS_SECRET, JWT_REFRESH_SECRET. In compose, also set POSTGRES_PASSWORD to the same value as DATABASE_PASSWORD.
Runtime (common): NEXT_PUBLIC_API_BASE, CORS_ORIGIN, NFS_ROOT_ALLOWLIST, MANAGED_EXPORTS_PATH, APP_PORT, API_PORT.
Condensed tables and defaults: README — Docker environment variables.
| Path | Role |
|---|---|
/srv | Export paths served over NFS |
/etc/exports.d/nfs-manager.exports | Managed exports file (inside container) |
| Postgres volume | User/database data (compose service postgres_data) |
Compose maps deploy/srv/ to /srv for test exports.
privileged: true (or docker run --privileged) is required for in-container kernel NFS.deploy/.env or use placeholder secrets in production.admin user on first run; change the password under Settings.| Symptom | Likely cause | Fix |
|---|---|---|
set POSTGRES_PASSWORD in deploy/.env | Missing compose secrets | Copy and edit deploy/.env.example |
| Browser cannot reach API | Wrong NEXT_PUBLIC_API_BASE | Use host-reachable URL (e.g. http://localhost:8081/api/v3 for compose defaults) |
| NFS export warnings on Desktop | Bind-mount + non-Linux host | API/UI still work; test NFS mounts from Linux/WSL2 |
| Migration errors on startup | Postgres not ready | Compose depends_on healthcheck; wait for pg_isready |
Stale latest tag | Old local cache | docker pull tuitentuan/nfs-manager-v3:latest |
Content type
Image
Digest
sha256:2efaeab55…
Size
67.8 MB
Last updated
3 months ago
docker pull tuitentuan/nfs-manager-v3