diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..6ba76bd --- /dev/null +++ b/.dockerignore @@ -0,0 +1,6 @@ +.git +.gitignore +docs +README.md +RELEASE_NOTES.md +install.sh diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..daae9e7 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,23 @@ +FROM node:24-alpine + +RUN apk add --no-cache docker-cli curl + +WORKDIR /app + +COPY server.js index.html ./ +COPY scripts/ ./scripts/ + +RUN chown -R node:node /app + +USER node + +ENV NODE_ENV=production +ENV DASHBOARD_PORT=3001 +ENV DASHBOARD_ALLOW_HTTP=true + +EXPOSE 3001 + +HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ + CMD curl -sf http://127.0.0.1:${DASHBOARD_PORT:-3001}/ || exit 1 + +CMD ["node", "server.js"] diff --git a/README.md b/README.md index 314c91e..3417515 100644 --- a/README.md +++ b/README.md @@ -145,6 +145,38 @@ View logs: journalctl -u agent-dashboard -f ``` +### Docker + +```bash +# Build +docker build -t openclaw-dashboard . + +# Run +docker run -d \ + --name openclaw-dashboard \ + -p 3001:3001 \ + -e WORKSPACE_DIR=/app/workspace \ + -e DASHBOARD_ALLOW_HTTP=true \ + -v ~/.openclaw:/home/node/.openclaw:ro \ + -v ~/.openclaw/workspace:/app/workspace \ + openclaw-dashboard +``` + +For Docker management page access, pass the Docker socket: + +```bash +docker run -d \ + --name openclaw-dashboard \ + -p 3001:3001 \ + -e WORKSPACE_DIR=/app/workspace \ + -e DASHBOARD_ALLOW_HTTP=true \ + -v ~/.openclaw:/home/node/.openclaw:ro \ + -v ~/.openclaw/workspace:/app/workspace \ + -v /var/run/docker.sock:/var/run/docker.sock:ro \ + --group-add $(stat -c '%g' /var/run/docker.sock) \ + openclaw-dashboard +``` + ### Environment Variables | Variable | Description | Default |