创建 ASP.NET Core Web API 后端容器,包括为前端恢复的数据库

Posted

技术标签:

【中文标题】创建 ASP.NET Core Web API 后端容器,包括为前端恢复的数据库【英文标题】:Create ASP.NET Core Web API backend container including restored database for frontend 【发布时间】:2021-11-22 06:05:04 【问题描述】:

我需要使用 SQL Server 2017 数据库创建一个 API Docker 容器。那部分没有问题。我的问题是我想在 docker 容器中恢复一个 .bak 文件,这样前端开发人员只需要执行 docker-compose up 即可让整个后端运行,包括带有测试数据的数据库。

任何帮助将不胜感激;)

我的 Docker-Compse 文件

version: '3.4'

services:
  api:
    image: $DOCKER_REGISTRY-api
    build:
      context: .
      dockerfile: Api/Dockerfile
    depends_on:
            - db
  db:
    image: "mcr.microsoft.com/mssql/server:2017-latest"
    ports:
        - "1433:1433"
    volumes:
        - "sqlvolume:/var/opt/mssql"
    restart: always
    environment:
        SA_PASSWORD: "<password>"
        ACCEPT_EULA: "Y"

还有我的 Dockerfile

FROM mcr.microsoft.com/dotnet/aspnet:3.1 AS base
WORKDIR /app
EXPOSE 80

FROM mcr.microsoft.com/dotnet/sdk:3.1 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

FROM build AS publish
RUN dotnet publish "Api.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .

ENTRYPOINT ["dotnet", "Api.dll"]

【问题讨论】:

【参考方案1】:

从docs 恢复容器中的数据库,您必须创建备份目录并将备份文件复制到其中。从那里您可以运行恢复命令。

您也可以在 Dockerfile 中执行此步骤

FROM mcr.microsoft.com/mssql/server:2019-latest

RUN mkdir /var/opt/mssql/backup
COPY yourbackup.bak /var/opt/mssql/backup/.
COPY entrypoint.sh .
COPY run-initialization.sh .

ENV SA_PASSWORD yourpassword
ENV ACCEPT_EULA Y

CMD /bin/bash ./entrypoint.sh

entrypoint.sh 可能如下所示:

/usr/src/app/run-initialization.sh & /opt/mssql/bin/sqlservr

初始化脚本在后台运行,同时启动sql server。

run-initialization.sh 可能如下所示:

# Wait to be sure that SQL Server came up
sleep 90s

# Run the restore script to create the DB with schema & data
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'yoursapassword' -Q 'RESTORE FILELISTONLY FROM DISK = "/var/opt/mssql/backup/yourbackup.bak"'

【讨论】:

以上是关于创建 ASP.NET Core Web API 后端容器,包括为前端恢复的数据库的主要内容,如果未能解决你的问题,请参考以下文章

使用 ASP.NET Core MVC 创建 Web API

使用 ASP.NET Core MVC 创建 Web API

在c#asp.net core web api中创建jwt令牌[重复]

使用 ASP.NET Core MVC 创建 Web API

使用 ASP.NET Core MVC 创建 Web API

ASP.NET Core Web Api 自动帮助页面