Docker-在容器中运行sql文件

Docker-在容器中运行sql文件,docker,Docker,任何尝试都失败了。 我的笔记本电脑中有一个很大的sql脚本,我想在docker容器中运行它 docker exec -u sa container_mssql_1 psql databasename sa -f /my_cool_script.sql 我想我必须先复制它=: docker cp ./my_cool_script.sql container_mssql_1:/my_cool_script.sql 这似乎运行,不给任何成功或失败,所以我认为它可以吗 然后我尝试: docker e

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

docker exec -u sa container_mssql_1 psql databasename sa -f /my_cool_script.sql
我想我必须先复制它=:

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)。

docker exec[OPTIONS]容器命令[ARG…]

-u
选项必须位于容器名称之前

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

这就是为什么它抱怨“在名为
-u
的路径上没有可执行文件”。当使用
docker exec
时,它认为您想要运行一个名为
-u

的命令,您最终在容器内执行一个命令。
docker exec
的语法为

docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
使用您使用的命令时,它会将“-u”视为命令,它在$PATH中找不到可执行文件


我不是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
选项显式指定用户。

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

docker cp script.sql:/tmp/

然后,在容器内使用sqlcmd实用程序
docker exec-it/opt/mssqltools/bin/sqlcmd-S localhost-U sa-P-i/tmp/script.sql

sqlcmd文档:
Docker图像:


在image:2019-CU8-ubuntu-16.04上进行测试,使用约700mb的脚本

如果您可以共享
Dockerfile
的内容,以更好地了解上下文,特别是从您正在构建的基础映像。。。。与“手动”执行
cp
步骤不同,您可以将其添加到
Dockerfile
(或派生的
Dockerfile
)中。这将是我在本地使用mssqlI设置本地环境的一个1关。获取此信息:找不到用户sa:passwd文件中没有匹配的条目看起来您的原始错误现在已经解决,现在你有了一个新的错误。您的问题是“在我的整个用例工作之前解决所有错误”?这对这个论坛来说太广泛了。StackOverflow用于最小化、可重复的问题。为下一个错误提出一个新问题是合适的,但必须经过充分的研究证明(我这样说是因为新的错误——就像第一个错误一样——是一个非常清楚、简单的错误;请证明您确实试图独立解决这个问题)。问问自己:我为什么要写
-u sa
?您是否希望名为
sa
的用户存在?错误是告诉您没有这样的用户。您是指PostgreSQL用户吗<代码>docker exec-u指的是容器操作系统中的用户,而不是PostgreSQL用户。谢谢-它的MSSQL不是postgres。我试图使用sa帐户执行sql