2017-09-10 37 views
2

更新 好吧我想通了一些东西,但我仍然没有解决方案。这个问题似乎只发生在基于Arch的系统上(Antergos,Manjaro,Arch)。Arch Linux - 带码头的dotnet core 2

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

安装VirtualBox后,下面的问题开始发生,所以我怀疑它有一些模糊的内核模块?

也卸载virtualbox不能解决问题,唯一的解决办法是重新安装Arch新鲜,这是一个痛苦。另外,在试图使用docker开发dotnet核心时,不可能在同一个系统上运行docker和virtualbox。

末更新

我想获得的dotnet核心2泊坞窗运行的基础上,微软dokumentation(https://github.com/dotnet/dotnet-docker-samples/tree/master/aspnetapp):

我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 run -it --rm -p 5000:80 --name bauernsuche_api bauernsucheapi 

预计:容器中运行

IS:错误消息: 您的意思是运行的dotnet SDK命令?请安装dotnet SDK从: http://go.microsoft.com/fwlink/?LinkID=798306&clcid=0x409

现在,因为我使用Microsoft Docker iage,我希望SDK可用于此。此外,我的Dockerfile是Microsoft示例中的一个直接副本,只做了一处更改:版本号从2.0更改为2.0.0,这似乎是正确的,因为2.0会给我提供有关未找到图像的错误。

那么我做错了什么?

我的.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> 
+0

你可以改变'入口点[ “DOTNET”, “api.bauernsuche.de.dll”] '到'ENTRYPOINT [“ls”,“-al”]'看看你在当前文件夹中看到了什么文件 –

+0

我不能在ac中发布输出omment,弼一切,我希望在那里有(其中包括api.bauernsuche.de.dll输出目录的内容) – PWFraley

+0

同样来自该错误消息我怀疑是DOTNET命令以某种方式在路径缺失或不.. 。 – PWFraley

回答

0

所以我不知道是什么问题,但shbash帮助之间切换。我主要将它归因于基本映像中的错误,并且应该报告它。但低于应该修复它为你

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"] 
+0

不,对不起,仍然没有工作,相同的错误信息... – PWFraley

+0

@PWFraley,请尝试现在编辑的版本 –

+0

无变化ENTRYPOINT [”/ bin/bash“,”-lc“,”dotnet api。 bauernsuche.de.dll“]也不起作用。我会在图像的githubpage上提交一个错误,好像我在这里没有任何可怕的错误,这听起来像一个错误:( – PWFraley

1

编辑: 正如我回答here

原因之一,你可以看到此错误消息是当传递给dotnet参数 是未知的。

runtime无法识别您传递给它的参数,并且 想知道您是否应该使用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 [] 

here服用。

注意第一个是sdk图像,第二个是运行时。正如你可以选择downloading from the website

+2

我使用正确的图像,得到我的例子从https://github.com/dotnet/dotnet-docker-samples/tree/master/aspnetapp – PWFraley

0

我在做类似的运行写在F#与码头工人包装的一个DOTNET核心2.x的Web服务的东西。我也使用发布和run-id构建应用程序,但是我开始使用它的方式不同。

而不是使用dotnet作为运动员,你可以直接指定获取发布输出文件夹中生成的可执行二进制文件。在我的情况下,可执行文件称为“主”,我直接运行它。它基本上是启动Dotnet应用程序的主机平台的本地引导程序,包含在所有随附的dll中。你不需要在SDK这个工作,因为你可以看到从我的码头工人文件位置:

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

有一个完整的小例子在linked question

0

我的解决办法是提供完整路径到DOTNET可执行文件( “在/ usr /共享/ 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"] 
+0

没有工作对我来说,仍然是一样的错误 – PWFraley