2017-09-10 35 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