Docker-在容器中运行sql文件
任何尝试都失败了。 我的笔记本电脑中有一个很大的sql脚本,我想在docker容器中运行它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
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