louislam/uptime-kuma-wiki

How to write a compose.yaml for rootless setup?

Open

#134 opened on Nov 1, 2025

View on GitHub
 (8 comments) (0 reactions) (0 assignees)TypeScript (109 forks)github user discovery
feature-requestgood first issuehelp wanted

Repository metrics

Stars
 (99 stars)
PR merge metrics
 (PR metrics pending)

Description

⚠️ Please verify that your question has not already been reported

🛡️ Security Policy

📝 Describe your problem

When running as a docker container with image like 2-rootless, what does the compose.yaml looks like?

I have got the following error message with this compose.yaml:

$ cat compose.yaml
---
# uptime-kuma/compose.yaml

services:
  uptime-kuma:
    image: louislam/uptime-kuma:2-rootless
    container_name: uptime-kuma
    hostname: rocker-uptime-kuma
    environment:
    - PUID=3021
    - PGID=3021
    restart: unless-stopped
    volumes:
      - ./data:/app/data
    ports:
      - "3001:3001"

📝 Error Message(s) or Log

Welcome to Uptime Kuma
Your Node.js version: 20.19.5
2025-11-01T23:18:30Z [SERVER] INFO: Env: production
2025-11-01T23:18:31Z [SERVER] INFO: Uptime Kuma Version: 2.0.2
2025-11-01T23:18:31Z [SERVER] INFO: Loading modules
2025-11-01T23:18:31Z [SERVER] INFO: Creating express and socket.io instance
2025-11-01T23:18:31Z [SERVER] INFO: Server Type: HTTP
Trace: Error: EACCES: permission denied, mkdir 'data/upload/'
    at Object.mkdirSync (node:fs:1372:26)
    at Database.initDataDir (/app/server/database.js:148:16)
    at /app/server/server.js:173:14
    at Object.<anonymous> (/app/server/server.js:1645:3)
    at Module._compile (node:internal/modules/cjs/loader:1521:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1623:10)
    at Module.load (node:internal/modules/cjs/loader:1266:32)
    at Module._load (node:internal/modules/cjs/loader:1091:12)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:164:12)
    at node:internal/main/run_main_module:28:49 {
  errno: -13,
  code: 'EACCES',
  syscall: 'mkdir',
  path: 'data/upload/'
}
    at process.unexpectedErrorHandler (/app/server/server.js:1893:13)
    at process.emit (node:events:524:28)
    at emitUnhandledRejection (node:internal/process/promises:250:13)
    at throwUnhandledRejectionsMode (node:internal/process/promises:385:19)
    at processPromiseRejections (node:internal/process/promises:470:17)
    at process.processTicksAndRejections (node:internal/process/task_queues:96:32)
If you keep encountering errors, please report to https://github.com/louislam/uptime-kuma/issues
2025-11-01T23:18:31Z [] INFO: Cannot write to error.log
Welcome to Uptime Kuma
Your Node.js version: 20.19.5
2025-11-01T23:18:38Z [SERVER] INFO: Env: production
2025-11-01T23:18:39Z [SERVER] INFO: Uptime Kuma Version: 2.0.2
2025-11-01T23:18:39Z [SERVER] INFO: Loading modules
2025-11-01T23:18:40Z [SERVER] INFO: Creating express and socket.io instance
2025-11-01T23:18:40Z [SERVER] INFO: Server Type: HTTP
Trace: Error: EACCES: permission denied, mkdir 'data/upload/'
    at Object.mkdirSync (node:fs:1372:26)
    at Database.initDataDir (/app/server/database.js:148:16)
    at /app/server/server.js:173:14
    at Object.<anonymous> (/app/server/server.js:1645:3)
    at Module._compile (node:internal/modules/cjs/loader:1521:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1623:10)
    at Module.load (node:internal/modules/cjs/loader:1266:32)
    at Module._load (node:internal/modules/cjs/loader:1091:12)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:164:12)
    at node:internal/main/run_main_module:28:49 {
  errno: -13,
  code: 'EACCES',
  syscall: 'mkdir',
  path: 'data/upload/'
}
    at process.unexpectedErrorHandler (/app/server/server.js:1893:13)
    at process.emit (node:events:524:28)
    at emitUnhandledRejection (node:internal/process/promises:250:13)
    at throwUnhandledRejectionsMode (node:internal/process/promises:385:19)
    at processPromiseRejections (node:internal/process/promises:470:17)
    at process.processTicksAndRejections (node:internal/process/task_queues:96:32)
