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

Docker部署Strapi上传文件遇ACCES权限拒绝问题求助

解决Strapi Docker部署媒体库上传EACCES权限问题

问题根源

你遇到的EACCES: permission denied错误,核心原因是宿主机./public/uploads目录的权限与容器内运行Strapi的node用户不匹配。Docker挂载绑定目录时会保留宿主机的权限设置,容器内默认的node用户(UID/GID为1000)没有该目录的写入权限,导致上传文件时无法创建文件,最终引发容器崩溃。

解决方案

1. 修复宿主机uploads目录权限

在Ubuntu宿主机执行以下命令,确保容器内node用户拥有uploads目录的读写权限:

# 先创建uploads目录(如果不存在)
mkdir -p ./public/uploads
# 将目录所属用户/组改为UID 1000(对应容器内的node用户)
sudo chown -R 1000:1000 ./public/uploads

2. 优化Dockerfile权限配置(可选但推荐)

在你的Dockerfile中添加创建uploads目录并设置权限的步骤,确保容器内目录权限初始化正确:

FROM node:18-alpine
# Installing libvips-dev for sharp Compatibility
RUN apk update && apk add --no-cache build-base gcc autoconf automake zlib-dev libpng-dev nasm bash vips-dev
ARG NODE_ENV=development
ENV NODE_ENV=${NODE_ENV}

WORKDIR /opt/
COPY package.json yarn.lock ./
RUN yarn config set network-timeout 600000 -g && yarn install
ENV PATH /opt/node_modules/.bin:$PATH

WORKDIR /opt/app
COPY . .
# 新增:提前创建uploads目录并设置node用户权限
RUN mkdir -p /opt/app/public/uploads && chown -R node:node /opt/app/public/uploads
RUN chown -R node:node /opt/app
USER node
RUN ["yarn", "build"]
EXPOSE 1337
CMD ["yarn", "dev"]

3. 验证权限是否生效

重新构建并启动容器后,进入容器检查权限状态:

docker exec -it strapi bash
# 查看uploads目录权限
ls -ld /opt/app/public/uploads

正常输出应显示目录所属用户为node,类似:

drwxr-xr-x 2 node node 4096 Aug 16 23:00 /opt/app/public/uploads

额外注意

  • 避免使用chmod 777粗暴解决权限问题,这会带来严重安全风险,正确做法是匹配用户UID/GID。
  • 若你自定义了容器内node用户的UID/GID,需将宿主机目录权限改为对应的UID/GID值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 02:55:58