使用VSTS构build的.NET核心容器不能在Linux上运行
我正在使用Visual Studio Team Services使用aspnetcore
映像构build一个.NET Core容器。 如果我在Linux机器上从源代码构build图像,我可以运行它,并curl localhost
很好。
但是,在VSTS中运行相同的代码,构build相同的图像会产生不同的结果。 我正在使用“托pipe的Linux预览版”来构build可以工作的图像。 CI构build成功并将映像上载到我的私有Azureregistry。 当我在上面提到的同一台Linux机器上运行这个映像时,它会立即退出,并在日志中出现这个错误:
Did you mean to run dotnet SDK commands? Please install dotnet SDK from:...
这是Dockerfile:
FROM microsoft/aspnetcore:1.1 WORKDIR /app COPY published . ENV ASPNETCORE_URLS http://+:80 EXPOSE 80 ENTRYPOINT ["dotnet", "ContainerPOC.dll"]
该错误是由VSTS上的dotnet Publish任务中的错误引起的。 当这个命令被configuration时:
dotnet publish --output publish
这是执行:
dotnet publish --output publish/s
所添加的/s
导致输出转到publish文件夹中名为“s”的子文件夹。 我改变了Dockerfile来反映这个位置(COPY指令),一切都很好。
错误是可重现的:
- 注释掉
ENTRYPOINT
指令 - build立图像
- 从映像运行容器并执行交互式bash shell
- 执行
dotnet
命令并指定工作目录中不存在的程序集名称
Did you mean..?
错误将会出现。 鉴于这种情况,这不是一个很明显的错误。