在 Docker 上使用 dbup 部署 SQL Server 数据库

问题描述

在我们公司,我们使用几种更新数据库模型的方法。我们使用 sqlproj 和 dacpacs 以及我们有一个使用 dbup 的 .net 核心应用程序。我已成功使用基于本文 automating-sql-server-2019-docker-deployments

的 dacpac 进行容器化

现在我正在研究 Db Up。我试图解决一些挑战,但我无法解决它们。

  1. 我的第一个想法是基于 mcr.microsoft.com/mssql/server:2019-latest 生成一个 dockerfile,然后安装 .net 核心运行时并在 sql 容器内运行构建的 dbup。很难让 .net 核心运行时运行,我似乎无法让它工作。

  2. 我试图使用 docker-compose 来构建一个规范的 sql db,并使用基本映像运行 dbup mcr.microsoft.com/dotnet/core/sdk:3.1 AS build 并连接到 sql db这边走。这也不起作用 这是我的 docker-compose.yml 文件(抱歉,由于某种原因,我无法在此处正确地隐藏代码

版本:“3.7”服务:ms-sql-server:
图片:mcr.microsoft.com/mssql/server:2019-latest 端口: - “1477:1433” 环境: SA_PASSWORD:“超级有趣!23” ACCEPT_EULA: "Y" dbup-exe: 构建:.
依赖于取决于: - ms-sql-server

enter image description here

在我的 Dockerfile 中,我正在调用数据库,但它不会连接到它

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
workdir /src
copY ["/Sentinel.dbup.csproj","Sentinel.dbup/"]
RUN dotnet restore "Sentinel.dbup/Sentinel.dbup.csproj"
workdir "/src/Sentinel.dbup"
copY . .
RUN dotnet build "Sentinel.dbup.csproj" -c Release -o /app
FROM build AS publish
RUN dotnet publish "Sentinel.dbup.csproj" -c Release -o /app
RUN dotnet run Sentinel.dbup --ConnectionString=Server=ms-sql-server,1477;Database=Sentinel_Local;User Id=sa;Password=SuperFun!23; --WithSeedOnce --EnsureDatabase --PerformUpgrade

我有两个错误

System.Data.sqlClient.sqlException (0x80131904):与网络相关的或 建立连接时发生特定于实例的错误 sql 服务器。服务器未找到或无法访问

/bin/sh: 1: 用户: 未找到 /bin/sh: 1: --WithSeedOnce: 未找到

根据我的研究,我虽然在 docker 镜像之间使用 docker compose 时可以引用 ms-sql-server 而不是本地主机。 同样在执行最后一个命令时如何附加多个参数?似乎 --WithSeedOnce 不是应用程序的考虑和论据

解决方法

所以,从我收集的信息来看,有两件事跳出页面:

  • 在 dockerfile 中,RUN 指令在构建镜像时执行。容器启动时执行入口点或命令指令。因此,启动 DbUp 的命令(我假设是当前 dockerfile 中的最后一行)应该从 RUN 更改为 entrypoint。

  • 使用依赖指令并不意味着 docker 会在启动 DbUp 容器之前等待您的数据库准备就绪。这只是意味着数据库容器将在您的 DbUp 启动之前启动。相反,您必须等待代码中的数据库或使用诸如等待之类的包装脚本。检查 documentation here

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...