【发布时间】:2018-11-13 16:11:58
【问题描述】:
上下文如下:我需要在使用 Docker 部署和构建的 AWS Lambda 服务中运行 ffmpeg。由于我们使用的 docker 镜像不是 debian 并且不包含 ffmpeg,所以我用命令创建了一个二进制文件并将其添加到项目文件中。然后,在 Dockerfile 中,我创建了一个指向这些二进制文件的链接,因此该命令包含在 /bin 中。
这是 Dockerfile:
FROM lambci/lambda:build-nodejs6.10
# Create app directory
WORKDIR /app
# Install app dependencies
COPY package.json .
COPY yarn.lock .
#add ffmpeg files
COPY binaries .binaries
#make link to ffmpeg
RUN ln -s /app/.binaries/bin/ffmpeg /bin/ffmpeg
RUN npm install --global yarn
RUN yarn install
RUN yarn global add serverless@~1.24.1
# Bundle app source
COPY . .
EXPOSE 8080
CMD [ "yarn", "run", "deploy" ]
虽然这似乎在本地环境中工作(命令在从 docker 映像内的控制台调用时响应),但在部署到阶段时它不起作用:
/bin/sh: ffmpeg: command not found
【问题讨论】:
-
你是否验证过ffmpeg在目标平台上是合法的二进制文件,是否配置了执行权限,它依赖于哪些库?
-
我没有@BMitch。但我假设如果该命令在我的本地 docker 容器中有效,那么在部署时也应该如此。不会吗?
-
本地运行时是否挂载任何卷?是否存在您在本地运行的相同架构上部署的架构?
-
没什么额外的,一切都在那个 Dockerfile 中。然后我们部署到 Lambda。为什么要问架构?为了能够在不同的环境中对其进行测试?
-
例如,您不能在 arm64 平台上运行 x86 二进制文件。