【问题标题】:Custom runtime dockerfile for asp.net core 5 with Google cloud error CS1003: Syntax error,带有 Google 云错误 CS1003 的 asp.net core 5 的自定义运行时 dockerfile:语法错误,
【发布时间】:2021-06-23 16:21:52
【问题描述】:

我正在尝试使用 Visual Studio 插件将 Asp.net core 5 应用程序发布到谷歌云。

app.yaml

runtime: custom
env: flex

manual_scaling:
  instances: 1
resources:
  cpu: 1
  memory_gb: 0.5
  disk_size_gb: 10

Docker 文件

FROM mcr.microsoft.com/dotnet/aspnet:5.0
WORKDIR /app
# Copy csproj and restore as distinct layers
COPY *.csproj ./
RUN dotnet restore
# Copy everything else and build
COPY . ./
RUN dotnet publish -c Release -o out
# Build runtime image
FROM mcr.microsoft.com/dotnet/aspnet:5.0
WORKDIR /app
COPY --from=build-env /app/out .
EXPOSE 8080
ENV ASPNETCORE_URLS=http://*:8080
ENTRYPOINT ["dotnet", "Falcon-Identity.dll"]

当我从上下文菜单使用发布到谷歌云发布时,出现以下异常

C:\Projects\falcon-identity\Falcon-Identity\Dockerfile(1,23): error CS1003: Syntax error, '(' expected [C:\Projects\falcon-identity\Falcon-Identity\Falcon-Identity.csproj]
C:\Projects\falcon-identity\Falcon-Identity\Dockerfile(1,23): error CS1001: Identifier expected [C:\Projects\falcon-identity\Falcon-Identity\Falcon-Identity.csproj]
C:\Projects\falcon-identity\Falcon-Identity\Dockerfile(1,30): error CS1001: Identifier expected [C:\Projects\falcon-identity\Falcon-Identity\Falcon-Identity.csproj]
C:\Projects\falcon-identity\Falcon-Identity\Dockerfile(1,30): error CS1003: Syntax error, ',' expected [C:\Projects\falcon-identity\Falcon-Identity\Falcon-Identity.csproj]
C:\Projects\falcon-identity\Falcon-Identity\Dockerfile(1,31): error CS1003: Syntax error, ',' expected [C:\Projects\falcon-identity\Falcon-Identity\Falcon-Identity.csproj]
C:\Projects\falcon-identity\Falcon-Identity\Dockerfile(1,37): error CS1001: Identifier expected [C:\Projects\falcon-identity\Falcon-Identity\Falcon-Identity.csproj]
C:\Projects\falcon-identity\Falcon-Identity\Dockerfile(1,37): error CS1003: Syntax error, ',' expected [C:\Projects\falcon-identity\Falcon-Identity\Falcon-Identity.csproj]
C:\Projects\falcon-identity\Falcon-Identity\Dockerfile(1,41): error CS1003: Syntax error, ',' expected [C:\Projects\falcon-identity\Falcon-Identity\Falcon-Identity.csproj]
C:\Projects\falcon-identity\Falcon-Identity\Dockerfile(2,9): error CS1001: Identifier expected [C:\Projects\falcon-identity\Falcon-Identity\Falcon-Identity.csproj]
C:\Projects\falcon-identity\Falcon-Identity\Dockerfile(2,9): error CS1003: Syntax error, ',' expected [C:\Projects\falcon-identity\Falcon-Identity\Falcon-Identity.csproj]
C:\Projects\falcon-identity\Falcon-Identity\Dockerfile(2,10): error CS1003: Syntax error, ',' expected [C:\Projects\falcon-identity\Falcon-Identity\Falcon-Identity.csproj]
C:\Projects\falcon-identity\Falcon-Identity\Dockerfile(3,3): error CS1024: Preprocessor directive expected [C:\Projects\falcon-identity\Falcon-Identity\Falcon-Identity.csproj]
C:\Projects\falcon-identity\Falcon-Identity\Dockerfile(4,6): error CS1003: Syntax error, ',' expected [C:\Projects\falcon-identity\Falcon-Identity\Falcon-Identity.csproj]
C:\Projects\falcon-identity\Falcon-Identity\Dockerfile(4,8): error CS1003: Syntax error, ',' expected [C:\Projects\falcon-identity\Falcon-Identity\Falcon-Identity.csproj]
C:\Projects\falcon-identity\Falcon-Identity\Dockerfile(4,16): error CS1001: Identifier expected [C:\Projects\falcon-identity\Falcon-Identity\Falcon-Identity.csproj]
C:\Projects\falcon-identity\Falcon-Identity\Dockerfile(4,16): error CS1003: Syntax error, ',' expected [C:\Projects\falcon-identity\Falcon-Identity\Falcon-Identity.csproj]
C:\Projects\falcon-identity\Falcon-Identity\Dockerfile(4,17): error CS1003: Syntax error, ',' expected [C:\Projects\falcon-identity\Falcon-Identity\Falcon-Identity.csproj]
C:\Projects\falcon-identity\Falcon-Identity\Dockerfile(5,12): error CS1003: Syntax error, ',' expected [C:\Projects\falcon-identity\Falcon-Identity\Falcon-Identity.csproj]
C:\Projects\falcon-identity\Falcon-Identity\Dockerfile(6,3): error CS1024: Preprocessor directive expected [C:\Projects\falcon-identity\Falcon-Identity\Falcon-Identity.csproj]
C:\Projects\falcon-identity\Falcon-Identity\Dockerfile(7,6): error CS1003: Syntax error, ',' expected [C:\Projects\falcon-identity\Falcon-Identity\Falcon-Identity.csproj]
C:\Projects\falcon-identity\Falcon-Identity\Dockerfile(7,10): error CS1003: Syntax error, ',' expected [C:\Projects\falcon-identity\Falcon-Identity\Falcon-Identity.csproj]
C:\Projects\falcon-identity\Falcon-Identity\Dockerfile(8,12): error CS1003: Syntax error, ',' expected [C:\Projects\falcon-identity\Falcon-Identity\Falcon-Identity.csproj]
C:\Projects\falcon-identity\Falcon-Identity\Dockerfile(8,20): error CS1001: Identifier expected [C:\Projects\falcon-identity\Falcon-Identity\Falcon-Identity.csproj]
C:\Projects\falcon-identity\Falcon-Identity\Dockerfile(8,20): error CS1003: Syntax error, ',' expected [C:\Projects\falcon-identity\Falcon-Identity\Falcon-Identity.csproj]
C:\Projects\falcon-identity\Falcon-Identity\Dockerfile(8,21): error CS1003: Syntax error, ',' expected [C:\Projects\falcon-identity\Falcon-Identity\Falcon-Identity.csproj]
C:\Projects\falcon-identity\Falcon-Identity\Dockerfile(8,31): error CS1003: Syntax error, ',' expected [C:\Projects\falcon-identity\Falcon-Identity\Falcon-Identity.csproj]
C:\Projects\falcon-identity\Falcon-Identity\Dockerfile(8,32): error CS1003: Syntax error, ',' expected [C:\Projects\falcon-identity\Falcon-Identity\Falcon-Identity.csproj]
C:\Projects\falcon-identity\Falcon-Identity\Dockerfile(8,34): error CS1001: Identifier expected [C:\Projects\falcon-identity\Falcon-Identity\Falcon-Identity.csproj]
C:\Projects\falcon-identity\Falcon-Identity\Dockerfile(8,34): error CS1003: Syntax error, ',' expected [C:\Projects\falcon-identity\Falcon-Identity\Falcon-Identity.csproj]
C:\Projects\falcon-identity\Falcon-Identity\Dockerfile(9,3): error CS1024: Preprocessor directive expected [C:\Projects\falcon-identity\Falcon-Identity\Falcon-Identity.csproj]
C:\Projects\falcon-identity\Falcon-Identity\Dockerfile(10,9): error CS1003: Syntax error, ',' e

