【发布时间】:2018-10-01 01:36:55
【问题描述】:
我在 JetBrains Rider 中设置了一个普通的 .NET Core 2 Web 应用程序,我立即开始为它开发一个 Docker 环境。我按照本指南开始:
https://docs.docker.com/engine/examples/dotnetcore/
我稍微修改了一下,想出了这个:
FROM microsoft/dotnet:latest AS packager
RUN mkdir -p /opt/build
WORKDIR /opt/build
# Copy csproj and restore as distinct layers
COPY *.csproj .
RUN dotnet restore
# Copy everything else and build
COPY . .
RUN dotnet publish -c Release -o bin
# --
# Build runtime image
FROM microsoft/dotnet:runtime AS runtime
RUN mkdir -p /opt/app
WORKDIR /opt/app
COPY --from=packager /opt/build/bin/. .
ENTRYPOINT ["dotnet", "/opt/app/aspnetapp.dll"]
图像构建,当我去运行容器时,我得到以下输出:
dan@mycomputer ~/Desktop/coreapi (master)
$ docker build -t myapp .
Sending build context to Docker daemon 25.09kB
Step 1/12 : FROM microsoft/dotnet:latest AS packager
---> e1a56dca783e
Step 2/12 : RUN mkdir -p /opt/build
---> Using cache
---> 95f9c936d0d1
Step 3/12 : WORKDIR /opt/build
---> Using cache
---> 64f26c356fd7
Step 4/12 : COPY *.csproj .
---> Using cache
---> 38a2fb7ca6bb
Step 5/12 : RUN dotnet restore
---> Using cache
---> 70dbc44d98ae
Step 6/12 : COPY . .
---> Using cache
---> b1019d53a861
Step 7/12 : RUN dotnet publish -c Release -o bin
---> Using cache
---> 8e112606633a
Step 8/12 : FROM microsoft/dotnet:runtime AS runtime
---> cc240a7fd027
Step 9/12 : RUN mkdir -p /opt/app
---> Using cache
---> 954f494febc4
Step 10/12 : WORKDIR /opt/app
---> Using cache
---> b74be941e7dc
Step 11/12 : COPY --from=packager /opt/build/bin/. .
---> Using cache
---> 4c229192d99b
Step 12/12 : ENTRYPOINT ["dotnet", "/opt/app/aspnetapp.dll"]
---> Using cache
---> fb6ef4015fba
Successfully built fb6ef4015fba
Successfully tagged myapp:latest
SECURITY WARNING: You are building a Docker image from Windows against a non-Windows Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended to double check and reset permissions for sensitive files and directories.
dan@mycomputer ~/Desktop/coreapi (master)
$ docker run -p 5001:5001 myapp:latest
Did you mean to run dotnet SDK commands? Please install dotnet SDK from:
http://go.microsoft.com/fwlink/?LinkID=798306&clcid=0x409
应用程序无法运行,并且我收到一条消息,提示我需要安装 SDK。那是怎么回事?运行时 Docker 映像不应该包含运行应用程序所需的一切吗?
【问题讨论】:
-
只是一个疯狂的猜测,但也许可以尝试用 FROM microsoft/dotnet:sdk AS packager 替换 FROM microsoft/dotnet:latest AS packager
-
这就是我最初拥有的,但也没有用。在进行任何自定义之前,我自己尝试了原版图像,但它也不起作用。此外,二进制文件似乎是在
packager中构建的,但是当最后一行ENTRYPOINT执行时,容器似乎没有运行可执行文件所需的运行时文件。 -
也许没有 AS 运行时?在第二部分?
-
顺便说一句,名称区分大小写,因此请确保正在构建的 dll 确实是 aspnetapp.dll 而不是 AspNetApp.dll 之类的东西
-
正如我刚才提到的,我尝试过香草,所以在第一次运行时它没有,对吧?这也不影响任何事情。该错误并没有说它找不到它说它找不到运行时/sdk 的二进制文件。感谢您的尝试,但我正在寻找具有丰富经验的人,而不是随机猜测。如果您想启动我在上面指定的测试环境并自己尝试并返回实际结果,无论如何。否则,不幸的是,这些想法并不是很有帮助。
标签: docker asp.net-core .net-core-2.0