dotnet core 2.0 commands not running in docker - docker

I'm trying to set up my dotnet core app to run through docker on my mac. My Dockerfile looks like this:
FROM microsoft/dotnet:sdk AS build-env
WORKDIR /app
# copy csproj and restore as distinct layers
COPY *.csproj ./
RUN dotnet restore
# copy everything else and build
COPY . ./
RUN dotnet publish -c Release -o out
# build runtime image
FROM microsoft/dotnet:runtime
WORKDIR /app
COPY --from=build-env /app/out ./
ENTRYPOINT ["dotnet", "backend.dll"]
When I run: docker build -t backend .
I get :
Sending build context to Docker daemon 1.133MB
Step 1/10 : FROM microsoft/dotnet:sdk AS build-env
---> 76d532b4a0ca
Step 2/10 : WORKDIR /app
---> Using cache
---> 9c04cc3784c1
Step 3/10 : COPY *.csproj ./
---> Using cache
---> 18b53c11abd6
Step 4/10 : RUN dotnet restore
---> Running in 46f3843faad7
Aborted
The command '/bin/sh -c dotnet restore' returned a non-zero code: 134
I did some debugging and noticed when I ran any command of dotnet it bombs. I ran dotnet --info and it showed the information but also Aborted. Any suggestions would be greatly appreciated.

Related

How to build Docker for VS 2019 solution?

I have a VS 2019 Solution with 2 projects: P1 (Standard lib) & P2 (ASP.NET Core exe).
P2 contains a Dockerfile.
I have copied the Docker file to up folder, tried to build the docker running the cmd :
>docker build -f Dockerfile ..
Sending build context to Docker daemon 3.056GB
Step 1/18 : FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
---> 5d7a95ed1660
Step 2/18 : WORKDIR /app
---> Using cache
---> 6e8271ae3df9
Step 3/18 : EXPOSE 80
---> Using cache
---> e45066aa184b
Step 4/18 : EXPOSE 443
---> Using cache
---> 0bbce5ed4c30
Step 5/18 : FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
---> 925a86b607a3
Step 6/18 : WORKDIR /src
---> Using cache
---> e4af901c8e34
Step 7/18 : COPY ["PropMan/PropMan.csproj", "PropMan/"]
COPY failed: stat /var/lib/docker/tmp/docker-builder808977273/PropMan/PropMan.csproj: no such file or directory
How to fix it?
The directory structure
-Solution dir
--ChartJs.Blazor project
---ChartJs.Blazor.csproj
---ChartJs.Blazor files
--PropMan project
---PropMan.csproj
---PropMan files
---Dockerfie (it was created here but later I moved it to solution folder)
-Dockerfie
The Dockerfile
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["PropMan/PropMan.csproj", "PropMan/"]
COPY ["ChartJs.Blazor/ChartJs.Blazor.csproj", "ChartJs.Blazor/"]
RUN dotnet restore "PropMan/PropMan.csproj"
COPY . .
WORKDIR "/src/PropMan"
RUN dotnet build "PropMan.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "PropMan.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "PropMan.dll"]
I need to go to the solution folder and run
docker build -f PropMan/Dockerfile .
The Dockefile is in project folder.

MSBUILD : error MSB1009: Project file does not exist when building docker file for an ASP.NET Core API application

