【发布时间】:2021-09-29 15:44:20
【问题描述】:
我有一个 Docker Swarm 使用我们的自定义代码(Linux 上的 .net core 3.1)运行一个容器,没有任何问题。我刚刚使用 Microk8s 设置了一个测试 4 节点 Kubernetes 集群。当我将图像加载到 Kubernetes 时,它似乎运行良好,但容器启动然后立即停止,并出现错误“Back-off restarting failed container”。查看来自 pod 的错误,我得到“找不到任何已安装的 .NET Core SDK。您的意思是运行 .NET Core SDK 命令吗?从以下位置安装 .NET Core SDK:https://aka.ms/dotnet-download"。
图像与 Swarm 中运行的图像相同。我的搜索使我发现 ENTRYPOINT 可能是构建 dockerfile 中的问题,但我对对此的更改没有任何运气。我已经把我的 dockerfile 放在下面,以防它与这个问题有关。
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-bionic AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
# tzdata for timzone
RUN apt-get update -y
RUN apt-get install -y tzdata
ARG REPO_TAG
ENV TZ UTC
ENV ApiVersion=$REPO_TAG
FROM mcr.microsoft.com/dotnet/core/sdk:3.1-bionic AS build
WORKDIR /src
COPY ["WebAPI/WebAPI.csproj", "WebAPI/"]
COPY ["Domain/Domain.csproj", "Domain/"]
COPY ["Infrastructure/Infrastructure.csproj", "Infrastructure/"]
COPY ["Application/Application.csproj", "Application/"]
COPY ["Lib/*", "Lib/"]
RUN dotnet restore "WebAPI/WebAPI.csproj"
COPY . .
WORKDIR "/src/WebAPI"
RUN dotnet build "WebAPI.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "WebAPI.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "WebAPI.dll"]
非常感谢任何帮助。
编辑:
kubectl describe pod 的输出:
Name: v5api-945c4f96c-925dp
Namespace: default
Priority: 0
Node: kube2/192.168.5.202
Start Time: Wed, 29 Sep 2021 14:46:20 +0000
Labels: app=v5api
io.portainer.kubernetes.application.name=stepsv5api
pod-template-hash=945c4f96c
Annotations: cni.projectcalico.org/podIP: 10.1.2.82/32
cni.projectcalico.org/podIPs: 10.1.2.82/32
Status: Running
IP: 10.1.2.82
IPs:
IP: 10.1.2.82
Controlled By: ReplicaSet/v5api-945c4f96c
Containers:
v5api:
Container ID: containerd://5a8af38a90eb0e82c2760849d2d2be6418cd90581d7f4b4b97f01e91142ba019
Image: docker.io/privaterepo/v5api:latest
Image ID: docker.io/privaterepo/v5api@sha256:3d09dd399ea2a3252605cb32474d6d9f46a3b4f314f7e514597ed3421151ac20
Port: <none>
Host Port: <none>
State: Waiting
Reason: CrashLoopBackOff
Last State: Terminated
Reason: Error
Exit Code: 145
Started: Wed, 29 Sep 2021 17:46:13 +0000
Finished: Wed, 29 Sep 2021 17:46:13 +0000
Ready: False
Restart Count: 40
Environment:
TZ: Europe/London
Mounts:
/app from config-v5api-871dbe27-9933-416a-9830-ef1ec93a82e9 (rw)
/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-9sqch (ro)
Conditions:
Type Status
Initialized True
Ready False
ContainersReady False
PodScheduled True
Volumes:
config-v5api-871dbe27-9933-416a-9830-ef1ec93a82e9:
Type: ConfigMap (a volume populated by a ConfigMap)
Name: appsettings-conf-v1
Optional: false
kube-api-access-9sqch:
Type: Projected (a volume that contains injected data from multiple sources)
TokenExpirationSeconds: 3607
ConfigMapName: kube-root-ca.crt
ConfigMapOptional: <nil>
DownwardAPI: true
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning BackOff 3m55s (x829 over 3h4m) kubelet Back-off restarting failed container
来自 kubectl 日志的错误:
"It was not possible to find any installed .NET Core SDKs
Did you mean to run .NET Core SDK commands? Install a .NET Core SDK from:
https://aka.ms/dotnet-download
【问题讨论】:
-
“不适用于 kubernetes”是什么意思,使用此映像时您的 pod 的状态是什么,
describe pod输出是什么?kubect logs命令的输出是什么? -
@P.... 我已将日志的输出和描述 pod 添加到原始帖子中。 pod 的状态是由于容器错误而终止:“无法找到任何已安装的 .NET Core SDK。您的意思是运行 .NET Core SDK 命令吗?从以下位置安装 .NET Core SDK:@ 987654322@".
-
尝试在您的 pod 中设置
dnsPolicy: Default。您共享的错误说kube2的名称解析失败,这显然是您的节点名称。 -
抱歉,DNS 没有配置,现在解决了。我已经更新了日志的错误
标签: docker kubernetes asp.net-web-api dockerfile