Arch Linux-dotnet core 2和docker

Arch Linux-dotnet core 2和docker,docker,.net-core,dockerfile,Docker,.net Core,Dockerfile,更新 好吧,我想了一些办法,但我仍然没有解决办法。这个问题似乎只发生在基于Arch的系统上(Antergos、Manjaro、Arch) 如果我使用xfce和docker以及dotnet core 2安装一个干净的系统,我可以使用dotnet core构建和运行docker映像 安装VirtualBox后,下面的问题开始出现,所以我怀疑它与一些模糊的内核模块有关 另外,未安装virtualbox也不能解决问题,唯一的解决方案是重新安装Arch fresh,这是一种痛苦。此外,在尝试使用docke

更新 好吧,我想了一些办法,但我仍然没有解决办法。这个问题似乎只发生在基于Arch的系统上(Antergos、Manjaro、Arch)

如果我使用xfce和docker以及dotnet core 2安装一个干净的系统,我可以使用dotnet core构建和运行docker映像

安装VirtualBox后,下面的问题开始出现,所以我怀疑它与一些模糊的内核模块有关

另外,未安装virtualbox也不能解决问题,唯一的解决方案是重新安装Arch fresh,这是一种痛苦。此外,在尝试使用docker开发dotnet core时,不可能在同一系统上运行docker和virtualbox

结束更新

我正试图让dotnet core 2基于microsofts dokumentation()与docker一起运行:

我的Dockerfile如下所示:

FROM microsoft/aspnetcore-build:2.0.0 AS build-env
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 microsoft/aspnetcore:2.0.0
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "api.bauernsuche.de.dll"]
然后,我通过以下方式开始映像构建过程:

docker build -t bauernsucheapi .
构建完成后,我尝试通过以下方式启动新映像:

docker run -it --rm -p 5000:80 --name bauernsuche_api bauernsucheapi
预期值:容器正在运行

:错误消息: 您的意思是运行dotnetsdk命令吗?请从以下位置安装dotnet SDK:

现在,由于我使用的是Microsoft Docker iage,我希望SDK可以在这个平台上使用。另外,我的Dockerfile是Microsoft示例的直接副本,但有一个更改:版本号从2.0更改为2.0.0,这似乎是正确的,因为2.0会给我关于找不到图像的错误

那么我做错了什么

My.csproj文件:

<Project Sdk="Microsoft.NET.Sdk.Web">
  <PropertyGroup>
    <TargetFramework>netcoreapp2.0</TargetFramework>
    <PublishWithAspNetCoreTargetManifest>false</PublishWithAspNetCoreTargetManifest>
  </PropertyGroup>
  <ItemGroup>
    <Folder Include="wwwroot\" />
  </ItemGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0" />
    <PackageReference Include="Microsoft.AspNetCore.TestHost" Version="2.0.0" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="2.0.0" />
    <PackageReference Include="Moq" Version="4.7.99" />
    <PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="2.0.0" />
    <PackageReference Include="Swashbuckle.AspNetCore" Version="1.0.0" />
    <PackageReference Include="xunit" Version="2.3.0-beta4-build3742" />
  </ItemGroup>
  <ItemGroup>
    <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.0" />
    <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" />
    <DotNetCliToolReference Include="dotnet-xunit" Version="2.3.0-beta4-build3742" />
    <DotNetCliToolReference Include="Microsoft.DotNet.Watcher.Tools" Version="2.0.0" />
  </ItemGroup>
</Project>

netcoreapp2.0
假的

所以我不确定问题出在哪里,但在
sh
bash
之间切换会有所帮助。我认为这主要是作为基本图像中的一个bug,您应该报告它。但下面应该为您修复它

FROM microsoft/aspnetcore-build:2.0.0 AS build-env
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 microsoft/aspnetcore:2.0.0
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["/bin/bash", "-lc", "dotnet api.bauernsuche.de.dll"]
编辑: 我回答说:

