【问题标题】:Command sent to docker container shell exec failed发送到 docker 容器 shell exec 的命令失败
【发布时间】:2021-08-09 13:03:18
【问题描述】:

我正在启动一个容器来对主机文件发出一些命令。

这是通过 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

【问题讨论】:

  • 请分享docker logs $container_id的输出。
  • @AntonioPetricca 更新问题。
  • 尝试通过docker exec -ti $container_id 然后cd /usr/share && pwd && ls -l 进入容器控制台手动发出该指令并在此处发布结果。
  • @AntonioPetricca 它给出了预期的输出(问题已更新)
  • 将你的命令行减少到docker exec $container_id ls -l /usr/share/

标签: docker


【解决方案1】:

您获得container_id 可能是错误的。在继续之前,请确保在此变量中正确设置了值。

请注意:您同时使用-d-it 选项。 -it 被忽略,因为您告诉容器作为守护程序运行,您不会将 TTY 附加到它。 -it 选项在这里完全被忽略了。

当您exec 进入容器时,它会在容器中运行一个新会话。这意味着您不会在日志中看到您给出的命令的结果,因为它在新会话的输出中。

要访问日志,您必须在使用exec 时使用-it 选项。如果您在问题Docker exec in docker windows 中引用@nish8690,则需要在命令中将斜杠加倍:

而不是

docker exec -it [containerid] /bin/sh

尝试使用

docker exec -it [containerid] //bin//sh

-- @nish8690, Docker exec in docker windows

结果可能是:

docker exec -it $container_id //bin//sh -c "cd /usr/share && pwd && ls -l"

【讨论】:

  • 双斜杠给出了预期的结果。感谢那。但是,it 选项不会被忽略。当容器在没有它的情况下运行时,容器会立即停止。使用it,它会继续运行。
  • 我建议避免将-it-d 一起使用,原因很简单,容器可以永远保持活动状态而不会注意到它。
猜你喜欢
  • 2019-04-28
  • 2021-08-18
  • 2020-09-24
  • 2014-12-12
  • 2019-02-02
  • 2020-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多