Docker-找不到与命令“ dotnet- / bin / MyApp.dll”匹配的可执行文件

时间:2018-08-14 15:53:47

标签: docker

我正在学习Docker。我有一个使用.NET Core创建的控制台应用程序。该控制台应用程序具有一个Dockerfile。 Dockerfile看起来像这样:

FROM microsoft/dotnet:2.1-runtime AS base
FROM microsoft/dotnet:2.1-sdk

# Copy the compiled files
COPY . ./bin

ENTRYPOINT ["dotnet", "/bin/MyApp.dll"]

我有意要将已编译的文件复制到Docker映像中。由于依赖关系的问题,我不想在Docker映像上构建代码。不过,当我在Visual Studio中选择显示“ Docker”的播放按钮时,可以看到通过“ Output”窗口成功创建了图像。另外,我的控制台应用程序按预期将消息写入“输出”窗口。由于这些原因,我假设我的Dockerfile是正确的。

现在,我尝试从Visual Studio外部的命令行运行构建映像。在我的.csproj文件所在的目录中,运行docker build .。当我这样做时,我看到以下内容:

Sending build context to Docker daemon   11.8MB
Step 1/4 : FROM microsoft/dotnet:2.1-runtime AS base
 ---> 59184f8be664
 ---> Using cache
 ---> 3a64d221c7f1
Step 2/4 : FROM microsoft/dotnet:2.1-sdk
 ---> 6691c7a1e6c7
Step 3/4 : COPY . ./app
 ---> e3e894ef7997
Step 4/4 : ENTRYPOINT ["dotnet", "/bin/MyApp.dll"]
 ---> Running in 355713fb3562
Removing intermediate container 355713fb3562
 ---> 88d4918847b9
Successfully built 78d4918847b8

然后我从命令行运行docker container run 78d4918847b8,然后看到消息:

No executable found matching command "dotnet-/bin/MyApp.dll"

我不明白为什么我可以从Visual Studio运行图像,但不能从命令行运行图像。我在做什么错了?

1 个答案:

答案 0 :(得分:0)

该错误消息实际上表示File not found(请参见https://github.com/dotnet/core-setup/issues/1126,如@oneturkmen所建议)。

找不到文件的原因是因为您正在将文件复制到作为相对路径的./bin,但是ENTRYPOINT/bin中寻找的是绝对路径,相关到根文件夹。

如果您将DOCKERFILE更改为:

FROM microsoft/dotnet:2.1-runtime AS base
FROM microsoft/dotnet:2.1-sdk

# Copy the compiled files
COPY . ./bin

ENTRYPOINT ["dotnet", "./bin/MyApp.dll"]

然后它应该工作。请注意./bin

中的entrypoint