ASP.NET Core 5 + SQL Server Docker 容器:无效的撰写项目

Posted

技术标签:

【中文标题】ASP.NET Core 5 + SQL Server Docker 容器:无效的撰写项目【英文标题】:ASP.NET Core 5 + SQL Server Docker container: invalid compose project 【发布时间】:2021-10-01 09:52:32 【问题描述】:

我正在尝试使用以下guide 在树莓派 pi4 上设置一个简单的容器。 出于某种原因,我总是遇到以下错误:

[0mservice "my-api" 既没有指定图像也没有指定构建上下文:无效的组合项目 docker-compose

由于这是我的第一个“真正的” docker 容器设置,我不知道现在该做什么。我真的查找了我可以通过谷歌搜索找到的每一个问题(甚至用 bing 尝试过,是的,很绝望)。但我真的找不到像样的指南/答案。

我将附上我的 docker 文件: 码头工人撰写:

version: "3.9"
services:
web:
    build: .
    ports:
        - "8000:80"
    depends_on:
        - db
db:
    image: "mcr.microsoft.com/mssql/server"
    environment:
        SA_PASSWORD: "Your_password123"
        ACCEPT_EULA: "Y"

DockerFile(API 项目)

#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:5.0.302-buster-slim-amd64 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/sdk:5.0.302-buster-slim-amd64 AS build
WORKDIR /src
COPY ["my-api/my-api.csproj", "my-api/"]
RUN dotnet restore "my-api/my-api.csproj"
COPY . .
WORKDIR "/src/my-api"
RUN dotnet build "my-api.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "my-api.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "my-api.dll"]

RUN chmod +x ./entrypoint.sh
CMD /bin/bash ./entrypoint.sh

入口点.sh

#!/bin/bash

set -e
run_cmd="dotnet run --server.urls http://*:80"

until dotnet ef database update; do
>&2 echo "SQL Server is starting up"
sleep 1
done

>&2 echo "SQL Server is up - executing command"
exec $run_cmd

如果有人能把我推向正确的方向,那就太棒了

【问题讨论】:

【参考方案1】:

yaml 文件中的缩进很重要。您的服务需要在services: 行下缩进。

version: "3.9"
services:
    web:
        build: .
        ports:
            - "8000:80"
        depends_on:
            - db
    db:
        image: "mcr.microsoft.com/mssql/server"
        environment:
            SA_PASSWORD: "Your_password123"
            ACCEPT_EULA: "Y"

【讨论】:

复制时缩进被破坏了,所以不是这样【参考方案2】:

您是否使用 Visual Studio(不是代码)来构建它?

Visual Studio 有一个选项“将解决方案和项目文件放在同一目录中”确保在成为 docker/docker-compose 专家之前检查它。

当取消选中该选项并添加 docker 支持(或容器编排支持)时,Visual Studio 往往会弄乱 .csproj 文件的相对路径。

COPY ["my-api/my-api.csproj", "my-api/"] 应该具有到csproj 文件的相对路径。

只是一种预感。

此外,必应也没有帮助我。

【讨论】:

以上是关于ASP.NET Core 5 + SQL Server Docker 容器:无效的撰写项目的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Core 5 + SQL Server Docker 容器:无效的撰写项目

使用 Swagger 在 ASP.NET Core 中实现 OAuth

ASP.NET Core SQL 连接超时

ASP.NET Core 托管捆绑包 5 是不是也可以运行 .NET/ASP.NET Core 2.1 应用程序?

使用 C# 代码 ASP.NET Core 运行 SQL 脚本

无法使用 ASP .NET Core 更新 SQL 位列