I have followed some articles to be able to use the aspnet core application with sql server.
Unfortunately the migration command does not run.
Provide steps for us to reproduce the issue
version: '3.4'
services:
api:
image: ${DOCKER_REGISTRY-}api
build:
context: .
dockerfile: Api/Dockerfile
depends_on:
- db
db:
image: "mcr.microsoft.com/mssql/server"
environment:
SA_PASSWORD: "Your_password123"
ACCEPT_EULA: "Y"
The Docker file was generated by Visual Studio. I inserted some line to run the entrypoint.sh
FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-stretch-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/core/sdk:2.2-stretch 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
FROM build AS publish
# Inserted lines
COPY ./entrypoint.sh ./app/
RUN chmod +x ./app/entrypoint.sh
CMD /bin/bash ./app/entrypoint.sh
RUN dotnet publish "Api.csproj" -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "Api.dll"]
Entrypoint.sh is from the tutorial of docker page.
#!/bin/bash
set -e
run_cmd="dotnet run --server.urls http://*:80"
until dotnet ef database update; do
>&2 echo "SQL Server is starting up"
sleep 1
done
>&2 echo "SQL Server is up - executing command"
exec $run_cmd
When I run the Docker-Compose project in VS 2019 then I expect the migration has run. But this is not happen.
I did not find any official step-by-step tutorial.
Migrations do not automatically run when your application begins. Running dotnet App.dll will only start the web server. A separate action is required to run migrations.
@ajcvickers - do you have documentation or recommendations on how to achieve migrations inside a docker workflow?
short answer might be
c#
public static async Task Main(string[] args)
{
var host = CreateWebHostBuilder(args).Build();
using (var scope = host.Services.CreateScope())
{
scope.ServiceProvider.GetRequiredService<AppDbContext>().Database.Migrate();
}
host.Run();
}
But I wouldn't say that it's recommended
Notes from triage:
Assigning to @bricelam to review; may be not action here.
@ajcvickers Any updated guidance on how to run migrations in Docker?
@syedhassaanahmed No; this issue is tracking adding this guidance to the docs.
Most helpful comment
short answer might be
c# public static async Task Main(string[] args) { var host = CreateWebHostBuilder(args).Build(); using (var scope = host.Services.CreateScope()) { scope.ServiceProvider.GetRequiredService<AppDbContext>().Database.Migrate(); } host.Run(); }But I wouldn't say that it's recommended