Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何在Dockerfile中运行SQL脚本以填充Microsoft SQL Docker映像?_Sql Server_Docker_Dockerfile - Fatal编程技术网

Sql server 如何在Dockerfile中运行SQL脚本以填充Microsoft SQL Docker映像?

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

我已从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 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