【发布时间】:2018-06-08 14:58:46
【问题描述】:
我已经通过 libav-tools 对一个安装了 ffmpeg 的应用程序进行了 docker 化。应用程序启动没有问题,但是当 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"]
我很乐意寻求您的帮助。非常感谢!
【问题讨论】:
-
尝试使用
docker run --rm -ti your-image-name sh进入您的容器并找到您的可执行文件。很可能只是PATH问题(你的可执行文件所在的目录不在容器内root unser的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 操作系统中获得相同的包。容器中的操作系统可能有问题吗? -
你跑
apt-get update了吗? -
我确实运行了
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"输出为空。 -
首先你必须找到你的可执行文件的绝对路径(也许使用find)。然后,您有 2 个选项:1)在 docker 的 CMD 中使用可执行文件的完整路径(通常在您调用可执行文件的任何地方)2)将包含二进制文件的目录添加到 PATH 环境变量的末尾,例如如:
export PATH=$PATH:/my/bin/folder