Dmi*_*riy 2 .net docker kubernetes kind
我正在尝试在本地 kubernetes 集群(Kind)中部署一个简单的 .NET 应用程序以进行测试。应用部署时,Pod 启动时不会出现错误。但镜像构建得很好,因为如果在 Docker 中本地启动,容器就可以很好地工作。
NAME READY STATUS RESTARTS AGE
orderproducer-68d5ff7944-d2d89 0/1 Error 4 103s
Run Code Online (Sandbox Code Playgroud)
kubectl logs -l app=orderproducer
Could not execute because the application was not found or a compatible .NET SDK is not installed.
Possible reasons for this include:
* You intended to execute a .NET program:
The application 'OrderProducer.dll' does not exist.
* You intended to execute a .NET SDK command:
It was not possible to find any installed .NET SDKs.
Install a .NET SDK from:
https://aka.ms/dotnet-download
Run Code Online (Sandbox Code Playgroud)
这很奇怪,因为如果我在本地(而不是在集群中)从同一个映像启动一个 docker 容器,它就可以正常工作。此外,我已在该容器上运行 bash 并确保该文件夹OrderProducer.dll确实存在于该/app文件夹(这是一个工作目录)中。
xxx@xxx:/mnt/c/Users/xxx$ docker run --name test6 orderproducer:latest
Order Producer has started!
Kafka broker: 127.0.0.1:9092
Run Code Online (Sandbox Code Playgroud)
你知道我的错误是什么吗?为什么它在 Docker 中运行,而不是在 K8s 的 pod 中运行?我已经花了大约3个小时试图弄清楚,但仍然没有。提前谢谢了。
这是我使用的一些工件。
Dockerfile:
FROM mcr.microsoft.com/dotnet/runtime:6.0 AS base
WORKDIR /app
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["OrderProducer/OrderProducer.csproj", "OrderProducer/"]
COPY ["Common/Common.csproj", "Common/"]
RUN dotnet restore "OrderProducer/OrderProducer.csproj"
COPY . .
WORKDIR "/src/OrderProducer"
RUN dotnet build "OrderProducer.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "OrderProducer.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "OrderProducer.dll"]
Run Code Online (Sandbox Code Playgroud)
然后我构建一个图像并使其可访问:
docker build -f OrderProducer/Dockerfile -t orderproducer:latest .
kind load docker-image orderproducer:latest
Run Code Online (Sandbox Code Playgroud)
然后我应用部署:
kubectl apply -f orderproducer-deployment.yml
Run Code Online (Sandbox Code Playgroud)
order Producer-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: orderproducer
spec:
replicas: 1
selector:
matchLabels:
app: orderproducer
template:
metadata:
labels:
app: orderproducer
spec:
containers:
- name: orderproducer
image: orderproducer:latest
imagePullPolicy: Never
resources:
limits:
memory: "128Mi"
cpu: "500m"
Run Code Online (Sandbox Code Playgroud)
原因是当一个卷安装到/app它时会清除容器中的所有/app内容。
我通过编辑以下部署部分解决了该问题:
volumeMounts:
- name: appsettings-volume
mountPath: /app/appSettings.json
subPath: appSettings.json
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
855 次 |
| 最近记录: |