我尝试容器化反应应用程序,但此错误仍然存在。
这是日志:
[+] 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
我查了一下;好像和文件权限有关系。我尝试通过 Windows 资源管理器更改目录中的文件,但没有任何反应。
我已经尝试过 chmod 但仍然没有成功。
这是 Dockerfile
来自节点:lts-alpine AS 构建
工作目录/最佳/
复制包*.json ./
运行 npm 安装
复制 src/ /optimal/src
复制公共//最佳/公共
运行 chmod -R 755 /optimal/src /optimal/public
运行 npm 运行构建
CMD [“npm”,“开始”]
来自 nginx:stable-perl
WORKDIR /usr/share/nginx/html
复制 --from=build /optimal/build /usr/share/nginx/html
暴露80
CMD [“nginx”,“-g”,“守护进程关闭;” ]
此错误与构建上下文中的文件具有 Docker 无法识别的异常或无效文件模式有关。当从 Windows 文件系统复制文件时,通常会发生这种情况,与基于 Unix 的系统相比,Windows 文件系统使用不同的文件权限方案。
确保上下文目录中的文件(尤其是 src 和 public)没有异常属性。您可以使用
ls -l
检查类 Unix 系统上的文件权限。
有时,如果在 Windows 上进行编辑,文件可能会有不正确的行结尾。使用 dos2unix 等工具来转换文件。
find . -type f -exec dos2unix {} \;
然后尝试这个 dockerfile
FROM node:lts-alpine AS build
WORKDIR /optimal/
# Copy package files and install dependencies
COPY package*.json ./
RUN npm install
# Copy source files
COPY src/ /optimal/src
COPY public/ /optimal/public
# Sanitize file permissions in the build context
RUN find /optimal/src /optimal/public -type d -exec chmod 755 {} \;
RUN find /optimal/src /optimal/public -type f -exec chmod 644 {} \;
RUN npm run build
FROM nginx:stable-perl
WORKDIR /usr/share/nginx/html
# Copy build artifacts
COPY --from=build /optimal/build /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
节点模块 Dockerfile .dockerignore
清理 Docker 并重建镜像:
docker system prune --all --force
docker build -t my-react-app .