Docker - 在容器中运行一个sql文件

时间:2017-10-25 10:15:15

标签: docker

任何尝试都失败了。 我的笔记本电脑中有一个大的sql脚本,我想在我的docker容器中运行它。

我相信我必须先复制它=:

docker cp ./my_cool_script.sql container_mssql_1:/my_cool_script.sql

这似乎运行并没有给出任何成功或失败所以我认为它没问题?

然后我尝试:

docker exec container_mssql_1 -u sa psql databasename sa -f /my_cool_script.sql

但我得到:

rpc error: code = 2 desc = oci runtime error: exec failed: container_linux.go:262: starting container process caused "exec: \"-u\": executable file not found in $PATH"

任何想法,或者有更好的方法来做到这一点。该文件非常大(30MB)。

4 个答案:

答案 0 :(得分:2)

https://docs.docker.com/engine/reference/commandline/exec/

  

docker exec [OPTIONS] CONTAINER COMMAND [ARG ...]

-u选项需要之前容器的名称。

docker exec -u sa container_mssql_1 psql databasename sa -f /my_cool_script.sql

这就是为什么它在抱怨"我的PATH上没有名为-u"的可执行文件。它以为你想运行一个名为-u的命令。

答案 1 :(得分:2)

您可以使用 SQL Server 映像附带的 sqlcmd 实用程序执行此操作。您确实需要先将脚本复制到容器中。

docker cp script.sql <container_id|container_name>:/tmp/

然后,在容器内使用 sqlcmd 实用程序。
docker exec -it <container_id|container_name> /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P <your_password> -i /tmp/script.sql

sqlcmd 文档:https://docs.microsoft.com/en-us/sql/ssms/scripting/sqlcmd-run-transact-sql-script-files
Docker 映像:https://hub.docker.com/_/microsoft-mssql-server

在图像 :2019-CU8-ubuntu-16.04 上使用 ~700mb 脚本进行测试

答案 2 :(得分:0)

使用docker exec时,您最终会在容器内执行命令。 docker exec的语法是

docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

使用你使用的命令,它将“-u”视为COMMAND,它不是可以在$ PATH中找到的可执行文件。

我不是mssql或psql的专家,所以我不知道你在psql命令之前用-u sa想要实现的目标。

答案 3 :(得分:0)

如果查看输出,可以看到docker尝试运行的可执行文件是-u,这与您设置用户的尝试相对应 - 实际上您刚刚获得了{{1}命令参数的顺序错误!

尝试将用户选项直接放在docker之后和容器名称之前......

exec

您也可能实际上不需要使用docker exec -u sa container_mssql_1 psql databasename sa -f /my_cool_script.sql 选项明确指定用户。