A few days ago I was containerizing an Angular web application and ran into an issue that I think is worth documenting for future reference.
Implementing the application itself went without a hitch, and everything looked good when hitting F5 in Visual Studio. But When I ran
docker build, I got the following error from the step that ran
> firstname.lastname@example.org build /src/MyApp/ClientApp > ng build "--prod" Killed npm ERR! code ELIFECYCLE npm ERR! errno 137 npm ERR! email@example.com build: `ng build "--prod"` npm ERR! Exit status 137 npm ERR! npm ERR! Failed at the firstname.lastname@example.org build script. npm ERR! This is probably not a problem with npm. There is likely additional logging output above. npm ERR! A complete log of this run can be found in: npm ERR! /root/.npm/_logs/2018-11-03T09_21_34_260Z-debug.log
The first thing to know is that the
Dockerfile was building and publishing the application in Release mode, not Debug mode (which I had been using to run it in Visual Studio). So first things first, I tried to publish it in Release mode on its own (not by building the Dockerfile) with
dotnet publish -c Release MyApp.csproj… and that worked fine. So the issue had to do with the fact that the app was being built/published inside a container.
With a bit of googling I found out that error 137 usually means that the process was killed by the Linux kernel when the system is running out of memory.
So I looked at my Docker configuration (right-click the docker icon in the system tray, go to Settings, then Advanced) and saw that the Linux VM was configured with only 2GB of RAM. I’m surprised that isn’t enough, but I bumped it to 4GB to see if it made any difference… and it did!
docker build now ran successfully!
At some point I’ll figure out why my application requires so much RAM to build… but at least now I’m able to create the docker image successfully.