docker - 发送到 docker 容器 shell exec 的命令失败
问题描述
我正在启动一个容器以在主机文件上发出一些命令。
这是通过 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:启动容器进程导致:执行:“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
进入容器时,它会在容器中运行一个新会话。这意味着您不会在日志中看到您给出的命令的结果,因为它在新会话的输出中。
要访问日志,您必须-it
在使用exec
. 如果您在 docker windows 中的 Docker exec问题上参考@nish8690,则需要在命令中加倍斜杠:
代替
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"
推荐阅读
- algorithm - 子图选择算法问题(动态规划或 NP)
- html - 将现有 Intranet 转换为 Visual Studio .sln 项目文件
- react-testing-library - 如何检查元素是否隐藏在反应测试库自定义查询中?
- r - 多个向量的和
- c# - C# Visual Studio for mac:智能感知自动完成错误。禁用选项?
- javascript - readline.question 不会在循环内运行 X 次
- javascript - 我有两个按钮 onclick 更改文本按钮并且不保存我想使用 javascript 中的本地存储来保存更改
- css - 我可以强制滚动捕捉始终捕捉到剪切/可见元素的开头吗?
- android - 在 Android 10+ 中添加 802.1x 网络
- c++ - 错误:从 'const char*' 到 'char*' 的无效转换 [-fpermissive]