更新 好吧我想出了什么,但我仍然没有解决方案。这个问题似乎只发生在基于Arch的系统上(Antergos,Manjaro,Arch)。
如果我使用xfce和docker以及dotnet core 2安装一个干净的系统,我可以使用dotnet core构建和运行docker镜像。
安装VirtualBox后,下面的问题开始发生,所以我怀疑它与一些不起眼的内核模块有关???
同样卸载virtualbox无法解决问题,只有解决方案是重新安装Arch新鲜,这很痛苦。此外,在尝试使用docker开发dotnet核心时,无法在同一系统上运行docker和virtualbox。
结束更新
我试图让dotnet core 2与docker一起运行,基于microsofts 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 build -t bauernsucheapi .
构建完成后,我试图通过以下方式启动新图像:
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示例中的一个直接副本,只有一个更改:Versionnumber从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 :(得分: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。
答案 1 :(得分:0)
所以我不确定问题是什么,但在sh
和bash
之间切换会有所帮助。这个我主要归因于基本图像中的一个错误,你应该报告它。但是下面应该为你解决它
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"]
答案 2 :(得分:0)
我正在做类似的事情,运行用F#编写并与Docker打包在一起的Dotnet Core 2.x Web服务。我也使用带有run-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"]
中有一个完整的迷你示例
答案 3 :(得分:0)
我的解决方案是提供dotnet可执行文件的完整路径(&#34; / usr / share / dotnet / dotnet&#34;)查看最后阶段的入口点
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"]