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

199
我将一个安装了 ffmpeg 的应用 docker 化了,通过 libav-tools 安装。这个应用程序可以启动而没有问题,但是当 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"]

我想恳请您的帮助。非常感谢!


7
尝试使用docker run --rm -ti your-image-name sh进入容器,找到可执行文件。这可能只是一个PATH问题(即包含可执行文件的目录未在容器内根用户的PATH中)。 - 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" 命令,输出为空。 - Uğur Kaya
1
首先,您必须找到可执行文件的绝对路径(可能使用find命令)。 然后,您有两个选项: 1)在docker的CMD中使用可执行文件的完整路径(以及一般情况下您调用可执行文件的任何地方) 2)将包含二进制文件的目录添加到PATH环境变量的末尾,例如:export PATH=$PATH:/my/bin/folder - whites11
请参见 https://dev59.com/JV4d5IYBdhLWcg3wHPc9 - That Brazilian Guy
这里获取更多解决方案。 - MD SHAYON
显示剩余6条评论
16个回答

0
这件事情发生在我身上。我的问题是由于我没有正确地挂载Docker文件系统所致,因此我配置了磁盘映像位置并重新绑定文件共享挂载,现在这个问题已经得到了正确的解决。 供参考,我在Windows上使用Docker桌面版。

0
您需要按照以下方式运行:
docker exec sh -c 'echo "$ENV_NAME"'

1
虽然这段代码可能解决了问题,但是如果你能够 包括解释 它是如何解决问题的,为什么会产生这种结果,这将有助于提高你回答的质量,并且可能会获得更多的赞。请记住,你的回答不仅仅是为了帮助当前提问者,也是为了未来的读者。请编辑你的回答以添加解释,并说明其局限性和假设。 - Yunnosch

0
在我的情况下,我保存了 Docker 镜像,但是在另一台机器上不是使用 load 命令而是使用 import 命令导入,这两种方法非常不同,导致出现了类似于这样的错误。

0

我在一个shell脚本中使用了Windows换行符,需要改为LF(Line Feed)格式,可以使用dos2unix命令。


0
如果您在使用docker run命令时遇到此错误,可能是因为您犯了一个简单的语法错误。

示例

不正确的:

docker run myimage -p 3838:3838 

docker: Error response from daemon: failed to create shim: OCI runtime create
failed: container_linux.go:380: starting container process caused: 
exec: "-p": executable file not found in $PATH: unknown.
ERRO[0000] error waiting for container: context canceled 

正确的做法(选项放在图片名称之前):

docker run -p 3838:3838 myimage

0
在我的情况下,我一直在这样运行,这是错误的方式 ❌
docker exec c44f29d30753 -it bash

像这样运行 ✅

docker exec -it c44f29d30753 bash 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接