Running Directus as a custom user in Docker

For better security I would like to run Directus as a specific user, since I host multiple Directus instances on the some host.

When I try to run the container as a specific user I’m getting this error:

Error: EACCES: permission denied, mkdir '/.pm2/logs'
    at Object.mkdirSync (node:fs:1364:26)
    at mkdirpNativeSync (/directus/node_modules/.pnpm/mkdirp@1.0.4/node_modules/mkdirp/lib/mkdirp-native.js:29:10)
    at Function.mkdirpSync [as sync] (/directus/node_modules/.pnpm/mkdirp@1.0.4/node_modules/mkdirp/index.js:21:7)
    at Client.initFileStructure (/directus/node_modules/.pnpm/pm2@5.4.3/node_modules/pm2/lib/Client.js:133:25)
    at new module.exports (/directus/node_modules/.pnpm/pm2@5.4.3/node_modules/pm2/lib/Client.js:38:8)
    at new API (/directus/node_modules/.pnpm/pm2@5.4.3/node_modules/pm2/lib/API.js:107:19)
    at Object.<anonymous> (/directus/node_modules/.pnpm/pm2@5.4.3/node_modules/pm2/index.js:11:18)
    at Module._compile (node:internal/modules/cjs/loader:1730:14)
    at Object..js (node:internal/modules/cjs/loader:1895:10)
    at Module.load (node:internal/modules/cjs/loader:1465:32)

My docker-compose.yml:

services:
  directus:
    container_name: "${COMPOSE_PROJECT_NAME}_directus"
    restart: unless-stopped
    image: directus/directus:11.8.0
    user: ${USER_AND_GROUP}

The error makes sense, because the custom user probably doesn’t exist in the Directus container.

Is there a way to run the proces as a specific user?

Replying to myself for future souls having the same question :slight_smile: .

Adding the .pm2 folder as a volume seems to work.
Uploaded files via Directus now also have the same user:group.

I don’t know if this is the way it should be done, but for now it seems to work.

Updated docker-compose.yml:

services:
  directus:
    container_name: "${COMPOSE_PROJECT_NAME}_directus"
    restart: unless-stopped
    image: directus/directus:11.8.0
    user: ${USER_AND_GROUP}
    volumes:
      - ./volumes/uploads:/directus/uploads
      - ./volumes/pm2:/.pm2/