我正在尝试将 .net 应用程序部署到 Digital Ocean Kubernetes,但没有成功。创建简单的 web.yml 部署时,我看到状态日志返回ERROR
,并且在 pod 上运行日志时,我看到以下内容:
standard_init_linux.go:228: exec user process caused: exec format error
我围绕这个错误做了一些研究,似乎我的架构不匹配。但是,我 99.999% 的架构是我的 Digital Ocean 集群是 AMD,我从以下 Dockerfile 构建的映像是 linux/arm64/v8。
我有以下 Dockerfile:
# syntax=docker/dockerfile:1
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /app
# copy everything else and build app
COPY . .
RUN dotnet restore
WORKDIR /app/ASCOM.Alpaca.Simulators
RUN dotnet publish -c Release -o out
# Build runtime image
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS runtime
WORKDIR /app
COPY --from=build /app/ASCOM.Alpaca.Simulators/out ./
docker compose build
我通过标准命令构建并推送到我的 docker hub 。
我查看了一些关于如何将其构建为 AMD 或其他的在线参考资料,但我目前似乎无法参考可行的潜在解决方案。
我有以下 docker-compose.yaml 文件:
version: "3.9"
services:
web:
build: .
ports:
- "80:32323"
image: observerly/ascom-alpaca:latest
command: ["dotnet", "ascom.alpaca.simulators.dll", "--urls=http://*:32323"]
我已经看到有关 buildkit 的主题......但我还没有真正理解为 .net 核心构建不同的拱形映像需要采取的确切步骤。
我运行docker manifest inspect --verbose mcr.microsoft.com/dotnet/aspnet:6.0
它给了我可以使用 AMD64 的提示:
"platform": {
"architecture": "amd64",
"os": "linux"
}
任何专业提示都会很棒!