任何尝试都失败了。 我的笔记本电脑中有一个大的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)。
答案 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
选项明确指定用户。