我正在学习gcloud应用程序部署的学习过程。我一直在努力从以下位置运行.net HelloWorld示例代码:
https://github.com/GoogleCloudPlatform/dotnet-docs-samples/tree/master/appengine/flexible/HelloWorld
当我使用Visual Studio启动该示例时,该示例在桌面上运行良好。但是,我无法超越 从cmd窗口使用“ gcloud app deploy”运行。以下是两次运行的详细信息,首先是 即用型,第二个是在添加doocker文件之后。
还有其他人能够像当前版本的gcloud sdk一样运行HelloWorld示例吗?
感谢您的帮助,
鲍勃
这是gcloud版本信息:
gcloud --version
Google Cloud SDK 299.0.0
bq 2.0.58
core 2020.06.26
gsutil 4.51
运行1
这是重新安装gcloud sdk和新克隆的gcloud之后的gcloud输出的尾端 / dotnet-docs-samples /...
...
Step #0: Status: Downloaded newer image for gcr.io/gcp-runtimes/aspnetcorebuild@sha256:f5552a5efdaf278a3124ea10fd1c9636b09fc9f98f9e620cbd71279797576b3f
Step #0: gcr.io/gcp-runtimes/aspnetcorebuild@sha256:f5552a5efdaf278a3124ea10fd1c9636b09fc9f98f9e620cbd71279797576b3f
Step #0: No .deps.json file found for the app
Finished Step #0
ERROR
ERROR: build step 0 "gcr.io/gcp-runtimes/aspnetcorebuild@sha256:f5552a5efdaf278a3124ea10fd1c9636b09fc9f98f9e620cbd71279797576b3f" failed: step exited with non-zero status: 1
------------------------------------------------------------------------------------------------------------------------
ERROR: (gcloud.app.deploy) Cloud build failed. Check logs at https://console.cloud.google.com/cloud-build/builds/44677e0d-0fcb-4460-907b-835cbf621f5e?project=704308180369 Failure status: UNKNOWN: Error Response: [2] Build failed; check build logs for details
运行2
经过一番搜索,我发现了一个建议,以改用自定义运行时和一个docker文件。 因此,我做了两个更改,一个在app.yaml文件中,然后添加了docker文件。
这是app.yaml文件。
runtime: custom
env: flex
# This sample incurs costs to run on the App Engine flexible environment.
# The settings below are to reduce costs during testing and are not appropriate
# for production use. For more information, see:
# https://cloud.google.com/appengine/docs/flexible/python/configuring-your-app-with-app-yaml
manual_scaling:
instances: 1
resources:
cpu: 1
memory_gb: 4
disk_size_gb: 10
env_variables:
# The __ in My__Greeting will be translated to a : by ASP.NET.
My__Greeting: Hello AppEngine!
readiness_check:
app_start_timeout_sec: 600
这是Dockerfile。该文件来自以下位置:
https://github.com/dotnet/dotnet-docker/blob/50e95cd9af6458ce0db21e6ec952e29c3ee1fadf/2.1/aspnet/alpine3.10/amd64/Dockerfile
ARG REPO=mcr.microsoft.com/dotnet/core/runtime-deps
FROM $REPO:2.1-alpine3.10
# Install ASP.NET Core
ENV ASPNETCORE_VERSION 2.1.15
RUN wget -O aspnetcore.tar.gz https://dotnetcli.azureedge.net/dotnet/aspnetcore/Runtime/$ASPNETCORE_VERSION/aspnetcore-runtime-$ASPNETCORE_VERSION-linux-musl-x64.tar.gz \
&& aspnetcore_sha512='4a6ab78abc08c3e02c948de0af5fd324269785adad1b4e17bb849025ab280b7b8216cb48da5d480270cf3d596b342cedd4dc77eeaae82151fea44816e3856c69' \
&& echo "$aspnetcore_sha512 aspnetcore.tar.gz" | sha512sum -c - \
&& mkdir -p /usr/share/dotnet \
&& tar -zxf aspnetcore.tar.gz -C /usr/share/dotnet \
&& rm aspnetcore.tar.gz \
&& ln -s /usr/share/dotnet/dotnet /usr/bin/dotnet
这是使用docker文件运行的结尾。
...
},
"handlers": [
{
"script": {
"scriptPath": "PLACEHOLDER"
},
"urlRegex": ".*"
}
],
"manualScaling": {
"instances": 1
},
"resources": {
"cpu": 1.0,
"diskGb": 10,
"memoryGb": 0.5
},
"runtime": "vm"
}"
DEBUG: Operation [apps/solitairesupport/operations/a41d48d9-6fc8-422b-84b6-1e18b3a70162] not complete. Waiting to retry.
Updating service [default] (this may take several minutes).../DEBUG: Operation [apps/solitairesupport/operations/a41d48d9-6fc8-422b-84b6-1e18b3a70162] not complete. Waiting to retry.
Updating service [default] (this may take several minutes)...-DEBUG: Operation [apps/solitairesupport/operations/a41d48d9-6fc8-422b-84b6-1e18b3a70162] not complete. Waiting to retry.
[MANY LINES REMOVED HERE]
Updating service [default] (this may take several minutes)...-DEBUG: Operation [apps/solitairesupport/operations/a41d48d9-6fc8-422b-84b6-1e18b3a70162] not complete. Waiting to retry.
Updating service [default] (this may take several minutes).../DEBUG: Operation [apps/solitairesupport/operations/a41d48d9-6fc8-422b-84b6-1e18b3a70162] complete. Result: {
"done": true,
"error": {
"code": 9,
"message": "\nApplication startup error! Code: APP_CONTAINER_CRASHED\n"
},
"metadata": {
"@type": "type.googleapis.com/google.appengine.v1.OperationMetadataV1",
"insertTime": "2020-07-03T17:06:36.191Z",
"method": "google.appengine.v1.Versions.CreateVersion",
"target": "apps/solitairesupport/services/default/versions/20200703t100554",
"user": "xxxx@gmail.com"
},
"name": "apps/solitairesupport/operations/a41d48d9-6fc8-422b-84b6-1e18b3a70162"
}
Updating service [default] (this may take several minutes)...failed.
DEBUG: (gcloud.app.deploy) Error Response: [9]
Application startup error! Code: APP_CONTAINER_CRASHED
Traceback (most recent call last):
File "...AppData\Local\Google\Cloud SDK\google-cloud-sdk\lib\googlecloudsdk\calliope\cli.py", line 983, in Execute
resources = calliope_command.Run(cli=self, args=args)
File "...\Local\Google\Cloud SDK\google-cloud-sdk\lib\googlecloudsdk\calliope\backend.py", line 807, in Run
resources = command_instance.Run(args)
File "...\Local\Google\Cloud SDK\google-cloud-sdk\lib\surface\app\deploy.py", line 117, in Run
default_strategy=flex_image_build_option_default))
File "...\Local\Google\Cloud SDK\google-cloud-sdk\lib\googlecloudsdk\command_lib\app\deploy_util.py", line 651, in RunDeploy
ignore_file=args.ignore_file)
File "...\Local\Google\Cloud SDK\google-cloud-sdk\lib\googlecloudsdk\command_lib\app\deploy_util.py", line 437, in Deploy
extra_config_settings)
File "...\Local\Google\Cloud SDK\google-cloud-sdk\lib\googlecloudsdk\api_lib\app\appengine_api_client.py", line 208, in DeployService
poller=done_poller)
File "...\Local\Google\Cloud SDK\google-cloud-sdk\lib\googlecloudsdk\api_lib\app\operations_util.py", line 314, in WaitForOperation
sleep_ms=retry_interval)
File "...\Local\Google\Cloud SDK\google-cloud-sdk\lib\googlecloudsdk\api_lib\util\waiter.py", line 264, in WaitFor
sleep_ms, _StatusUpdate)
File "...\Local\Google\Cloud SDK\google-cloud-sdk\lib\googlecloudsdk\api_lib\util\waiter.py", line 326, in PollUntilDone
sleep_ms=sleep_ms)
File "...\Local\Google\Cloud SDK\google-cloud-sdk\lib\googlecloudsdk\core\util\retry.py", line 229, in RetryOnResult
if not should_retry(result, state):
File "...\Local\Google\Cloud SDK\google-cloud-sdk\lib\googlecloudsdk\api_lib\util\waiter.py", line 320, in _IsNotDone
return not poller.IsDone(operation)
File "...\Local\Google\Cloud SDK\google-cloud-sdk\lib\googlecloudsdk\api_lib\app\operations_util.py", line 183, in IsDone
encoding.MessageToPyValue(operation.error)))
googlecloudsdk.api_lib.app.operations_util.OperationError: Error Response: [9]
Application startup error! Code: APP_CONTAINER_CRASHED
ERROR: (gcloud.app.deploy) Error Response: [9]
Application startup error! Code: APP_CONTAINER_CRASHED
答案 0 :(得分:0)
好的,我熟悉Google Cloud Platform,但现在(不)熟悉.NET。
我正在使用Linux(!)和Cloud Shell:
gcloud alpha cloud-shell ssh
我克隆了存储库,但没有其他更改。
我能够在本地运行项目并进行测试:
dotnet run
,然后从另一个shell:
curl localhost:8080
Hello World!
注意,该状态尚未声明(也许很明显),但是您必须
dotnet run
(最好是dotnet publish
)来创建./bin/Debug
目录。
我创建了一个项目,设置了帐单,创建了一个应用引擎应用程序:
PROJECT="[[YOUR-PROJECT-ID]]"
BILLING="[[YOUR-BILLING-ID]]"
REGION="[[YOUR-REGION]]"
gcloud projects create ${PROJECT}
gcloud beta billing projects link ${PROJECT} --billing-account=${BILLING}
gcloud app create --project=${PROJECT} --region=${REGION}
然后,根据文档:
dotnet publish
./bin/Debug/netcoreapp2.1/publish
的内容:
56 Jul 6 16:23 appsettings.json
544 Jul 6 16:23 app.yaml
223992 Jul 6 16:27 HelloWorld.deps.json
8192 Jul 6 16:27 HelloWorld.dll
1708 Jul 6 16:27 HelloWorld.pdb
213 Jul 6 16:27 HelloWorld.runtimeconfig.json
516 Jul 6 16:30 web.config
注意包含
app.yaml
和HelloWorld.deps.json
然后:
gcloud app deploy ./bin/Debug/netcoreapp2.1/publish/app.yaml \
--project=${PROJECT}
并且:
ENDPOINT=$(\
gcloud app describe \
--project=${PROJECT} \
--format="value(defaultHostname)")
curl ${ENDPOINT}
Hello AppEngine!
然后,在./appengine/flexible/HelloWorld
目录中,创建Dockerfile
:
FROM mcr.microsoft.com/dotnet/core/sdk:2.1 AS builder
WORKDIR /source
COPY *.sln .
COPY *.csproj .
RUN dotnet restore
COPY . .
RUN dotnet publish -c release -o /app --no-restore
FROM mcr.microsoft.com/dotnet/core/aspnet:2.1
WORKDIR /app
COPY --from=builder /app ./
ENTRYPOINT ["dotnet", "HelloWorld.dll"]
注意,以this为指南。
注意我降级为
2.1
(而不是3.1
)以避免dotnet构建错误,但这是由于我对运行时不熟悉。
我更改了Program.cs
,以强制使用:8080
:
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseUrls("http://0.0.0.0:8080")
.Build();
}
我修改了app.yaml
以使用自定义运行时:
runtime: custom
env: flex
然后:
gcloud app deploy --project=${PROJECT}
工作。