How to store only templates data on docker volume?

  • Hi guys.
    While we'll be investigating an issue from topic I decided to switch to the local file system as storage for templates, instead of AWS S3.

    docker-compose file content:

    version: '3.7'
        build: .
        image: jsreport
        container_name: jsreport
        restart: always
          - "5488:5488"
          - jsreport:/jsreport/data
          - extensions_authentication_admin_username=user
          - extensions_authentication_admin_password=test
        tty: true
        stdin_open: true

    But I receive an jsreport | Error: EACCES: permission denied, open '/app/data/fs.lock' error in the log output and JSRport server is not starting:

    jsreport    | ln: /app/license-key.txt: File exists
    jsreport    | chown: /jsreport/data: Operation not permitted
    jsreport    | chown: /jsreport/data: Operation not permitted
    jsreport    | 2020-04-17T11:16:39.088Z - info: Initializing jsreport@2.7.2 in production mode using configuration file: jsreport.config.json
    jsreport    | 2020-04-17T11:16:39.093Z - info: Searching for available extensions in /app/
    jsreport    | 2020-04-17T11:16:39.104Z - info: Extensions location cache not found, crawling directories
    jsreport    | 2020-04-17T11:16:39.346Z - info: Found 35 extensions
    jsreport    | 2020-04-17T11:16:39.542Z - info: Setting http-server strategy for rendering
    jsreport    | 2020-04-17T11:16:39.710Z - info: Using extension authentication@2.4.2
    jsreport    | 2020-04-17T11:16:39.737Z - info: Using extension cli@2.2.2
    jsreport    | 2020-04-17T11:16:39.739Z - info: Using extension debug@2.1.3
    jsreport    | 2020-04-17T11:16:39.741Z - info: Using extension express@2.6.0
    jsreport    | 2020-04-17T11:16:39.834Z - info: Using extension freeze@2.0.0
    jsreport    | 2020-04-17T11:16:39.837Z - info: Using extension handlebars@2.1.0
    jsreport    | 2020-04-17T11:16:39.840Z - info: Using extension import-export@1.5.1
    jsreport    | 2020-04-17T11:16:39.875Z - info: Using extension jsrender@2.1.1
    jsreport    | 2020-04-17T11:16:39.876Z - info: Using extension tags@2.3.0
    jsreport    | 2020-04-17T11:16:39.878Z - info: Using extension templates@2.3.2
    jsreport    | 2020-04-17T11:16:39.880Z - info: Using extension authorization@2.2.6
    jsreport    | 2020-04-17T11:16:39.885Z - info: Using extension base@2.0.2
    jsreport    | 2020-04-17T11:16:39.886Z - info: Using extension browser-client@2.2.2
    jsreport    | 2020-04-17T11:16:39.894Z - info: Using extension child-templates@1.3.1
    jsreport    | 2020-04-17T11:16:39.899Z - info: Using extension chrome-pdf@1.7.1
    jsreport    | 2020-04-17T11:16:39.945Z - info: Using extension data@2.2.0
    jsreport    | 2020-04-17T11:16:39.947Z - info: Using extension docx@2.5.0
    jsreport    | 2020-04-17T11:16:39.953Z - info: Using extension fs-store@2.7.2
    jsreport    | 2020-04-17T11:16:40.076Z - info: Using extension licensing@2.2.1
    jsreport    | 2020-04-17T11:16:40.079Z - info: Using extension pdf-utils@1.6.1
    jsreport    | 2020-04-17T11:16:40.197Z - info: Using extension pptx@0.5.0
    jsreport    | 2020-04-17T11:16:40.201Z - info: Using extension reports@2.2.1
    jsreport    | 2020-04-17T11:16:40.206Z - info: Using extension static-pdf@0.3.1
    jsreport    | 2020-04-17T11:16:40.208Z - info: Using extension studio@2.7.0
    jsreport    | 2020-04-17T11:16:40.285Z - info: Using extension text@2.0.0
    jsreport    | 2020-04-17T11:16:40.290Z - info: Using extension version-control@1.3.2
    jsreport    | 2020-04-17T11:16:40.360Z - info: Using extension assets@1.5.2
    jsreport    | 2020-04-17T11:16:40.368Z - info: Using extension html-to-xlsx@2.6.0
    jsreport    | 2020-04-17T11:16:40.562Z - info: html-to-xlsx detected chrome as available html engine
    jsreport    | 2020-04-17T11:16:40.564Z - info: Using extension scripts@2.3.0
    jsreport    | 2020-04-17T11:16:40.572Z - info: Using extension studio-theme-dark@0.3.0
    jsreport    | 2020-04-17T11:16:40.574Z - info: Using extension xlsx@2.3.0
    jsreport    | 2020-04-17T11:16:40.710Z - info: Using extension public-templates@2.1.0
    jsreport    | 2020-04-17T11:16:40.711Z - info: Using extension resources@2.0.3
    jsreport    | 2020-04-17T11:16:40.720Z - info: Using extension sample-template@2.5.1
    jsreport    | 2020-04-17T11:16:40.722Z - info: Using general timeout for rendering (reportTimeout: 40000)
    jsreport    | 2020-04-17T11:16:40.722Z - info: Using fs provider for template store.
    jsreport    | 2020-04-17T11:16:40.727Z - info: fs store is persisting using fs
    jsreport    | 2020-04-17T11:16:40.729Z - info: fs store sync is disabled
    jsreport    | 2020-04-17T11:16:40.731Z - info: fs store underlying changes synchronization with studio is disabled
    jsreport    | 2020-04-17T11:16:51.182Z - error: Error occured during reporter init Error: EACCES: permission denied, open '/app/data/fs.lock'
    jsreport    | Error: EACCES: permission denied, open '/app/data/fs.lock'

    Dockerfile is very simple:

    FROM jsreport/jsreport:2.7.2
    COPY --chown=jsreport:jsreport configs/* /app/

    config.jsreport.json looks like this:

      "extensions": {
        "scheduling": {
          "enabled": false
        "scripts": {
          "timeout": 40000,
          "strategy": "http-server"
      "httpPort": 5488,
      "store": {
        "provider": "fs"
      "allowLocalFilesAccess": true,
      "templatingEngines": {
        "strategy": "http-server"
      "reportTimeout": 40000

    If I change the volume config to jsreport:/jsreport, JSReport is running.
    But I don't want to store all jsreport directory on the volume as it also contains config files which I'm changing quite often. So my idea is to store only /jsreport/data directory.

    Thank you!

  • Hm. Exactly the same docker-compose, dockerfile, jsreport.config.json works for me.
    It looks like some kind of permission problem.

  • You're right. docker system prune --all and build from scratch did the trick.

  • I'm having this very same problem and it seems to me that it is right right that this is what should be happening. After all the jsreport:jsreport has no permissions on that volume.

Log in to reply

Looks like your connection to jsreport forum was lost, please wait while we try to reconnect.