在创建新的ASP.NET Core MVC应用程序时,特别是在React / Redux(或其他需要Node.js的)模板上使用什么正确的Docker映像?如果不是特定的映像,对于由ASP.NET Core MVC支持的Node.js应用程序,应该在Dockerfile中遵循什么命令或过程?
除了运行支持MVC站点外,我不需要框架的SDK版本。
dotnet new reactredux
运行时映像未安装Node.js,在尝试运行容器时将出错。
Dockerfile:
FROM microsoft/aspnetcore:latest ARG source=./bin/Debug/netcoreapp2.0/publish/ WORKDIR /app COPY $source . EXPOSE 80 ENTRYPOINT ["dotnet", "Project.dll"]
错误:
Unhandled Exception: System.AggregateException: One or more errors occurred. (Failed to start Node process. To resolve this:. [1] Ensure that Node.js is installed and can be found in one of the PATH directories. Current PATH enviroment variable is: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin Make sure the Node executable is in one of those directories, or update your PATH.
我正在使用的项目已从用于.NET Standard 1.1(独立)的ASP.NET MVC升级到新的.NET Standard 2.0 React / Redux项目。
问题是您的dockerfile(microsoft / aspnetcore:latest)中的基础映像没有安装节点。
因此,您必须安装节点才能运行该项目。这是我想到的dockerfile:
FROM microsoft/aspnetcore:2.0 ARG source EXPOSE 80 5102 ENV ASPNETCORE_URLS http://*:80 RUN apt-get -qq update && apt-get -qqy --no-install-recommends install wget gnupg \ git \ unzip RUN curl -sL https://deb.nodesource.com/setup_6.x | bash - RUN apt-get install -y nodejs WORKDIR /app COPY ${source:-obj/Docker/publish} . ENTRYPOINT ["dotnet", "Project.dll"]
请注意,在dockerfile的第5行中,我如何运行命令来更新apt-get。然后在第8-9行中将节点安装到Docker映像
仍然存在问题,无法从webpack替换热模块。甚至没有完全刷新的效果。我仍在寻找它。
更新: 所以我调查了热模块更换问题,它似乎是Windows的docker的局限性。
解决方法是配置webpack,以便它可以告诉浏览器在确定的时间内轮询更改。查看此链接以了解如何配置它
更新: 做更多的研究,我发现microsoft具有可用于构建项目的映像,它称为:microsoft / aspnetcore- build。该映像具有构建所需的所有依赖关系(包括nodejs)。
因此,最后,我要做的就是将Dockerfile保留为原样(以microsoft / aspnetcore:2.0作为基础映像),并创建了一个新的Dockerfile进行开发,该文件引用了我之前提到的构建映像。在docker compose的帮助下,我根据环境切换了Dockerfile。
这种方法似乎更方便,因为当将图像部署到生产环境时,它们应该已经准备好所有的javascript代码(对于带有angular 2,react等的spa应用程序),换句话说,它们不应该具有nodejs依赖性,因此它们的重量较轻。