How to keep Cache in self-managed Runner

I am trying to keep cache of node-modules between jobs. But its not working. I am using docker self-hosted runner.
Here is my config

concurrent = 1
check_interval = 0
shutdown_timeout = 0

[session_server]
  session_timeout = 1800

[[runners]]
  name = "docker"
  url = "https://gitlab.com/"
  id = 29751782
  token = ""
  token_obtained_at = 2023-11-24T11:57:24Z
  token_expires_at = 0001-01-01T00:00:00Z
  executor = "docker"
  [runners.cache]
    MaxUploadedArchiveSize = 0
  [runners.docker]
    tls_verify = false
    image = "ruby:2.7"
    privileged = true
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["/cache"]
    shm_size = 0
    network_mtu = 0

And here is my yml

stages:
  - install_dependencies
  - run_tests
  - generate_report_deploy_history_deploy_to_gl_pages
cache:
  paths:
    - node_modules/

install_dependencies:
  stage: install_dependencies
  image: atools/chrome-headless:java17-nodelts-latest
  script:
    - npm install

run_test_chromeBrowser:
  stage: run_tests
  image: atools/chrome-headless:java17-nodelts-latest
  script:
  artifacts:
    when: always
    expire_in: 1 week
    paths:
      - ./allure-results/
  allow_failure: true

And I get this log

Running with gitlab-runner 16.6.0 (3046fee8)
  on docker y7Aqz925, system ID: s_f570d9fd2e8f
Resolving secrets
00:00
Preparing the "docker" executor
00:03
Using Docker executor with image atools/chrome-headless:java17-nodelts-latest ...
Pulling docker image atools/chrome-headless:java17-nodelts-latest ...
Using docker image sha256:55b15462ff050d1c6712db159176cc7d22eef185e5be0060739e483a8919d740 for atools/chrome-headless:java17-nodelts-latest with digest atools/chrome-headless@sha256:c37cf330d033751682578ddfc77a16f80599367e70790dd9610b9e2fccd4f776 ...
Preparing environment
00:00
Running on runner-y7aqz925-project-52336011-concurrent-0 via DESKTOP-QPP84RJ...
Getting source from Git repository
00:03
Fetching changes with git depth set to 20...
Reinitialized existing Git repository in /builds/test_kravch773/pre_setup_project/.git/
Checking out cb8b616c as detached HEAD (ref is main)...
Removing "..\\..\\..\\cache\\test_kravch773\\pre_setup_project\\default-protected\\cache.zip"
Removing node_modules/
Skipping Git submodules setup
Restoring cache
00:00
Checking cache for default-protected...
No URL provided, cache will not be downloaded from shared cache server. Instead a local version of cache will be extracted. 
Successfully extracted cache
Executing "step_script" stage of the job script
00:01
Using docker image sha256:55b15462ff050d1c6712db159176cc7d22eef185e5be0060739e483a8919d740 for atools/chrome-headless:java17-nodelts-latest with digest atools/chrome-headless@sha256:c37cf330d033751682578ddfc77a16f80599367e70790dd9610b9e2fccd4f776 ...
$ ls -la
total 300
drwxrwxrwx 5 root root   4096 Nov 24 14:44 .
drwxrwxrwx 4 root root   4096 Nov 24 13:13 ..
drwxrwxrwx 6 root root   4096 Nov 24 14:44 .git
-rw-rw-rw- 1 root root    122 Nov 24 13:13 .gitignore
-rw-rw-rw- 1 root root   2725 Nov 24 13:40 .gitlab-ci.yml
drwxrwxrwx 2 root root   4096 Nov 24 13:13 .idea
-rw-rw-rw- 1 root root    535 Nov 24 13:13 package.json
-rw-rw-rw- 1 root root 242894 Nov 24 14:44 package-lock.json
-rw-rw-rw- 1 root root    131 Nov 24 13:13 .prettierrc
-rw-rw-rw- 1 root root   6205 Nov 24 13:13 README.md
drwxrwxrwx 4 root root   4096 Nov 24 13:13 test
-rw-rw-rw- 1 root root  12656 Nov 24 13:13 wdio.conf.chrome.js
$ npm run Run_tests
> Run_tests
> wdio run wdio.conf.chrome.js
sh: 1: wdio: not found
Uploading artifacts for failed job
00:01
Uploading artifacts...
WARNING: ./allure-results/: no matching files. Ensure that the artifact path is relative to the working directory (/builds/test_kravch773/pre_setup_project) 
ERROR: No files to upload                          
Cleaning up project directory and file based variables
00:00
ERROR: Job failed: exit code 1