If you keep encountering errors, please report to https://github.com/louislam/uptime-kuma/issues
2025-11-01T23:18:40Z [] INFO: Cannot write to error.log
Welcome to Uptime Kuma
Your Node.js version: 20.19.5
2025-11-01T23:18:41Z [SERVER] INFO: Env: production
2025-11-01T23:18:42Z [SERVER] INFO: Uptime Kuma Version: 2.0.2
2025-11-01T23:18:42Z [SERVER] INFO: Loading modules
2025-11-01T23:18:43Z [SERVER] INFO: Creating express and socket.io instance
2025-11-01T23:18:43Z [SERVER] INFO: Server Type: HTTP
Trace: Error: EACCES: permission denied, mkdir 'data/upload/'
    at Object.mkdirSync (node:fs:1372:26)
    at Database.initDataDir (/app/server/database.js:148:16)
    at /app/server/server.js:173:14
    at Object.<anonymous> (/app/server/server.js:1645:3)
    at Module._compile (node:internal/modules/cjs/loader:1521:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1623:10)
    at Module.load (node:internal/modules/cjs/loader:1266:32)
    at Module._load (node:internal/modules/cjs/loader:1091:12)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:164:12)
    at node:internal/main/run_main_module:28:49 {
  errno: -13,
  code: 'EACCES',
  syscall: 'mkdir',
  path: 'data/upload/'
}
    at process.unexpectedErrorHandler (/app/server/server.js:1893:13)
    at process.emit (node:events:524:28)
    at emitUnhandledRejection (node:internal/process/promises:250:13)
    at throwUnhandledRejectionsMode (node:internal/process/promises:385:19)
    at processPromiseRejections (node:internal/process/promises:470:17)
    at process.processTicksAndRejections (node:internal/process/task_queues:96:32)
If you keep encountering errors, please report to https://github.com/louislam/uptime-kuma/issues
2025-11-01T23:18:43Z [] INFO: Cannot write to error.log
Welcome to Uptime Kuma
Your Node.js version: 20.19.5
2025-11-01T23:18:48Z [SERVER] INFO: Env: production
2025-11-01T23:18:49Z [SERVER] INFO: Uptime Kuma Version: 2.0.2
2025-11-01T23:18:49Z [SERVER] INFO: Loading modules
2025-11-01T23:18:50Z [SERVER] INFO: Creating express and socket.io instance
2025-11-01T23:18:50Z [SERVER] INFO: Server Type: HTTP
Trace: Error: EACCES: permission denied, mkdir 'data/upload/'
    at Object.mkdirSync (node:fs:1372:26)
    at Database.initDataDir (/app/server/database.js:148:16)
    at /app/server/server.js:173:14
    at Object.<anonymous> (/app/server/server.js:1645:3)
    at Module._compile (node:internal/modules/cjs/loader:1521:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1623:10)
    at Module.load (node:internal/modules/cjs/loader:1266:32)
    at Module._load (node:internal/modules/cjs/loader:1091:12)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:164:12)
    at node:internal/main/run_main_module:28:49 {
  errno: -13,
  code: 'EACCES',
  syscall: 'mkdir',
  path: 'data/upload/'
}
    at process.unexpectedErrorHandler (/app/server/server.js:1893:13)
    at process.emit (node:events:524:28)
    at emitUnhandledRejection (node:internal/process/promises:250:13)
    at throwUnhandledRejectionsMode (node:internal/process/promises:385:19)
    at processPromiseRejections (node:internal/process/promises:470:17)
    at process.processTicksAndRejections (node:internal/process/task_queues:96:32)
If you keep encountering errors, please report to https://github.com/louislam/uptime-kuma/issues
2025-11-01T23:18:50Z [] INFO: Cannot write to error.log
Welcome to Uptime Kuma
Your Node.js version: 20.19.5
2025-11-01T23:18:51Z [SERVER] INFO: Env: production
2025-11-01T23:18:52Z [SERVER] INFO: Uptime Kuma Version: 2.0.2
2025-11-01T23:18:52Z [SERVER] INFO: Loading modules
2025-11-01T23:18:53Z [SERVER] INFO: Creating express and socket.io instance
2025-11-01T23:18:53Z [SERVER] INFO: Server Type: HTTP
Trace: Error: EACCES: permission denied, mkdir 'data/upload/'
    at Object.mkdirSync (node:fs:1372:26)
    at Database.initDataDir (/app/server/database.js:148:16)
    at /app/server/server.js:173:14
    at Object.<anonymous> (/app/server/server.js:1645:3)
    at Module._compile (node:internal/modules/cjs/loader:1521:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1623:10)
    at Module.load (node:internal/modules/cjs/loader:1266:32)
    at Module._load (node:internal/modules/cjs/loader:1091:12)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:164:12)
    at node:internal/main/run_main_module:28:49 {
  errno: -13,
  code: 'EACCES',
  syscall: 'mkdir',
  path: 'data/upload/'
}
    at process.unexpectedErrorHandler (/app/server/server.js:1893:13)
    at process.emit (node:events:524:28)
    at emitUnhandledRejection (node:internal/process/promises:250:13)
    at throwUnhandledRejectionsMode (node:internal/process/promises:385:19)
    at processPromiseRejections (node:internal/process/promises:470:17)
    at process.processTicksAndRejections (node:internal/process/task_queues:96:32)
If you keep encountering errors, please report to https://github.com/louislam/uptime-kuma/issues
2025-11-01T23:18:53Z [] INFO: Cannot write to error.log

🐻 Uptime-Kuma Version

2

💻 Operating System and Arch

Debian GNU/Linux 12 (bookworm)

🌐 Browser

Google Chrome Version 142.0.7444.60 (Official Build) (arm64)

🖥️ Deployment Environment

  • Runtime Environment:
    • Docker: Version 28.5.1, build e180ab8
    • Docker Compose: Version 2.40.3
  • Uptime Kuma Setup: docker image louislam/uptime-kuma:2

Contributor guide