You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu下Docker Desktop绑定卷权限问题求助(EACCES错误)

Ubuntu下Docker Desktop绑定卷权限冲突导致EACCES错误

场景

在Ubuntu系统使用Docker Desktop进行本地开发,通过Docker Compose运行Nest.js+Python混合项目,将宿主当前目录挂载为容器内的卷,希望修改宿主代码后同步到容器并调试运行。

核心问题

Linux环境下Docker Desktop绑定卷时会重映射用户和组ID:容器内root用户(UID0)被映射为宿主用户(宿主UID为1000),但API容器使用UID为1000的非root用户pn运行,导致挂载卷同步的文件所有者为root(UID0),容器内运行用户pn无权限写入,出现EACCES: permission denied错误。

配置文件

docker-compose.yml

version: '3.8'

services:
  api:
    build:
      context: .
      dockerfile: Dockerfile
      args:
        - APP_PORT=${APP_PORT:-3000}
      # Only build development stage from Dockerfile
      target: development
    container_name: api-app
    volumes:
      - .:/usr/src/app
      - /usr/src/app/node_modules
    networks:
      - appnetwork
    depends_on:
      - postgres
    env_file:
      - .env
    # Run in debug mode: npm run start:debug
    # Run in dev mode: npm run start:dev
    command: npm run start:debug
    ports:
      - ${APP_PORT}:${APP_PORT}
      - 9229:9229
    restart: unless-stopped

  postgres:
    image: postgres:15.2
    container_name: postgres-app
    environment:
      POSTGRES_USER: ${DB_USERNAME}
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_DB: ${DB_NAME}
      TZ: ${TZ}
    networks:
      - appnetwork
    volumes:
      - db-data:/var/lib/postgresql/data
    ports:
      - 5432:5432

networks:
  appnetwork:
    name: shared-app-network
    driver: bridge

volumes:
  db-data:
    driver: local

Dockerfile

ARG IMAGE=nikolaik/python-nodejs:python3.11-nodejs18-slim

FROM $IMAGE AS base
RUN mkdir -p /usr/src/app
RUN chown -R pn:pn /usr/src/app && chmod -R 700 /usr/src/app
ENV TZ="America/New_York"
WORKDIR /usr/src/app

FROM base AS development

USER pn

