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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 13:25:04