我有一个SQL文件,我正在尝试将其导入本地docker实例。我正在运行以下命令:
attribute()
运行它时,我收到以下错误消息: OCI运行时exec失败:exec失败:container_linux.go:348:启动容器进程导致“ exec:\” ../ my.file.sql \”:stat ../my.file.sql:无此类文件或目录” :未知
我离文件只有一个目录,因此命令中的docker exec -i 868b7935cc37 ../my.file.sql -u {user} --password={password} {dbName}
。我和提供文件的人交谈,用户名,密码和名称都是正确的。名称,密码等均不包含任何特殊字符。
我觉得我就在那里。我不知道为什么会出现../
错误。
任何帮助,我们将不胜感激!
码头工人检查给了我
no such file or directory
]
答案 0 :(得分:1)
我认为问题是对docker exec如何工作的误解。如果您将容器视为远程计算机,而将docker exec作为在本地计算机上运行的命令,则会导致远程计算机执行安装在远程计算机上的某些命令,则它可能会变得更加清晰
现在看来,您在本地计算机(容器外部)上有一个文件,并且将其作为命令传递,希望远程计算机(容器内部)运行,但是该文件在本地计算机上机器,而不是远程机器,因此即使可以进行处理(docker帮助页面上说它必须是可执行文件-在这种情况下是否是sql文件可执行文件?),该文件也不在要处理它的机器上。
调用docker exec并在容器外部传递文件的文件引用,不会导致将本地文件发送到容器中并在内部执行
这样,我认为您必须做更多类似的事情
docker cp ../myfile.sql DOCKERCONTAINERNAME:/root/myfile.sql
要将文件复制到容器中,然后类似:
docker exec DOCKERCONTAINERNAME mysqlimporttool -u mysqluser -p pass /root/myfile.sql
要让docker为您启动容器内导入工具并传递您指定的参数。该工具将在容器内启动,并在第一步中处理您复制到容器中的文件
答案 1 :(得分:0)
您不需要docker exec
与在容器中运行的服务器进行交互。只需使用您通常用来与之交谈的普通客户端程序即可。
例如,如果您启动数据库容器,则按如下方式发布正常的MySQL端口
docker run -p3306:3306 ... mysql
然后您可以通过安装mysql
命令行客户端,然后运行
mysql -h 127.0.0.1 ../my.file.sql -u {user} --password={password} {dbName}
如果您已将Docker配置为需要root权限才能访问它(这是一个非常合理的设置),那么它的另一个优点是不需要仅运行sudo
。