COPY --chown=pn:pn package*.json ./
COPY --chown=pn:pn python/* python/

RUN npm install
RUN pip install -r python/requirements.txt

COPY --chown=pn:pn . .

RUN npm run build

CMD [ "node", "dist/main" ]

## PRODUCTION 

FROM base AS production 
ARG APP_PORT=$APP_PORT

ARG NODE_ENV=production
ENV NODE_ENV=$NODE_ENV

USER pn

COPY --chown=pn:pn package*.json ./
COPY --chown=pn:pn python/* python/

RUN npm install
RUN pip install -r python/requirements.txt 

COPY --from=development /usr/src/app/dist dist/

EXPOSE ${APP_PORT}

CMD [ "node", "dist/main" ]

容器内错误信息

api-app       | 
api-app       | error TS5033: Could not write file '/usr/src/app/dist/utils/utils.js.map': EACCES: permission denied, mkdir '/usr/src/app/dist'.
api-app       | 
api-app       | error TS5033: Could not write file '/usr/src/app/dist/utils/xl-parser.d.ts': EACCES: permission denied, mkdir '/usr/src/app/dist'.
api-app       | 
api-app       | error TS5033: Could not write file '/usr/src/app/dist/utils/xl-parser.js': EACCES: permission denied, mkdir '/usr/src/app/dist'.
api-app       | 
api-app       | error TS5033: Could not write file '/usr/src/app/dist/utils/xl-parser.js.map': EACCES: permission denied, mkdir '/usr/src/app/dist'.

容器内文件权限信息

ls -la 输出

$ ls -la
total 832
drwxrwxr-x   8 root root   4096 May 10 13:42 .
drwxr-xr-x   1 root root   4096 May  9 20:22 ..
-rw-rw-r--   1 root root     92 May  9 20:27 .dockerignore
-rw-rw-r--   1 root root    299 May  9 23:16 .env
-rw-rw-r--   1 root root    199 May  9 20:27 .env.sample
-rw-rw-r--   1 root root    788 May  9 20:27 .eslintrc.js
drwxrwxr-x   8 root root   4096 May 10 13:33 .git
-rw-rw-r--   1 root root    522 May  9 20:27 .gitignore
-rw-rw-r--   1 root root     60 May  9 20:27 .prettierrc
drwxrwxr-x   2 root root   4096 May  9 20:27 .vscode
-rw-rw-r--   1 root root    864 May 10 20:53 Dockerfile
-rw-rw-r--   1 root root   2017 May 10 00:00 Dockerfile.dev
-rw-rw-r--   1 root root   1063 May  9 20:27 LICENSE
-rw-rw-r--   1 root root    839 May  9 20:27 README.md
-rw-rw-r--   1 root root   1107 May 10 00:02 docker-compose.yml
-rw-rw-r--   1 root root    483 May 10 13:42 dockercntct.txt
-rw-rw-r--   1 root root   2412 May 10 13:41 dockerinfo.txt
-rw-rw-r--   1 root root    179 May  9 20:27 nest-cli.json
drwxr-xr-x 591 pn   pn    20480 May 10 20:54 node_modules
-rw-rw-r--   1 root root 725053 May  9 20:27 package-lock.json
-rw-rw-r--   1 root root   3418 May  9 20:27 package.json
drwxrwxr-x   2 root root   4096 May  9 20:27 python
drwxrwxr-x  22 root root   4096 May  9 20:27 src
drwxrwxr-x   2 root root   4096 May  9 20:27 test
-rw-rw-r--   1 root root    101 May  9 20:27 tsconfig.build.json
-rw-rw-r--   1 root root    629 May  9 20:27 tsconfig.json

ls -lan 输出

$ ls -lan 
total 832
drwxrwxr-x   8    0    0   4096 May 10 13:42 .
drwxr-xr-x   1    0    0   4096 May  9 20:22 ..
-rw-rw-r--   1    0    0     92 May  9 20:27 .dockerignore
-rw-rw-r--   1    0    0    299 May  9 23:16 .env
-rw-rw-r--   1    0    0    199 May  9 20:27 .env.sample
-rw-rw-r--   1    0    0    788 May  9 20:27 .eslintrc.js
drwxrwxr-x   8    0    0   4096 May 10 13:33 .git
-rw-rw-r--   1    0    0    522 May  9 20:27 .gitignore
-rw-rw-r--   1    0    0     60 May  9 20:27 .prettierrc
drwxrwxr-x   2    0    0   4096 May  9 20:27 .vscode
-rw-rw-r--   1    0    0    864 May 10 20:53 Dockerfile
-rw-rw-r--   1    0    0   2017 May 10 00:00 Dockerfile.dev
-rw-rw-r--   1    0    0   1063 May  9 20:27 LICENSE
-rw-rw-r--   1    0    0    839 May  9 20:27 README.md
-rw-rw-r--   1    0    0   1107 May 10 00:02 docker-compose.yml
-rw-rw-r--   1    0    0    483 May 10 13:42 dockercntct.txt
-rw-rw-r--   1    0    0   2412 May 10 13:41 dockerinfo.txt
-rw-rw-r--   1    0    0    179 May  9 20:27 nest-cli.json
drwxr-xr-x 591 1000 1000  20480 May 10 20:54 node_modules
-rw-rw-r--   1    0    0 725053 May  9 20:27 package-lock.json
-rw-rw-r--   1    0    0   3418 May  9 20:27 package.json
drwxrwxr-x   2    0    0   4096 May  9 20:27 python
drwxrwxr-x  22    0    0   4096 May  9 20:27 src
drwxrwxr-x   2    0    0   4096 May  9 20:27 test
-rw-rw-r--   1    0    0    101 May  9 20:27 tsconfig.build.json
-rw-rw-r--   1    0    0    629 May  9 20:27 tsconfig.json

已尝试的无效方案

  • 将容器内用户ID设为宿主的1000
  • 参考相关博客调整配置
  • 基于Python镜像重新构建容器

求助需求

求可行的解决办法,让容器内pn用户能正常写入挂载卷,实现代码同步调试。

内容的提问来源于stack exchange,提问作者Santhosh Sasidharan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 12:27:05