flame icon indicating copy to clipboard operation
flame copied to clipboard

Can't run it via docker as non-root.

Open flavorgold1 opened this issue 2 years ago • 4 comments

My docker-compose.yml file:

services:
    flame_guest:
      container_name: flame_guest
      image: pawelmalak/flame:latest
      user: 1000:1000
      network_mode: host
      volumes:
        - /path/to/data:/app/data
        - /var/run/docker.sock:/var/run/docker.sock
      environment:
        - PUID=1000
        - PGID=1000
        - TZ=Etc/GMT
        - PASSWORD=password_here
      restart: unless-stopped

sudo docker logs flame_guest:

node:fs:585
  handleErrorFromBinding(ctx);
  ^

Error: EACCES: permission denied, open '/app/public/flame.css'
    at Object.openSync (node:fs:585:3)
    at Object.writeFileSync (node:fs:2157:35)
    at createFile (/app/utils/init/createFile.js:25:6)
    at /app/utils/init/initFiles.js:5:39
    at Array.forEach (<anonymous>)
    at initFiles (/app/utils/init/initFiles.js:5:9)
    at initApp (/app/utils/init/index.js:8:9)
    at /app/server.js:23:9
    at Object.<anonymous> (/app/server.js:41:3)
    at Module._compile (node:internal/modules/cjs/loader:1103:14)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1157:10)
    at Module.load (node:internal/modules/cjs/loader:981:32)
    at Function.Module._load (node:internal/modules/cjs/loader:822:12)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:77:12)
    at node:internal/main/run_main_module:17:47 {
  errno: -13,
  syscall: 'open',
  code: 'EACCES',
  path: '/app/public/flame.css'
}
node:fs:585
  handleErrorFromBinding(ctx);
  ^

Error: EACCES: permission denied, open '/app/public/flame.css'
    at Object.openSync (node:fs:585:3)
    at Object.writeFileSync (node:fs:2157:35)
    at createFile (/app/utils/init/createFile.js:25:6)
    at /app/utils/init/initFiles.js:5:39
    at Array.forEach (<anonymous>)
    at initFiles (/app/utils/init/initFiles.js:5:9)
    at initApp (/app/utils/init/index.js:8:9)
    at /app/server.js:23:9
    at Object.<anonymous> (/app/server.js:41:3)
    at Module._compile (node:internal/modules/cjs/loader:1103:14)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1157:10)
    at Module.load (node:internal/modules/cjs/loader:981:32)
    at Function.Module._load (node:internal/modules/cjs/loader:822:12)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:77:12)
    at node:internal/main/run_main_module:17:47 {
  errno: -13,
  syscall: 'open',
  code: 'EACCES',
  path: '/app/public/flame.css'
}

When I run ps aux, I can see that node server.js is running as root instead of 1000:1000 as it should be.

flavorgold1 avatar Nov 08 '22 05:11 flavorgold1

this would be fixed if https://github.com/pawelmalak/flame/pull/356 was ever merged

glitchcrab avatar Mar 02 '23 09:03 glitchcrab

A "pure docker-compose" workaround is to use the following docker-compose file:

services:
    flame_guest:
      container_name: flame_guest
      image: pawelmalak/flame:latest
      user: 1000:1000
      network_mode: host
      volumes:
        - /path/to/data:/app/data
        - ./initialFiles.empty.json:/app/utils/init/initialFiles.json:ro
        - ./path/to/data/flame.css:/app/public/flame.css:ro
        - /var/run/docker.sock:/var/run/docker.sock
      environment:
        - TZ=Etc/GMT
        - PASSWORD=password_here
      restart: unless-stopped
      command: "node server.js"

You also need to create the following file where the docker-compose file is located (named initialFiles.empty.json):

{
  "files": []
}

This will be used here: https://github.com/pawelmalak/flame/blob/446b4095f6bb06e0f878efb4ac1f990a5ae7d39c/utils/init/initFiles.js#L5

You also need to override the CMD from the dockerfile (hence the command: "node server.js" at the end of the docker-compose)

GitKepler avatar Jul 01 '23 15:07 GitKepler

@GitKepler Does this still workaround still work?

What should flame.css contain? (and should it be read-only as you specified?)

sofakng avatar Oct 25 '23 18:10 sofakng

@GitKepler Does this still workaround still work?

What should flame.css contain? (and should it be read-only as you specified?)

./path/to/data/flame.css contains your custom CSS code (the one you set in Flame UI). You can leave it empty (in which case the only customization that will be applied is from the theme you choose). As for read-only, in my case I do not need to modify it, however if you intend to modify the CSS later on using the web UI, removing the read-only flag would make sense.

The workaround still works with the latest version.

GitKepler avatar Oct 29 '23 08:10 GitKepler