我对 docker 很陌生,并且花了很多时间试图解决这个问题。我无法将我的 aspnetcore react docker 映像部署到 docker。我已经成功部署了许多 aspnetcore 映像,但是当涉及到 SPA 时,我似乎无法弄清楚。我开始了一个新的 .net5 react 项目来测试 docker 文件。我为构建创建了一个 docker-compose 文件。每次我收到以下错误。任何帮助将不胜感激。
该项目称为 dockerSPA - 我专门为测试目的创建了它。请让我知道我是否可以提供其他信息来解决此问题
Dockerfile
ARG NODE_IMAGE=node=16:0
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
WORKDIR /app
EXPOSE 80
ENV NODE_ENV=production
FROM ${NODE_IMAGE} as node-build
WORKDIR /web
COPY DockerSPA/ClientApp/package.json .
COPY DockerSPA/ClientApp/package-lock.json .
COPY DockerSPA .
RUN npm i npm@7.12.1 -g && npm update && npm install && npm run build:prod
# RUN npm install -production
FROM mcr.microsoft.com/dotnet/sdk:5.0.102-ca-patch-buster-slim AS build
WORKDIR /src
COPY ["DockerSPA/DockerSPA.csproj", "DockerSPA/"]
RUN dotnet restore "DockerSPA/DockerSPA.csproj"
COPY . .
WORKDIR "/src/DockerSPA"
RUN dotnet build "DockerSPA.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "DockerSPA.csproj" -c Release -o /app/publish
COPY . .
COPY --from=node-build /web .
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "DockerSPA.dll"]
package.json 脚本
"scripts": {
"start": "rimraf ./build && react-scripts start",
"build": "react-scripts build",
"build:prod": "npm start build",
"test": "cross-env CI=true react-scripts test --env=jsdom",
"eject": "react-scripts eject",
"lint": "eslint ./src/"
},
码头工人-compose.yml
version: "3.9" # optional since v1.27.0
services:
nodejs:
image: node:16
webspa:
container_name: dockerSPA
build:
context: .
dockerfile: DockerSPA/Dockerfile
args:
NODE_IMAGE: ${NODE_IMAGE:-node:16.0}
ports:
- "5200:80"
depends_on:
- nodejs
使用 'docker-compose up' 后出现完整的 docker 错误
Building webspa
[+] Building 9.4s (23/26)
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 1.15kB 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 35B 0.0s
=> [internal] load metadata for mcr.microsoft.com/dotnet/sdk:5.0.102-ca-patch-buster-slim 0.4s
=> [internal] load metadata for mcr.microsoft.com/dotnet/aspnet:5.0 0.0s
=> [internal] load metadata for docker.io/library/node:16.0 0.5s
=> [build 1/7] FROM mcr.microsoft.com/dotnet/sdk:5.0.102-ca-patch-buster-slim@sha256:1b832feb890536fdd31e0553587c40e33f9f0c7ce62bec3be6f1d2b4307c14f7 0.0s
=> [base 1/2] FROM mcr.microsoft.com/dotnet/aspnet:5.0 0.0s
=> [internal] load build context 0.0s
=> => transferring context: 3.42kB 0.0s
=> [node-build 1/6] FROM docker.io/library/node:16.0@sha256:25516f3de85ebf588e29d81052495d2e1177b55cddbd7ddab2f5ff2c4496dd5e 0.0s
=> CACHED [build 2/7] WORKDIR /src 0.0s
=> CACHED [base 2/2] WORKDIR /app 0.0s
=> CACHED [final 1/2] WORKDIR /app 0.0s
=> [build 3/7] COPY [DockerSPA/DockerSPA.csproj, DockerSPA/] 0.0s
=> CACHED [node-build 2/6] WORKDIR /web 0.0s
=> CACHED [node-build 3/6] COPY DockerSPA/ClientApp/package.json . 0.0s
=> CACHED [node-build 4/6] COPY DockerSPA/ClientApp/package-lock.json . 0.0s
=> CACHED [node-build 5/6] COPY DockerSPA . 0.0s
=> CANCELED [node-build 6/6] RUN npm i npm@7.12.1 -g && npm update && npm install && npm run build:prod 8.7s
=> [build 4/7] RUN dotnet restore "DockerSPA/DockerSPA.csproj" 3.0s
=> [build 5/7] COPY . . 0.1s
=> [build 6/7] WORKDIR /src/DockerSPA 0.1s
=> [build 7/7] RUN dotnet build "DockerSPA.csproj" -c Release -o /app/build 3.6s
=> ERROR [publish 1/3] RUN dotnet publish "DockerSPA.csproj" -c Release -o /app/publish 1.8s
------
> [publish 1/3] RUN dotnet publish "DockerSPA.csproj" -c Release -o /app/publish:
#17 0.632 Microsoft (R) Build Engine version 16.8.3+39993bd9d for .NET
#17 0.632 Copyright (C) Microsoft Corporation. All rights reserved.
#17 0.632
#17 1.014 Determining projects to restore...
#17 1.200 All projects are up-to-date for restore.
#17 1.674 DockerSPA -> /src/DockerSPA/bin/Release/net5.0/DockerSPA.dll
#17 1.674 DockerSPA -> /src/DockerSPA/bin/Release/net5.0/DockerSPA.Views.dll
#17 1.719 /bin/sh: 2: /tmp/tmpbc0abd804da1470aa4bbde26647a85f4.exec.cmd: npm: not found
#17 1.721 /src/DockerSPA/DockerSPA.csproj(38,5): error MSB3073: The command "npm install" exited with code 127.
------
executor failed running [/bin/sh -c dotnet publish "DockerSPA.csproj" -c Release -o /app/publish]: exit code: 1
ERROR: Service 'webspa' failed to build : Build failed
编辑
通过遵循微软的旧 .net3 建议并进行一些小更新,我终于设法通过安装 nodejs 来部署 react spa 客户端。现在我的 nodejs 服务立即退出,代码为 0;
码头工人文件
#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.
FROM mcr.microsoft.com/dotnet/sdk:5.0.102-ca-patch-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
RUN curl -sL https://deb.nodesource.com/setup_16.x | bash -
RUN apt-get install -y nodejs
FROM mcr.microsoft.com/dotnet/sdk:5.0.102-ca-patch-buster-slim AS build
RUN curl -sL https://deb.nodesource.com/setup_16.x | bash -
RUN apt-get install -y nodejs
WORKDIR /src
COPY ["DockerSPA/DockerSPA.csproj", "DockerSPA/"]
RUN dotnet restore "DockerSPA/DockerSPA.csproj"
COPY . .
WORKDIR "/src/DockerSPA"
RUN dotnet build "DockerSPA.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "DockerSPA.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "DockerSPA.dll"]
错误:
dockerSPA | warn: Microsoft.AspNetCore.DataProtection.Repositories.FileSystemXmlRepository[60]
dockerSPA | Storing keys in a directory '/root/.aspnet/DataProtection-Keys' that may not be persisted outside of the container. Protected data will be unavailable when container is destroyed.
dockerSPA | warn: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[35]
dockerSPA | No XML encryptor configured. Key {494d834e-82ff-4408-beab-6c6ad51cb722} may be persisted to storage in unencrypted form.
dockerSPA | warn: Microsoft.AspNetCore.Server.Kestrel[0]
dockerSPA | Unable to bind to http://localhost:5000 on the IPv6 loopback interface: 'Cannot assign requested address'.
dockerSPA | warn: Microsoft.AspNetCore.Server.Kestrel[0]
dockerSPA | Unable to bind to https://localhost:5001 on the IPv6 loopback interface: 'Cannot assign requested address'.
有些东西告诉我我需要设置 redis 来处理这些问题,但我可能是错的。