'Express server can't read key in Docker container

I am dockerizing a system that uses a pem and key to authenticate with a remote dev server. Unfortunately, it would appear that it is unable to find the file despite it being in the docker image.

Error

server_1   | Error: ENOENT: no such file or directory, open '/app/certificates/jwt.key'
server_1   |     at Object.openSync (fs.js:497:3)
server_1   |     at Object.readFileSync (fs.js:393:35)
server_1   |     at Object.<anonymous> (/app/controllers/user.js:7:16)
server_1   |     at Module._compile (internal/modules/cjs/loader.js:1085:14)
server_1   |     at Object.Module._extensions..js (internal/modules/cjs/loader.js:1114:10)
server_1   |     at Module.load (internal/modules/cjs/loader.js:950:32)
server_1   |     at Function.Module._load (internal/modules/cjs/loader.js:790:12)
server_1   |     at Module.require (internal/modules/cjs/loader.js:974:19)
server_1   |     at require (internal/modules/cjs/helpers.js:101:18)
server_1   |     at Object.<anonymous> (/app/routes/upload.js:8:24)
server_1   |     at Module._compile (internal/modules/cjs/loader.js:1085:14)
server_1   |     at Object.Module._extensions..js (internal/modules/cjs/loader.js:1114:10)
server_1   |     at Module.load (internal/modules/cjs/loader.js:950:32)
server_1   |     at Function.Module._load (internal/modules/cjs/loader.js:790:12)
server_1   |     at Module.require (internal/modules/cjs/loader.js:974:19)
server_1   |     at require (internal/modules/cjs/helpers.js:101:18) {
server_1   |   errno: -2,
server_1   |   syscall: 'open',
server_1   |   code: 'ENOENT',
server_1   |   path: '/app/certificates/jwt.key'
server_1   | }

Line (server/controllers/user.js -> app/controllers/user.js)

const pem = fs.readFileSync(path.resolve(__dirname, "../certificates/jwt.key"));

Dockerfile

FROM node:14
RUN mkdir app
WORKDIR /app
COPY . .
RUN npm install
RUN npm run get_key
EXPOSE 5000
CMD [ "npm", "run", "start" ]

package.json

  "scripts": {
    "test": "mocha -r dotenv/config ./**/*.test.js",
    "start": "node -r dotenv/config server.js",
    "dev": "nodemon -r dotenv/config server.js",
    "get_key": "ssh-keygen -t rsa -b 4096 -m PEM -f ./certificates/jwt.key -P ''"
  },

enter image description here



Solution 1:[1]

The volume mount was overriding the key building. Need to generate the key locally first before composing.

  server:
    build: server
    ports: 
      - "5000:5000"
    restart: always
    depends_on:
      - mongodb
    volumes:
      - ./server:/app

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Michael Paccione