Docker Compose Sql server 启动时自动创建数据库和表

Jan*_*ana 6 docker docker-compose asp.net-core-webapi

我使用 Sql 服务器创建了一个 asp.net core web api。通过运行 docker compose 文件,我需要创建一个数据库和表。我的解决方案如下

Dockerfile

FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE 80

FROM microsoft/dotnet:2.2-sdk AS build
WORKDIR /src
COPY StarterPackMSSQL.StarterPackMSSQL.csproj StarterPackMSSQL/
RUN dotnet restore StarterPackMSSQL/StarterPackMSSQL.csproj
COPY . .
WORKDIR /src/StarterPackMSSQL
RUN dotnet build StarterPackMSSQL.csproj -c Release -o /app

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

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "StarterPackMSSQL.dll"]
Run Code Online (Sandbox Code Playgroud)

docker-compose.yml

version: '3.5'

networks : 
  localdev:
    name: localdev

services:
 starterpackmssql:
    image: ${DOCKER_REGISTRY-}mssql
    restart: always
    build:
      context: .
      dockerfile:StarterPackMSSQL/Dockerfile
    ports:
      - "5001:80"
    depends_on:
      - db-server
    networks:
      - localdev

  db-server:
    image: microsoft/mssql-server-linux
    container_name: db-server
    environment:
      - ACCEPT_EULA=Y
      - MSSQL_SA_PASSWORD=password123
      - MSSQL_TCP_PORT=1433

    ports:
      - "1400:1433"
    networks:
      - localdev
Run Code Online (Sandbox Code Playgroud)

SQL脚本

CREATE DATABASE [StarterPacksDB]
GO

USE [StarterPacksDB]
GO

/****** Object:  Table [dbo].[Users]    Script Date: 10/18/2019 10:42:39 PM ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[User](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [handle] [varchar](50) NOT NULL,
 CONSTRAINT [PK_Users] PRIMARY KEY CLUSTERED 
(
    [id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
Run Code Online (Sandbox Code Playgroud)

我只需要在运行时自动创建数据库和表docker-compose up

而且它应该可以在 Mac 和 Windows 上运行。

Adi*_*iii 4

对于 MySQL 和 Postgress 等,所有数据库映像都附带开箱即用的方便入口点脚本,用于执行数据库初始化等任务,但 MSSQL docker 映像没有入口点。因此,我建议使用官方推荐的方法,因为您当前的脚本将无法按照您的预期工作。

\n
\n

但官方图像建议您还可以使用\nentrypoint.sh 脚本中的工具来执行创建数据库或登录、\n附加数据库、导入数据或其他设置任务等操作。请参阅此示例,\n使用entrypoint.sh 脚本创建数据库和架构,并\nbcp 某些数据

\n
\n

入口点 CMD,在运行时执行import-data.sh脚本,以使用 sqlcmd 执行 .sql 脚本来创建数据库并填充初始架构到其中。

\n

现在,使上述入口点正常工作的第二件事是,您应该使用 MS 更新的最新推荐的图像。因为当前图像已被弃用。

\n
\n

microsoft/mssql-server-linux

\n

作者:microsoft \xe2\x80\xa2 更新于 10 个月前 已弃用 Linux 上的 SQL Server\n容器存储库。请参阅下面的更多细节。

\n

我们正在迁移到 mcr.microsoft.com,您可以在其中获取 Linux 容器上的最新 SQL\nServer 2017 和 SQL Server 2019。我们将不再\n使用更新来更新此容器存储库,并且我们最终\n将从此存储库中删除所有容器映像。

\n

请访问我们的新 Docker Hub 页面\n https://hub.docker.com/r/microsoft/mssql-server

\n
\n

https://hub.docker.com/r/microsoft/mssql-server-linux/

\n