Docker构建React应用报错:archive/tar: unknown file mode ?rwxr-xr-x
React应用容器化报错:
archive/tar: unknown file mode ?rwxr-xr-x 解决指南 问题详情
容器化React应用时触发以下错误:
ERROR: failed to solve: archive/tar: unknown file mode ?rwxr-xr-x
完整构建日志
[+] Building 0.0s (0/0) docker:default [+] Building 4.2s (9/16) docker:default => [internal] load build definition from Dockerfile 0.0s => => transferring dockerfile: 380B 0.0s => [internal] load metadata for docker.io/library/nginx:stable-perl 4.0s => [internal] load metadata for docker.io/library/node:lts-alpine 4.0s => [auth] library/nginx:pull token for registry-1.docker.io 0.0s => [auth] library/node:pull token for registry-1.docker.io 0.0s => [internal] load .dockerignore 0.0s => => transferring context: 52B 0.0s => CANCELED [build 1/7] FROM docker.io/library/node:lts-alpine@sha256:a7b980c958bfe4d84ee9263badd95a40c8bb50ad5afdb87902c187fefaef0e24 0.1s => => resolve docker.io/library/node:lts-alpine@sha256:a7b980c958bfe4d84ee9263badd95a40c8bb50ad5afdb87902c187fefaef0e24 0.0s => => sha256:a7b980c958bfe4d84ee9263badd95a40c8bb50ad5afdb87902c187fefaef0e24 1.43kB / 1.43kB 0.0s => => sha256:db4b1d98b5a92263f2b9221c4d7930ce6b02f9834926c8b6174bfed2913cea16 1.16kB / 1.16kB 0.0s => => sha256:5414852b0111feebb3686ec58f92f2edb534cef2826b575581cdcadd42a7f527 7.21kB / 7.21kB 0.0s => ERROR [internal] load build context 0.1s => => transferring context: 1.43MB 0.0s => CANCELED [stage-1 1/2] FROM docker.io/library/nginx:stable-perl@sha256:3083ef7ca8bc4f7dc24596382092ae5e53d1169a6e706b83c2b448d044919ba3 0.1s => => resolve docker.io/library/nginx:stable-perl@sha256:3083ef7ca8bc4f7dc24596382092ae5e53d1169a6e706b83c2b448d044919ba3 0.0s => => sha256:3083ef7ca8bc4f7dc24596382092ae5e53d1169a6e706b83c2b448d044919ba3 10.27kB / 10.27kB 0.0s => => sha256:15585364514a1e9df46ec8d6ddfd1a56ee316724f47cb7b375ce4d4df137c856 2.49kB / 2.49kB 0.0s => => sha256:e790832271e7c18bce18208197ed61dde7dd4821af50789ceb4bc2c5d1b0b205 9.97kB / 9.97kB 0.0s ------ > [internal] load build context: ------ ERROR: failed to solve: archive/tar: unknown file mode ?rwxr-xr-x
当前使用的Dockerfile
FROM node:lts-alpine AS build WORKDIR /optimal/ COPY package*.json ./ RUN npm install COPY src/ /optimal/src COPY public/ /optimal/public RUN chmod -R 755 /optimal/src /optimal/public RUN npm run build CMD [ "npm", "start" ] FROM nginx:stable-perl WORKDIR /usr/share/nginx/html COPY --from=build /optimal/build /usr/share/nginx/html EXPOSE 80 CMD [ "nginx", "-g", "daemon off;" ]
已尝试Windows资源管理器修改权限、chmod命令,均无效。
解决方法
1. 修复Windows文件的阻止属性
Windows下下载或从外部复制的文件可能带有"阻止"标记,导致Docker无法识别权限:
打开PowerShell,进入项目根目录执行:
Get-ChildItem -Recurse | Unblock-File
2. 迁移项目目录
避免将项目放在OneDrive、桌面、文档等带有特殊权限控制的目录,移到普通本地文件夹(如D:\react-projects\my-app)。
3. 优化Dockerfile权限配置
修改COPY命令指定用户权限,或重置所有文件权限:
FROM node:lts-alpine AS build WORKDIR /optimal/ COPY package*.json ./ RUN npm install # 复制时指定所属用户,避免异常权限 COPY --chown=node:node src/ /optimal/src COPY --chown=node:node public/ /optimal/public # 重置目录权限,确保容器内可访问 RUN chmod -R 755 /optimal && chown -R node:node /optimal RUN npm run build FROM nginx:stable-perl WORKDIR /usr/share/nginx/html COPY --from=build /optimal/build /usr/share/nginx/html # 修复nginx静态文件目录权限 RUN chown -R nginx:nginx /usr/share/nginx/html EXPOSE 80 CMD [ "nginx", "-g", "daemon off;" ]
4. 调整Docker构建命令
在PowerShell中添加安全参数关闭SELinux标签检查:
docker build --security-opt "label=disable" -t react-app .
5. 完善.dockerignore文件
确保忽略不必要的文件,避免复制带异常权限的目录:
node_modules .git .vscode .env build .DS_Store
内容的提问来源于stack exchange,提问作者TeddPaul13
相关产品推荐
相关产品推荐