可以看到此错误消息的一个原因是当参数 传递到
dotnet
的路径未知

运行时
无法识别您传递给它的参数,并且 不知道您是否应该改用
sdk

确保dll的名称及其路径在以下位置正确:

ENTRYPOINT ["dotnet", "api.bauernsuche.de.dll"]
另外,确保
COPY
指令按预期工作,以便dll位于
WORKDIR
位置

原始答复:

您使用的映像没有SDK

下面的示例显示在图像中构建应用程序,然后创建一个新应用程序,结果如下:

FROM microsoft/dotnet:2.0-sdk AS build-env
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 -r debian.8-x64

# build runtime image
FROM microsoft/dotnet:2.0-runtime

WORKDIR /app
COPY --from=build-env /app/out ./
EXPOSE 5000/tcp
ENTRYPOINT ["dotnet", "api.dll"]
# To be able to pass parameters (e.g.: override configuration)
CMD []
摘自


注意,第一个是sdk映像,第二个是运行时。正如您可以选择的时间一样。

我正在运行一个用F#编写并与Docker打包的Dotnet Core 2.x web服务。我也使用publish和你一样的跑步id构建应用程序,但我启动它的方式不同

您可以直接指定在发布输出文件夹中生成的可执行二进制文件,而不是使用
dotnet
作为运行程序。在我的例子中,可执行文件是调用“Main”,我只是直接运行它。它基本上是主机平台的本机引导程序,主机平台启动包含所有附带DLL的Dotnet应用程序。您不需要SDK就可以工作,正如您可以从我的Docker文件中看到的:

FROM microsoft/dotnet:2-runtime
WORKDIR /opt/dotnetservice
ADD Main/publish .
ENV PATH="/opt/dotnetservice:${PATH}"
EXPOSE 8080
CMD ["Main"]

中有一个完整的小示例,我的解决方案是提供dotnet可执行文件的完整路径(“/usr/share/dotnet/dotnet”),查看最后一个阶段的入口点

FROM microsoft/aspnetcore-build:2.0 AS build-env
WORKDIR /code
COPY . .
WORKDIR /code/src/BasicWebTemplate.Web
RUN mkdir /publish
RUN dotnet publish -c Release -o /publish

FROM microsoft/aspnetcore:2.0
EXPOSE 80
COPY --from=build-env /publish /app
WORKDIR /app
ENTRYPOINT ["/usr/share/dotnet/dotnet", "BasicWebTemplate.Web.dll"]

你能把
ENTRYPOINT[“dotnet”,“api.bauernsuche.de.dll”]
改成
ENTRYPOINT[“ls”,“-al”]
看看你在当前的文件夹中看到了什么文件吗?我不能在注释中发布输出,但我期望的一切都在那里(输出目录的内容包括api.bauernsuche.de.dll)此外,从错误消息中,我怀疑dotnet命令不知何故丢失或不在路径中…我替换了ENTRYPOINT[“/bin/bash”],当我在docker容器中时,我可以运行dotnet api.bauernsuche.de.dll,它工作正常。。。但是当我进入dotnet运行api.bauernsuche.de.dll时,我会收到相同的错误消息。不知何故,当我使用/bin/sh并输入dotnet api.bauernsuche.de.dll时,入口点将我的dotnet api.bauernsuche.de.dll转换为dotnet运行api.bauernsuche.de.dll,我得到了错误,所以我想解决方案应该是使用入口点[“/bin/bash”,“dotnet”,“api.bauernsuche.de.dll”]不更改入口点[“/bin/bash”,“-lc”,“dotnet api.bauernsuche.de.dll”]也不行。我将在图片的githubpage上提交一个bug,似乎我没有做任何事情来纠正这里的错误,这闻起来像是一个bug:(是的,这有点奇怪。我现在唯一能说的是用CMD尝试一次,而不是entrypoint。我使用的是正确的图片,我的示例来自