我正在启动一个容器,以便在主机文件上发出一些命令。
这是通过一个shell脚本完成的:
echo "--- Starting container"
container_id=$(docker run -d -it --mount type=bind,source="$mount_path",target=/usr/share --name project-test python:3.5.2-alpine)
docker exec $container_id /bin/sh -c "cd /usr/share && pwd && ls -l"
然而,这抛出了一个我不知道如何修复的错误:
OCI运行时执行失败:执行失败:container_linux.go:367:启动容器进程导致:exec:";C:/Program Files/Git/usr/bin/sh〃:stat C:/Program Files/Git/usr/bin/sh:没有这样的文件或目录:未知
我的主机是windows 10。据我所知,容器上的exec
命令应该在容器内运行。但错误显示了从我的主机开始的路径为什么?如何正确地将命令发送到docker容器
编辑:
docker exec
之后容器的日志为:
Python 3.5.2 (default, Dec 27 2016, 21:33:11)
[GCC 5.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
编辑:手动发出命令的结果(预期结果(
/ # cd /usr/share && pwd && ls -l
/usr/share
total 5
-rwxr-xr-x 1 root root 347 May 20 06:31 README.md
drwxrwxrwx 1 root root 4096 May 20 08:22 myproject
docker exec $container_id ls -l /usr/share
ls: C:/Program Files/Git/usr/share: No such file or directory
您对container_id
的获取可能是错误的。继续之前,请确保在此变量中正确设置了值。
请注意:您同时使用-d
和-it
选项。-it
被忽略,因为你告诉容器作为守护进程运行,你不会将TTY附加到它。-it
选项在这里被完全忽略。
当您将exec
放入容器中时,它会在容器中运行一个新会话。这意味着您将不会在日志中看到您给出的命令的结果,因为它在新会话的输出中。
若要访问日志,在使用exec
时必须使用-it
选项。如果你在Docker窗口中提到@nish8690关于Docker exec的问题,你需要在命令中加倍斜杠:
而不是
docker exec -it [containerid] /bin/sh
尝试使用
docker exec -it [containerid] //bin//sh
--@nish8690,Docker windows 中的Docker exec
可能导致:
docker exec -it $container_id //bin//sh -c "cd /usr/share && pwd && ls -l"
在Windows主机上使用docker时,斜线会转换为Windows斜线,因此git会令人困惑。要从Windows主机访问docker机器,您最需要使用双斜杠来覆盖Windows斜杠格式。
一个如何运行文件的示例,您需要运行//run.sh
而不是运行/run.sh
。
这个解决方案将解决您的问题。