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

如何修复docker-compose构建Node.js应用时出现的FileNotFoundError错误

Docker构建Node.js后端应用故障排查

问题背景

我正在学习Docker相关课程,对示例Node.js后端应用执行Docker构建时出现故障,相关配置和报错信息如下:

相关配置

frontend Dockerfile

FROM node:14.16.0-alpine3.13
RUN addgroup app && adduser -S -G app app
USER app
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000 
CMD ["npm", "start"]

backend Dockerfile

FROM node:14.16.0-alpine3.13
RUN addgroup app && adduser -S -G app app
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . . 
EXPOSE 3001 
USER app
CMD ["npm", "start"]

docker-compose.yml

version: "3.8"

services:
  frontend:
    depends_on: 
      - backend
    build: ./frontend
    ports:
      - 3000:3000

  backend: 
    depends_on: 
      - db
    build: ./backend
    ports: 
      - 3001:3001
    environment: 
      DB_URL: mongodb://db/vidly
    command: ./docker-entrypoint.sh

  db:
    image: mongo:4.0-xenial
    ports:
      - 27017:27017
    volumes:
      - vidly:/data/db

volumes:
  vidly:

初始报错堆栈

Building backend
Sending build context to Docker daemon  291.3kB
Step 1/9 : FROM node:14.16.0-alpine3.13
14.16.0-alpine3.13: Pulling from library/node
ca3cd42a7c95: Pull complete 
cf8dc363e30f: Pull complete 
074ae49463c4: Pull complete 
48fd78e4b532: Pull complete 
Digest: sha256:2c51dc462a02f15621e7486774d36d048a27225d581374b002b8477a79a59b4b
Status: Downloaded newer image for node:14.16.0-alpine3.13
 ---> 50bfd284aa0d
Step 2/9 : RUN addgroup app && adduser -S -G app app
 ---> Running in 4183bada01d2
Removing intermediate container 4183bada01d2
 ---> 0c55d313489a
Step 3/9 : WORKDIR /app
 ---> Running in e6da0a502c0c
Removing intermediate container e6da0a502c0c
 ---> c62eee1e61e1
Step 4/9 : COPY package*.json ./
 ---> caad8596ddd4
Step 5/9 : RUN npm install
 ---> Running in 5d2f331053db

> nodemon@2.0.7 postinstall /app/node_modules/nodemon
> node bin/postinstall || exit 0

Love nodemon? You can now support the project via the open collective:
 > https://opencollective.com/nodemon/donate

npm WARN vidly-backend@1.0.0 No description
npm WARN vidly-backend@1.0.0 No repository field.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@2.3.1 (node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@2.3.1: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})

added 770 packages from 462 contributors and audited 771 packages in 10.856s

35 packages are looking for funding
  run `npm fund` for details

found 90 vulnerabilities (61 moderate, 28 high, 1 critical)
  run `npm audit fix` to fix them, or `npm audit` for details
Removing intermediate container 5d2f331053db
 ---> 89123dc063c8
Step 6/9 : COPY . .
 ---> 74c3d17d99a8
Step 7/9 : EXPOSE 3001
 ---> Running in db775adf83f0
Removing intermediate container db775adf83f0
 ---> 82e0d9220d54
Step 8/9 : USER app
 ---> Running in 95d1419578ac
Removing intermediate container 95d1419578ac
 ---> ffb4ca92826e
Step 9/9 : CMD ["npm", "start"]
 ---> Running in d1b88a01f889
Removing intermediate container d1b88a01f889
 ---> 418d04e16184
Successfully built 418d04e16184
Successfully tagged vidly_backend:latest
Traceback (most recent call last):
  File "docker-compose", line 3, in <module>
  File "compose/cli/main.py", line 81, in main
  File "compose/cli/main.py", line 203, in perform_command
  File "compose/metrics/decorator.py", line 18, in wrapper
  File "compose/cli/main.py", line 1186, in up
  File "compose/cli/main.py", line 1182, in up
  File "compose/project.py", line 664, in up
  File "compose/service.py", line 364, in ensure_image_exists
  File "compose/service.py", line 1133, in build
  File "compose/service.py", line 1948, in build
FileNotFoundError: [Errno 2] No such file or directory: '/tmp/tmpafoiltwd'
[39279] Failed to execute script docker-compose

补充测试情况

将USER app指令前移到第3行后,出现权限报错:
调整后的backend Dockerfile:

FROM node:14.16.0-alpine3.13
RUN addgroup app && adduser -S -G app app
USER app
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . . 
EXPOSE 3001 
CMD ["npm", "start"]

对应报错堆栈:

npm WARN checkPermissions Missing write access to /app
npm WARN vidly-backend@1.0.0 No description
npm WARN vidly-backend@1.0.0 No repository field.

npm ERR! code EACCES
npm ERR! syscall access
npm ERR! path /app
npm ERR! errno -13
npm ERR! Error: EACCES: permission denied, access '/app'
npm ERR!  [Error: EACCES: permission denied, access '/app'] {
npm ERR!   errno: -13,
npm ERR!   code: 'EACCES',
npm ERR!   syscall: 'access',
npm ERR!   path: '/app'
npm ERR! }

解决方案

1. 修复容器内权限问题

前移USER指令后出现权限报错是因为WORKDIR /app默认是root用户创建的,普通用户app没有写入权限,需要在创建app用户后、切换用户前,手动创建/app目录并修改所属权,正确的Dockerfile写法如下:

FROM node:14.16.0-alpine3.13
RUN addgroup app && adduser -S -G app app
# 提前创建目录并修改权限
RUN mkdir /app && chown app:app /app
USER app
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . . 
EXPOSE 3001 
CMD ["npm", "start"]

2. 修复宿主机docker-compose的临时目录报错

FileNotFoundError: /tmp/tmpafoiltwd是docker-compose本身的运行错误,和容器内配置无关,按以下步骤排查即可:

  • 清理宿主机docker构建缓存:执行docker system prune -f
  • 清空/tmp目录下docker-compose相关的临时残留文件:执行rm -rf /tmp/tmp*docker*
  • 若仍报错,卸载当前二进制版docker-compose,升级到最新稳定版docker-compose即可解决。

内容的提问来源于stack exchange,提问作者Nothing here

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 19:39:03