I am trying to build a docker image for an ASP.NET Core 3.1 application and I fail to restore the packages. My solution has multiple projects and after copying all the project files, I am trying to create a layer which contains restored dependencies only.
The docker file
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS base
WORKDIR /app
EXPOSE 80
FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
WORKDIR /src
COPY ["ExampleApi/ExampleApi.csproj", "ExampleApi/ExampleApi/"]
COPY ["Common.Web/Common.Web.csproj", "ExampleApi/Common.Web/"]
COPY ["Example.Data/Example.Data.csproj", "ExampleApi/Example.Data/"]
COPY ["Example.Services/Example.Services.csproj", "ExampleApi/Example.Services/"]
RUN mkdir /tmp/build/
COPY . /tmp/build
RUN find /tmp/build -name *.csproj
RUN dotnet restore "ExampleApi/ExampleApi.csproj" --verbosity detailed
COPY . .
WORKDIR "/src/ExampleApi/ExampleApi"
RUN dotnet build "ExampleApi.csproj" -c Release -o /app --no-restore
FROM build AS publish
RUN dotnet publish "ExampleApi.csproj" -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "ExampleApi.dll"]
Docker build
I am running without cache to be able to output all the csproj files within the container for each run (otherwise it gets cached and the files are not longer displayed).
docker build --no-cache -f ExampleApi/Dockerfile .
Sending build context to Docker daemon 116.4MB
Step 1/22 : FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS base
---> a843e0fbe833
Step 2/22 : WORKDIR /app
---> Running in e33e9c821c0b
Removing intermediate container e33e9c821c0b
---> eec973a226e0
Step 3/22 : EXPOSE 80
---> Running in 8e813a3a8b85
Removing intermediate container 8e813a3a8b85
---> c8d95a3a1de4
Step 4/22 : FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
---> cef7866e800b
Step 5/22 : WORKDIR /src
---> Running in f56bf9402ed1
Removing intermediate container f56bf9402ed1
---> 55694332db0e
Step 6/22 : COPY ["ExampleApi/ExampleApi.csproj", "ExampleApi/ExampleApi/"]
---> 4beb2e169ec7
Step 7/22 : COPY ["Common.Web/Common.Web.csproj", "ExampleApi/Common.Web/"]
---> ed7a9c81e8f7
Step 8/22 : COPY ["Example.Data/Example.Data.csproj", "ExampleApi/Example.Data/"]
---> aaca52c111b4
Step 9/22 : COPY ["Example.Services/Example.Services.csproj", "ExampleApi/Example.Services/"]
---> efb15c17a096
Step 10/22 : RUN mkdir /tmp/build/
---> Running in 7da9eae324ca
Removing intermediate container 7da9eae324ca
---> b06126b19a7f
Step 11/22 : COPY . /tmp/build
---> 04598eaab98c
Step 12/22 : RUN find /tmp/build -name *.csproj
---> Running in 2fd26dba963d
/tmp/build/ExampleApi/ExampleApi.csproj
/tmp/build/Example.Data/Example.Data.csproj
/tmp/build/Common.Web/Common.Web.csproj
/tmp/build/Example.Sql/Example.!Sql.csproj
/tmp/build/Example.Services/Example.Services.csproj
/tmp/build/Example.Services.Tests/Example.Services.Tests.csproj
/tmp/build/Example.IdentityServer.Infrastructure/Example.IdentityServer.Infrastructure.csproj
/tmp/build/Example.IdentityServer/Example.IdentityServer.csproj
/tmp/build/Example.Data.Tests/Example.Data.Tests.csproj
/tmp/build/ExampleIntegrationApi/ExampleIntegrationApi.csproj
Removing intermediate container 2fd26dba963d
---> 78eadf796305
Step 13/22 : RUN dotnet restore "ExampleApi/ExampleApi.csproj" --verbosity detailed
---> Running in 5dc9b5bbd04e
MSBUILD : error MSB1009: Project file does not exist.
Switch: ExampleApi/ExampleApi.csproj
The command '/bin/sh -c dotnet restore "ExampleApi/ExampleApi.csproj" --verbosity detailed' returned a non-zero code: 1
find indicates that ExampleApi/ExampleApi.csproj is there, yet the dotnet restore complains about not finding it.

Can't create a docker image. A compatible SDK version for global.json version: [2.2.106] from [/app/global.json] was not found