【问题讨论】:

  • 你可以在本地运行容器镜像没有问题,即(PORT=8080 && docker run --interactive --tty --rm --env=PORT=${PORT} --publish=${PORT}:${PORT} your-image吗?
  • Flex(如 Cloud Run)本质上是一个容器运行器,因此,如果容器运行(在其他地方),它应该可以运行,例如应用引擎。 “本质上”是因为端口 8080 对服务和 Google 沙盒运行时都至关重要,因此保真度可能低于 100%。
  • 我正在复制一个基本的 ASP.NET 示例,我认为您遇到的问题是设置 ENV ASPNETCORE_URL。在我更简单的示例中,如果我使用ENTRYPOINT ["dotnet", "run", "--urls=http://+:8080"],我可以访问:8080 上的服务器
  • 项目是否在 Docker 之外本地构建?容器是否在本地构建?在我看来,有些东西正在尝试将您的 dockerfile 构建为应用程序代码。
  • @DanielMann 是的项目构建,没有 docker

标签: c# asp.net asp.net-core google-cloud-platform gcloud


【解决方案1】:

我遇到了相同的问题,但有相同的例外。 这是由于在 docker 文件上错误地设置了构建操作(属性选项卡 - 错误地将文件的构建操作设置为“C# 编译器”而不是“无”)。

【讨论】:

    【解决方案2】:

    我能够将 ASP.NET 5.0 应用成功部署到 App Engine flex(然后是 Cloud Run)。

    我对 .NET 不太熟悉,因此我使用了更简单的配置,但我认为您应该也可以将我所做的应用到您的案例中。

    Dockerfile:

    FROM mcr.microsoft.com/dotnet/sdk:5.0
    
    WORKDIR /app
    
    COPY ./app/*.csproj .
    RUN dotnet restore
    
    COPY ./app/ .
    
    EXPOSE 8080
    ENTRYPOINT ["dotnet", "run","--urls=http://+:8080"]
    

    还有:

    BILLING=...
    PROJECT=...
    REGION=...
    
    gcloud projects create ${PROJECT}
    
    gcloud beta billing projects link ${PROJECT} \
    --billing-account=${BILLING}
    
    gcloud app create \
    --region=${REGION} \
    --project=${PROJECT}
    
    mkdir ${PWD}/app
    
    # Create 'empty' ASP.NET (web)app
    docker run \
    --interactive --tty --rm \
    --volume=${PWD}/app:/app \
    mcr.microsoft.com/dotnet/sdk:5.0 \
    dotnet new webapp -o app
    
    # Change generated files to `$whoami`
    # Or `$(id -u):$(id -g)`
    chown -R $(whoami):$(whoami) ./app
    
    docker build \
    --tag=68103677:v1 \
    --file=./Dockerfile \
    .
    
    docker run \
    --interactive --tty --rm \
    --publish=8080:8080 \
    68103677:latest
    
    # Prove it
    curl localhost:8080
    
    # Deploy
    gcloud app deploy ./app.yaml \
    --project=${PROJECT} \
    --quiet
    
    # Test
    gcloud app browse \
    --project=${PROJECT}
    

    开玩笑,我们可以部署 App Engine 部署创建的容器镜像,并将容器部署到 Cloud Run:

    gcloud services enable run.googleapis.com \
    --project=${PROJECT}
    
    # Grab the App Engine image
    IMAGE=$(\
      gcloud container images list \
      --repository=us.gcr.io/${PROJECT}/appengine \
      --limit=1 \
      --format="value(name)")
    
    # Deploy it to Cloud Run
    # For testing, deploy without authentication
    # We need to replicate `ENTRYPOINT` with `--command` and `--args`
    NAME="aspnet"
    gcloud run deploy ${NAME} \
    --image=${IMAGE} \
    --command="dotnet" \
    --args="run","--urls=http://+:8080" \
    --max-instances=1 \
    --region=${REGION} \
    --project=${PROJECT} \
    --allow-unauthenticated
    
    # Grab its endpoint
    ENDPOINT=$(\
      gcloud run services describe ${NAME} \
      --project=${PROJECT} \
      --platform=managed \
      --region=${REGION} \
      --format="value(status.address.url)") && \
    echo ${ENDPOINT}
    
    # Browse or...
    curl ${ENDPOINT}
    
    # Delete it when done
    gcloud run services delete ${NAME} \
    --region=${REGION} \
    --project=${PROJECT} \
    --quiet
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-03
      • 2014-06-27
      • 2019-05-10
      • 2014-10-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多