Sql server 如何在Dockerfile中运行SQL脚本以填充Microsoft SQL Docker映像?
我已从Docker Hub下载了Microsoft SQL Server Express映像。我试图通过添加带有空表的空数据库来扩展它,并将该输出作为映像,然后在整个项目中使用 如何运行以下SQL脚本 initdb.sql 以下是我到目前为止的Dockerfile:Sql server 如何在Dockerfile中运行SQL脚本以填充Microsoft SQL Docker映像?,sql-server,docker,dockerfile,Sql Server,Docker,Dockerfile,我已从Docker Hub下载了Microsoft SQL Server Express映像。我试图通过添加带有空表的空数据库来扩展它,并将该输出作为映像,然后在整个项目中使用 如何运行以下SQL脚本 initdb.sql 以下是我到目前为止的Dockerfile: FROM microsoft/mssql-server-windows-express AS base WORKDIR /app ENV ACCEPT_EULA Y ENV sa_password supersecretpassw
FROM microsoft/mssql-server-windows-express AS base
WORKDIR /app
ENV ACCEPT_EULA Y
ENV sa_password supersecretpassword
FROM base AS final
WORKDIR /app
我不知道是否要使用CMD命令或以某种方式调用SQLCMD,但我不知道这样做的正确方法
任何帮助都将不胜感激。希望有人能找到比这更好的解决方案,但我最终还是编写了一个C函数来实现它。由于我正在使用SQL docker进行一些基于C的自动化测试,因此添加这项测试并不是什么大问题,具体如下:
private bool SqlServerScript(string connection, string filename) {
try {
using (SqlConnection sqlConnection = new SqlConnection(connection)) {
sqlConnection.Open();
SqlCommand sqlCommand = new SqlCommand(File.ReadAllText(filename), sqlConnection);
sqlCommand.ExecuteNonQuery();
return true;
}
} catch {
}
return false;
}
错误处理留给读者作为练习创建DockerFile时,您可以执行以下操作:
FROM mysql:latest
ENV MYSQL_ROOT_PASSWORD 1234
ENV MYSQL_DATABASE dbName
ENV MYSQL_USER user
ENV MYSQL_PASSWORD 123
ADD myScript.sql /docker-entrypoint-initdb.d
EXPOSE 3306
通过这样做,它将在创建此docker映像时运行myScript.sql
啊,重要的是要提到myScript.sql文件应该与DockerFile文件位于同一目录中
我希望这能帮助您:
FROM mysql:latest
ENV MYSQL_ROOT_PASSWORD 1234
ENV MYSQL_DATABASE dbName
ENV MYSQL_USER user
ENV MYSQL_PASSWORD 123
ADD myScript.sql /docker-entrypoint-initdb.d
EXPOSE 3306