我有一个使用 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 https://gist.github.com/jschwarty/6f9907e2871d1ece5bde53d259c18d5f对于 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旁边,因为它被复制到图像中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)