【问题标题】:Deploying SQL Server database with dbup on Docker在 Docker 上使用 dbup 部署 SQL Server 数据库
【发布时间】:2021-02-03 02:56:10
【问题描述】:

在我们公司,我们使用几种更新数据库模型的方法。我们使用 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,并使用基本映像 mcr.microsoft.com/dotnet/core/sdk:3.1 AS build 运行 dbUp,并以这种方式连接到 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

在我的 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 没有被考虑和应用程序的参数

【问题讨论】:

  • “我们使用 sqlproj 和 dacpacs 以及我们有一个使用 DbUp 的 .net 核心应用程序” - 您是否考虑过简化为使用单一方法?

标签: sql-server linux docker docker-compose dbup


【解决方案1】:

所以,据我所知,有两件事会跳出页面:

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

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

【讨论】:

  • 感谢您的回答,这是有道理的。我发现这个脚本要等待。 “raw.githubusercontent.com/vishnubob/wait-for-it/master/…”问题是我认为服务器已经启动但还没有准备好。当我在删除现有容器和图像后执行 docker-compose up --build 时失败“dbup-exe_1 | 无法直接连接到数据库 dbup-exe_1 | System.Data.SqlClient.SqlException (0x80131904): Login failed for用户‘sa’。”但是如果我再次运行它,因为容器已经准备好了,它就可以工作了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-20
  • 1970-01-01
  • 1970-01-01
  • 2016-01-02
  • 2011-06-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多