Is this a bug or a permission issue?

Hello,
The permissions of the directory where the program sources are located are as follows:

# ls -la
drwxr-xr-x 18 jason jason 4096 May 12 23:05 portal

The compose and Dockerfile files are as follows:

services:
  portal:
    container_name: portal
    build:
      context: /home/jason/portal/
      dockerfile: Dockerfile
    environment:
      - NODE_ENV=development
      - CHOKIDAR_USEPOLLING="true"
      - USER_ID=${USER_ID:-999}
      - GROUP_ID=${GROUP_ID:-995}
    user: "${USER_ID:-999}:${GROUP_ID:-995}"
    volumes:
      - /home/docki/dev/portal-view:/app
      - /app/node_modules
      - /app/.next
    ports:
      - "127.0.0.1:3000:3000"
    deploy:
      resources:
        limits:
          cpus: '4.0'
          memory: 4G

And:

FROM node:23-alpine

# Create app directory with proper permissions
RUN mkdir -p /home/node/app/node_modules && \
    chown -R node:node /home/node/app

WORKDIR /home/node/app

# Copy package files first
COPY --chown=node:node package*.json ./

# Update npm and install dependencies
USER root
RUN npm install -g npm@latest
USER node

RUN npm install --legacy-peer-deps

# Copy app files (excluding problematic paths)
COPY --chown=node:node . .

EXPOSE 3000

CMD ["npm", "run", "dev"]

After running the container I got the following error:

✓ Starting...
Error: EISDIR: illegal operation on a directory, open '/app/next-env.d.ts'
    at async open (node:internal/fs/promises:634:25)
    at async Object.writeFile (node:internal/fs/promises:1208:14)
    at async writeAppTypeDeclarations (/app/node_modules/next/dist/lib/typescript/writeAppTypeDeclarations.js:59:5)
    at async verifyTypeScriptSetup (/app/node_modules/next/dist/lib/verify-typescript-setup.js:124:9)
    at async verifyTypeScript (/app/node_modules/next/dist/server/lib/router-utils/setup-dev-bundler.js:112:26)
    at async startWatcher (/app/node_modules/next/dist/server/lib/router-utils/setup-dev-bundler.js:139:29)
    at async setupDevBundler (/app/node_modules/next/dist/server/lib/router-utils/setup-dev-bundler.js:775:20)
    at async Span.traceAsyncFn (/app/node_modules/next/dist/trace/trace.js:154:20)
    at async initialize (/app/node_modules/next/dist/server/lib/router-server.js:80:30)
    at async Server.<anonymous> (/app/node_modules/next/dist/server/lib/start-server.js:249:36) {
  errno: -21,
  code: 'EISDIR',
  syscall: 'open',
  path: '/app/next-env.d.ts'
}

But inside the container, the file permissions are as follows:

/app # ls -la
total 748
drwxr-xr-x    1 node     node          4096 May 12 17:32 .
drwxr-xr-x    1 root     root          4096 May 13 05:29 ..
-rw-r--r--    1 node     node           127 May 12 15:27 .dockerignore
-rw-r--r--    1 node     node           385 May 11 09:35 .gitignore
drwxr-xr-x    1 node     node          4096 May 12 17:32 .next
-rw-r--r--    1 node     node            69 May 11 09:35 .prettierrc
-rw-r--r--    1 node     node          1954 May 11 09:35 App.tsx
drwxr-xr-x    1 node     node          4096 May 11 09:35 app
drwxr-xr-x    1 node     node          4096 May 11 09:35 components
drwxr-xr-x    1 node     node          4096 May 11 09:35 contracts
drwxr-xr-x    1 node     node          4096 May 11 09:35 exceptions
drwxr-xr-x    1 node     node          4096 May 11 09:35 forms
drwxr-xr-x    1 node     node          4096 May 12 05:39 helpers
drwxr-xr-x    1 node     node          4096 May 11 09:35 hooks
-rw-r--r--    1 node     node          1813 May 11 09:35 i18n.ts
-rw-r--r--    1 node     node           198 May 11 09:35 next.config.js
-rw-r--r--    1 node     node           427 May 11 09:35 ni18n.config.ts.js
drwxr-xr-x    1 node     node         24576 May 12 17:32 node_modules
-rw-r--r--    1 node     node        581282 May 11 09:35 package-lock.json
-rw-r--r--    1 node     node          3511 May 11 09:35 package.json
-rw-r--r--    1 node     node            95 May 11 09:35 postcss.config.js
drwxr-xr-x    1 node     node          4096 May 11 09:35 public
drwxr-xr-x    1 node     node          4096 May 11 09:35 services
drwxr-xr-x    1 node     node          4096 May 11 09:35 store
drwxr-xr-x    1 node     node          4096 May 11 09:35 styles
-rw-r--r--    1 node     node          3643 May 11 09:35 tailwind.config.js
-rw-r--r--    1 node     node           624 May 11 09:35 theme.config.tsx
-rw-r--r--    1 node     node           790 May 11 09:35 tsconfig.json

Can’t we say that this problem is unfounded?

Thank you.

Hello,
The problem can be solved by adding RUN chmod -R 777 . to the Dockerfile, but this creates a security issue.

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.