asp.net - 如何将种子数据放入SQL Server docker镜像中?

标签 asp.net sql-server docker docker-compose

我有一个使用 ASP.NET Core 和 SQL Server 的项目。我正在尝试将所有内容放入 docker 容器中。对于我的应用程序,我需要在数据库中有一些初始数据。 我可以使用来自 microsoft (microsoft/mssql-server-linux) 的 docker sql server 镜像,但它(显然)是空的。这是我的 docker-compose.yml:

version: "3"
services:
    web:
        build: .\MyProject
        ports:
            - "80:80"
        depends_on:
            - db
    db:
        image: "microsoft/mssql-server-linux"
        environment:
            SA_PASSWORD: "your_password1!"
            ACCEPT_EULA: "Y"

我有一个 SQL 脚本文件,需要在数据库上运行它来插入初始数据。我找到了example对于 mongodb,但我找不到可以使用哪个工具来代替 mongoimport。

最佳答案

您可以通过构建自定义镜像来实现此目的。我目前正在使用以下解决方案。你的 dockerfile 中的某个位置应该是:

RUN mkdir -p /opt/scripts
COPY database.sql /opt/scripts

ENV MSSQL_SA_PASSWORD=Passw@rd
ENV ACCEPT_EULA=Y

RUN /opt/mssql/bin/sqlservr --accept-eula & sleep 30  & /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'Passw@rd' -d master -i /opt/scripts/database.sql 

或者,您可以等待输出特定文本,这在处理 dockerfile 设置时很有用,因为它是立即的。它的鲁棒性较差,因为它当然依赖于一些“随机”文本:

RUN ( /opt/mssql/bin/sqlservr --accept-eula & ) | grep -q "Service Broker manager has started" \
    && /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'Passw@rd' -i /opt/scripts/database.sql

不要忘记将database.sql(带有您的脚本)放在dockerfile旁边,因为它会被复制到镜像中。

关于asp.net - 如何将种子数据放入SQL Server docker镜像中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46913047/

相关文章:

docker - 如何查看在我的 Google Cloud Platform Cloud Run 服务上运行的文件?

asp.net - 我应该将 IList 或 List 返回到 MVC 中的 Controller 吗?

sql - MS sql时态表查找上次更改的列的历史记录

asp.net - 如何将 JQuery 与母版页结合使用?

sql - Char(4) 与 int 作为表中的 StatusID/StatusCode 列

sql-server - 如何使用 Amazon AWS RDS 安装 "Advanced Analytics Extensions"?

c# - Webapi 在 docker-compose 中看不到 MongoDB

node.js - 每个容器需要多少内存以及cpu nginx和nodejs?

java - 禁用按钮在火狐中工作正常,但在 IE 中不行

asp.net - 来自 Controller 的数据在 View 中不可见 - ASP MVC