This is my first time using docker so I am probably doing some things wrong. I am trying to dockerize my asp.net core microservice. I was following this tutorial: https://docs.docker.com/engine/examples/dotnetcore/. There I found this dockerfile:
FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build-env
WORKDIR /app
# Copy csproj and restore as distinct layers
COPY FlightManagement.csproj ./
RUN dotnet restore
# Copy everything else and build
COPY . ./
RUN dotnet publish -c Release -o out
# Build runtime image
FROM mcr.microsoft.com/dotnet/core/aspnet:2.2
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "FlightManagement.dll"]
When I try the following command:
docker build -t flightmanagement .
I get the following output:
Sending build context to Docker daemon 5.949MB
Step 1/10 : FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build-env
2.2: Pulling from dotnet/core/sdk
6f2f362378c5: Already exists
494c27a8a6b8: Already exists
7596bb83081b: Already exists
372744b62d49: Already exists
29ec75cd6459: Pull complete
abb902ce071b: Pull complete
eaac80d34a7a: Pull complete
Digest: sha256:f0617d5f2241cc964d0ec4314f3920b843e9737c879d94fdf827ed749bf17cc2
Status: Downloaded newer image for mcr.microsoft.com/dotnet/core/sdk:2.2
---> 155911c343f3
Step 2/10 : WORKDIR /app
---> Running in 5733374f2db1
Removing intermediate container 5733374f2db1
---> c954daddd668
Step 3/10 : COPY *.csproj ./
---> fac826a55fbe
Step 4/10 : RUN dotnet restore
---> Running in b6261ef4d8d5
Restore completed in 2 sec for /app/FlightManagement.csproj.
Removing intermediate container b6261ef4d8d5
---> 9500077ee638
Step 5/10 : COPY . ./
---> d03756b83149
Step 6/10 : RUN dotnet publish -c Release -o out
---> Running in c7a8138ebbbf
A compatible SDK version for global.json version: [2.2.106] from [/app/global.json] was not found
Did you mean to run dotnet SDK commands? Please install dotnet SDK from:
https://go.microsoft.com/fwlink/?LinkID=798306&clcid=0x409
The command '/bin/sh -c dotnet publish -c Release -o out' returned a non-zero code: 145
I tried multiple tutorials on dockerizing an asp.net core application but they al seem to give the same error. I hope someone is ably to help me.
Thanks.
For mcr.microsoft.com/dotnet/core/sdk:2.2, it default .net core sdk is 2.2.300.
But, you create a project with specifying the sdk is 2.2.106 by global.json.
Change your global.json like below:
{
"sdk": {
"version": "2.2.300"
}
}

.NET Core web app won't run in Docker container

I have a vanilla .NET Core 2 web app that I setup in JetBrains Rider and I immediately started working on a Docker environment for it. I followed this guide to get started:
https://docs.docker.com/engine/examples/dotnetcore/
I altered it slightly to come up with this:
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"]
The image builds and when I go to run the container I get the following output:
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
The app doesn't run and I get a message that says I need to install the SDK. What's up with that? Shouldn't the runtime Docker image have everything neede to run the app?
I was able to find the solution by modifying the ENTRYPOINT to run tail -f /dev/null. From there, I entered the container and saw that the name of the binary adjusts based on your project name which the Docker documentation didn't make clear to me.
I also updated my base images and this solved my problem. Here is my latest Dockerfile below:
FROM microsoft/dotnet:2.1-sdk 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:2.1-aspnetcore-runtime AS runtime
RUN mkdir -p /opt/app
WORKDIR /opt/app
COPY --from=packager /opt/build/bin/. .
EXPOSE 80
ENTRYPOINT ["dotnet", "/opt/app/coreapi.dll"]

"RUN dotnet restore" fails while dockerizing ASP.Net Core 2.1 app

While trying to deploy my ASP.Net Core 2.1 app using this article I'm stuck on the problem.
Sending build context to Docker daemon 25.18MB
Step 1/10 : FROM microsoft/dotnet:2.1-aspnetcore-runtime AS build-env
---> 625b44243fbe
Step 2/10 : WORKDIR /app
---> Using cache
---> a8c5d2ab76c0
Step 3/10 : COPY *.csproj ./
---> Using cache
---> c2c11e2b4699
Step 4/10 : RUN dotnet restore
---> Running in 4ae02c24aabc
[91mDid you mean to run dotnet SDK commands? Please install dotnet SDK from:
http://go.microsoft.com/fwlink/?LinkID=798306&clcid=0x409
docker : The command '/bin/sh -c dotnet restore' returned a non-zero code: 145
At D:\Projects\Ozon\solutionName\projectname\deploy.ps1:3 char:1
+ docker build -t projectname .
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (The command '/b...-zero code: 145:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
There is the deploy script I'm running to dockerize my app.
docker build -t projectname .
docker run -d -p 8080:80 --name api projectname
There is my DOCKERFILE
FROM microsoft/dotnet:2.1-aspnetcore-runtime AS build-env
WORKDIR /app
# Copy csproj and restore as distinct layers
COPY *.csproj ./
RUN dotnet restore
# Copy everything else and build
COPY . ./
RUN dotnet publish -c Release -o out
# Build runtime image
FROM microsoft/dotnet:2.1-aspnetcore-runtime
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "projectname.dll"]
What am I doing wrong? Any suggestions would be appreciated.
you're using microsoft/dotnet:2.1-aspnetcore-runtime instead microsoft/dotnet:2.1-sdk. change the base image.

Resources