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

任何尝试都失败了。 我在我的笔记本电脑中有一个很大的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)。

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

docker执行[选项]集装箱命令[ARG …]

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

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

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

当使用docker docker exec你最终在容器中执行一个命令。 docker exec的语法是

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

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

我不是mssql或psql的专家,所以我不知道你在psql命令之前用-u sa来达到什么目的。

如果你看看你的输出结果,你可以看到docker试图运行的可执行文件是-u ,它与你设置用户的尝试相对应,本质上你已经得到了docker命令参数的错误顺序!

尝试把用户选项直接放在exec和容器名称之前

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

您也可能实际上不需要使用-u选项显式指定用户。