Docker Compose copies one folder but not another - .net-core

I am still learning Docker and this situation has me stumped. Docker will copy one folder to the image/container but the other folder it skips and I can't figure out why.
Docker desktop 4.X Ubuntu (Linux) container
.NET 5.0 Blazor application
So in the application build the following two folders are output:
In the container though only one folder is there
My first thought would be caching but I am using docker-compose build --no-cache and docker-compose up -d --force-recreate.
I don't think the Dockerfile is the problem, or else I would not see any folders.
Update
Added Dockerfile:
FROM mcr.microsoft.com/dotnet/aspnet:5.0-buster-slim AS base
WORKDIR /app
EXPOSE 465
FROM mcr.microsoft.com/dotnet/sdk:5.0-buster-slim AS build
WORKDIR /src
COPY ["./Email.Shared/Email.Shared.csproj", "./Email.Shared/"]
COPY ["./Email.API/Email.API.csproj", "./"]
RUN dotnet restore "Email.API.csproj"
COPY . .
WORKDIR "/src/Email.API"
RUN dotnet build "Email.API.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "Email.API.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Email.API.dll", "--urls", "http://+:5150"]

Related

Unable to run ASP.NET Core migration in docker container

I have created Dockerfile for the backend api. I want to update my database before the application starts to run.
Below is the docker file
# Build Stage
FROM mcr.microsoft.com/dotnet/sdk:6.0-focal AS build
WORKDIR /source
COPY ./orh-backend ./project
COPY ./function-script ./function-script
RUN dotnet restore "./project/md.api/md.api.csproj" --disable-parallel
RUN dotnet publish "./project/md.api/md.api.csproj" -c release -o /app --no-restore
WORKDIR /source/project/md.ef
RUN dotnet tool install --global dotnet-ef
RUN dotnet ef database update --context=TransactionDbContext
# Serve stage
FROM mcr.microsoft.com/dotnet/aspnet:6.0-focal
WORKDIR /app
COPY --from=build /app ./
EXPOSE 5000
ENV ASPNETCORE_URLS=http://+:5000
ENV ASPNETCORE_ENVIRONMENT=Production
# ENTRYPOINT ["dotnet", "orch.api.dll"]
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
When I run docker compose build below error comes
I was expecting tables to be created.
I have tried the below commands as well.
CMD ["dotnet", "ef", " database update --context=TransactionDbContext" ]
ENV PATH $PATH:/root/.dotnet/tools

Adding ASPNETCORE_URL in Dockerfile having no effect

I created a template ASP.Net docker project and made the following changes:
Change it to Asp.Net 7
Only EXPOSE 5000 in the Dockerfile
Add ENV ASPNETCORE_URLS=http://+:5000 to the Dockerfile
Now when I run the Docker locally it tries and fails to go to https://localhost:0/. Changing the port in the url to 5000 and changing to http doesn't help.
Visual studio is telling me the Container Port is 5000:
However the ASPNETCORE_URLS remain +443 and +80 in the Environment tab:
Shouldn't they be swapped out for my rules? I just want to be able to go to localhost:5000 and see the application. What am I missing?
My Dockerfile is:
FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS base
WORKDIR /app
EXPOSE 5000
ENV ASPNETCORE_URLS=http://+:5000
FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build
WORKDIR /src
COPY ["IANSW.Web/IANSW.Web.csproj", "IANSW.Web/"]
RUN dotnet restore "IANSW.Web/IANSW.Web.csproj"
COPY . .
WORKDIR "/src/IANSW.Web"
RUN dotnet build "IANSW.Web.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "IANSW.Web.csproj" -c Release -o /app/publish /p:UseAppHost=false
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "IANSW.Web.dll"]

How to run an ASP .NET 6 API in a docker container on a raspberry pi / armv7

If I deploy my API directly I can start it via dotnet <app.dll>.
I want to deploy it in a container tho. However, the container always exits with an error code 132 or 130 depending on the Dockerfile used. I will post it here:
FROM mcr.microsoft.com/dotnet/aspnet:3.1-bullseye-slim-arm32v7 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["API/API.csproj", "API/"]
RUN dotnet restore "API/API.csproj"
COPY . .
WORKDIR "/src/API"
RUN dotnet build "API.csproj" -c Release -o /app/build -r linux-arm
FROM build AS publish
RUN dotnet publish "API.csproj" -c Release -o /app/publish -r linux-arm
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "API.dll"]
The first line of this Dockerfile is what I have been changing up in order to "find" the correct runtime. I tried many containers listed here at the Linux arm32 Tags section. All containers I tried exit with an error immediately:
I would greatly appreciate any help on how to resolve this issue :)
EDIT:
I use a raspberry pi 4 Model B with 8GB of RAM

C# app runs fine on VM, but not on docker

Have a small ftp server with http in a app, which runs fine in a vm.
I'm trying to dockerize it, which when I do, works ok If I ssh in the container (I can telnet both localhost and the container VM), but I can't access from the machine.
Here is my dockerfile:
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["proj.csproj", "proj"]
RUN dotnet restore "proj/proj.csproj"
COPY . .
WORKDIR "/src/proj"
RUN dotnet build "proj.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "proj.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
EXPOSE 21
EXPOSE 80
ENV ASPNETCORE_ENVIRONMENT=development
ENTRYPOINT ["dotnet", "proj.dll", "--urls", "http://0.0.0.0:80"]
Docker inspect:
"Ports": {
"21/tcp": null,
"80/tcp": null
PS: I changed the paths manually to not expose my project, so may have some mistakes with folders name

ASP.NET Core app for Raspberry Pi using Docker in VS2017

I want to deploy my Asp.Net Core 2.1 app to my Raspberry Pi 3.
Here is the scenario:
I developed the application in VS 2017 as a docker wrapped app
Raspberry Pi is running Raspbian with docker installed.
The application is running fine on development machine, but when I deploy the image to Raspberry and try to run it there I'm getting the error:
standard_init_linux.go:190: exec user process caused "exec format error"
I assume that this is happening because my image has wrong architecture (intel instead of arm), but I don't know how to fix that. Please advise.
This is my docker file:
FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE 80
FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /src
COPY ["WebApplication4/WebApplication4.csproj", "WebApplication4/"]
RUN dotnet restore "WebApplication4/WebApplication4.csproj"
COPY . .
WORKDIR "/src/WebApplication4"
RUN dotnet build "WebApplication4.csproj" -c Release -o /app
FROM build AS publish
RUN dotnet publish "WebApplication4.csproj" -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "WebApplication4.dll"]
Have you tried this?
# This Dockerfile uses nightly preview builds for .NET Core
# It will be updated to .NET Core 2.2 shortly
FROM microsoft/dotnet-nightly:2.1-sdk AS build
WORKDIR /app
# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore
# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /app/aspnetapp
RUN dotnet publish -c Release -o out
FROM microsoft/dotnet-nightly:2.1-aspnetcore-runtime AS runtime
WORKDIR /app
COPY --from=build /app/aspnetapp/out ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
This is suggested at the official dockerhub. There are also some images tagged with arm32.

Resources