【发布时间】:2021-10-07 11:41:51
【问题描述】:
我不知道这里有什么问题。 Google Cloud Run 给了我这个错误:
Ready 条件状态更改为 False for Revision ezposappapi-00003-miv 带有消息:云运行错误:容器失败 开始。无法启动并侦听由 端口环境变量。此修订的日志可能包含更多 信息...
我已经按照谷歌here的例子。
这是我的Program.cs:
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args)
{
#if DEBUG
return Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
#endif
#if !DEBUG
string port = Environment.GetEnvironmentVariable("PORT") ?? "8080";
string url = String.Concat("http://0.0.0.0:", port);
return Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>().UseUrls(url);
});
#endif
}
}
容器在 Google Cloud Run 的 8080 端口上运行。
这是我的DockerFile:
FROM mcr.microsoft.com/dotnet/aspnet:3.1 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/sdk:3.1 AS build
WORKDIR /src
COPY ["EzPOSAppAPI/EzPOSAppAPI.csproj", "EzPOSAppAPI/"]
RUN dotnet restore "EzPOSAppAPI/EzPOSAppAPI.csproj"
COPY . .
WORKDIR "/src/EzPOSAppAPI"
RUN dotnet build "EzPOSAppAPI.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "EzPOSAppAPI.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "EzPOSAppAPI.dll"]
日志中还有另一个错误:
Uncaught signal: 6, pid=1, tid=1, fault_addr=0.
{
"textPayload": "Uncaught signal: 6, pid=1, tid=1, fault_addr=0.",
"insertId": "610768a70008741958ceffb7",
"resource": {
"type": "cloud_run_revision",
"labels": {
"service_name": "ezposappapi",
"project_id": "digilife-software",
"configuration_name": "ezposappapi",
"revision_name": "ezposappapi-00003-miv",
"location": "asia-southeast2"
}
},
"timestamp": "2021-08-02T03:38:15.553951292Z",
"severity": "ERROR",
"labels": {
"instanceId": "00bf4bf02dc90720030c58d69fb03c88335dbcae23dbf8624600d5b3cf9e014ff1bbb38d2b764f1cccc3ada43f158ca49843c576aca917efaa41d8bf51daf846"
},
"logName": "projects/digilife-software/logs/run.googleapis.com%2Fvarlog%2Fsystem",
"receiveTimestamp": "2021-08-02T03:38:15.555133567Z"
}
没有更多的错误信息。我不知道如何解决这个问题。请帮忙。
编辑
这是我目前在本地机器上的尝试:
Program.cs:
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args)
{
return Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
}
}
Dockerfile:
#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/aspnet:3.1 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/sdk:3.1 AS build
WORKDIR /src
COPY ["EzPOSAppAPI.csproj", "EzPOSAppAPI/"]
RUN dotnet restore "EzPOSAppAPI/EzPOSAppAPI.csproj"
WORKDIR "/src/EzPOSAppAPI"
COPY . .
RUN dotnet build "EzPOSAppAPI.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "EzPOSAppAPI.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "EzPOSAppAPI.dll"]
这是run 命令:
docker run -dt -v "C:\Users\astef\vsdbg\vs2017u5:/remote_debugger:rw" -v "C:\Users\astef\Documents\Projects\C Sharp\EzPOSAppAPI\EzPOSAppAPI\EzPOSAppAPI:/app" -v "C:\Users\astef\Documents\Projects\C Sharp\EzPOSAppAPI\EzPOSAppAPI:/src/" -v "C:\Users\astef\AppData\Roaming\Microsoft\UserSecrets:/root/.microsoft/usersecrets:ro" -v "C:\Users\astef\AppData\Roaming\ASP.NET\Https:/root/.aspnet/https:ro" -v "C:\Users\astef\.nuget\packages\:/root/.nuget/fallbackpackages3" -v "C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages:/root/.nuget/fallbackpackages" -v "C:\Program Files (x86)\Microsoft\Xamarin\NuGet\:/root/.nuget/fallbackpackages2" -e "DOTNET_USE_POLLING_FILE_WATCHER=1" -e "ASPNETCORE_LOGGING__CONSOLE__DISABLECOLORS=true" -e "ASPNETCORE_ENVIRONMENT=Development" -e "ASPNETCORE_URLS=https://+:443;http://+:80" -e "NUGET_PACKAGES=/root/.nuget/fallbackpackages3" -e "NUGET_FALLBACK_PACKAGES=/root/.nuget/fallbackpackages;/root/.nuget/fallbackpackages2;/root/.nuget/fallbackpackages3" -P --name EzPOSAppAPI --entrypoint tail ezposappapi:dev -f /dev/null
如何在Google Cloud Run 上进行设置?
【问题讨论】:
-
尝试使用 UseUrls("http://*:8080"),我看到您在代码中公开了 80 并使用了 8080。两者都不是同一个端口,你知道吗?
-
您好,我认为 Environment.GetEnvironmentVariable("PORT") 会自动分配 8080。无论如何,我确实喜欢您要求我更改为
UseUrls("http://*:8080")的内容,但我遇到了同样的错误。我不确定更改是否实际上正在上传。我这样做docker tag ezposappapi asia.gcr.io/digilife-software/ezposappapi更新构建和docker push asia.gcr.io/digilife-software/ezposappapi推送新构建。我不确定这是否正确。我是 docker 新手。 -
我祝你一件事,只需从 Github 获取任何工作代码并尝试,如果这工作将其与您的代码进行比较。这样您就可以轻松解决您的问题。
-
1) 信号 6 表示您的程序称为 abort(),这意味着它崩溃或出现运行时错误。 2)您需要构建容器。然后,您需要重新部署到 Cloud Run。重新阅读您用来了解如何部署的教程。使用 gcloud builds submit,然后使用 gcloud run deploy。 3) 删除 #if 部分。发布干净的代码,以便我们知道使用了哪个部分。 4) 包含 Startup.cs 5) 从 Dockerfile 中删除 EXPOSE 语句。
-
端口 443 通常用于 HTTPS。启用该端口不会有任何效果,因为 Cloud Run 支持您的应用的唯一方案是 HTTP。此外,Cloud Run 仅支持一个应用端口,默认为 8080,但可配置。
标签: docker asp.net-core google-cloud-run