OCI运行时exec失败:exec失败:(…)在$ PATH中找不到可执行文件“:未知


71

我已经通过libav-tools将其中安装了ffmpeg的应用泊坞窗化了。该应用程序启动时没有问题,但是当fluent-ffmpeg npm模块尝试执行ffmpeg命令时却出现了问题,但未找到该问题。当我想检查映像中设置的ffmpeg和linux版本时,我使用了sudo docker exec -it c44f29d30753 "lsb_release -a"命令,但是它给出了以下错误:OCI runtime exec failed: exec failed: container_linux.go:296: starting container process caused "exec: \"lsb_release -a\": executable file not found in $PATH": unknown

然后我意识到,在映像或容器中尝试运行的所有命令,都会给我带来相同的错误。

OCI runtime exec failed: exec failed: container_linux.go:296: starting container process caused "exec: \"ffmpeg -a\": executable file not found in $PATH": unknown

这是我的Dockerfile:

FROM ubuntu:xenial
FROM node
RUN apt-get -y update
RUN apt-get --yes install libav-tools
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY package.json /usr/src/app
RUN npm install
COPY . /usr/src/app
RUN npm run build
ENV NODE_ENV production
EXPOSE 8000
CMD ["npm", "run", "start:prod"]

请您帮忙。非常感谢你!


3
尝试使用输入容器,docker run --rm -ti your-image-name sh并找到可执行文件。这可能只是一个PATH问题(您的可执行文件所在的目录不在容器内部根
解析器

我已经使用您推荐的命令输入了容器。问题是,当我尝试做apt-get install ffmpeg,结果是:Package ffmpeg is not available, but is referred to by another package. This may mean that the package is missing, has been obsoleted, or is only available from another source E: Package 'ffmpeg' has no installation candidate。但是,我可以在ubuntu 16.04 OS中获得相同的软件包。容器中的OS可能有问题吗?
维吾尔族卡亚

你跑了apt-get update吗?
whites11

我确实已运行apt-get -y update && apt-get -y upgrade,并且在尝试运行时在容器内lsb_release -a,这次的输出sh: 4: lsb_release: not found与ffmpeg相同:sh: 5: ffmpeg: not found。我运行apt-get install libav-tools并获得 # apt-get install libav-tools Reading package lists... Done Building dependency tree Reading state information... Done libav-tools is already the newest version.。如果我find -name "ffmpeg"输出为空。
维吾尔族卡亚

1
首先,您必须找到可执行文件的绝对路径(也许使用find)。然后,您有2个选择:1)在docker的CMD中使用可执行文件的完整路径(通常在所有您调用可执行文件的地方)2)将包含二进制文件的目录添加到PATH环境变量的末尾,例如如:export PATH=$PATH:/my/bin/folder
whites11年

Answers:


83

这是我在窗户上发生的。这些命令中的任何一个都可以

在Windows CMD上(不切换到bash)

docker exec -it <container-id> /bin/sh

在Windows CMD上(切换到bash之后)

docker exec -it <container-id> //bin//sh

要么

winpty docker exec -it <container-id> //bin//sh

在Git Bash上

winpty docker exec -it <container-id> //bin//sh

注意:您可能需要运行use/bin/bash/bin/sh,具体取决于容器中的外壳。

原因已记录在Git的ReleaseNotes文件中,并在此处进行了很好的解释-Git for Windows中的Bash:怪异...

“原因与试图确保最终将posix路径正确传递到git实用程序有关。因此,Git for Windows包括一个修改后的MSYS层,该层会影响命令参数。”


1
就像工作:您可能需要使用/ bin / bash或/ bin / sh
Indra,

kubectl exec -it <pod_name> /bin/sh为我工作,谢谢
sgauri

28

我的原因是我的订单简单错误。我打了电话

[WRONG] docker run <image> <arguments> <command>

当我应该使用

docker run <arguments> <image> <command>

在类似问题上具有相同的分辨率:https : //stackoverflow.com/a/50762266/6278


如果我使用docker-compose怎么办,可能是什么错误?我跑过docker-compose -f .\a-docker-compose-file.yml up
otong

2
@otong您的意见与我的回答无关。请将其发布为新问题,并在此详细说明您的具体问题。
Henrik Heimbuerger

1
适用于docker compose并为我修复了它。非常感谢
David

16

删除命令周围的引号。当您引用它时,docker尝试将完整字符串"lsb_release -a"作为命令运行,该命令不存在。相反,您要lsb_release使用参数运行命令-a且不带引号。

sudo docker exec -it c44f29d30753 lsb_release -a

请注意,容器名称后面的所有内容都是要在容器内运行的命令和参数,docker不会将其中的任何内容作为docker命令的选项进行处理。




5

我遇到了这个问题,结果发现我需要这样做:

docker run ${image_name} bash -c "${command}"

希望对发现此错误的人有所帮助。


4

@papigee应该可以在Windows 10上正常工作。我正在将集成的VSCode终端与git bash一起使用,这始终对我有用。

winpty docker exec -it <container-id> //bin//sh

2

我要做的只是:

  1. 运行docker ps -a
  2. 检查容器的命令(以/ bin / sh开头的命令)
  3. 运行docker-compose exec <name_of_service> / bin / sh(如果这是您启动命令的原因)

这是为了解决使用docker compose时的问题


1

您可以使用另一个外壳执行相同的命令:

执行时出现错误:

[jenkins@localhost jenkins_data]$ docker exec -it mysqldb \bin\bash
OCI runtime exec failed: exec failed: container_linux.go:345: starting container process caused "exec: \"binsh\": executable file not found in $PATH": unknown

解决方案:当我使用下面的命令执行它时,使用bash shell可以正常工作:

[jenkins@localhost jenkins_data]$ docker exec -it mysqldb bash
root@<container-ID>:/#


0

这发生在我身上。我的问题是由于我没有正确安装Docker文件系统而引起的,所以我配置了磁盘映像位置并重新绑定了文件共享安装,现在可以正常工作了。作为参考,我在Windows中使用Docker Desktop。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.