上下文如下:我需要在使用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
答案 0 :(得分:0)
我建议替换CMD [ "yarn", "run", "deploy" ]
与
ENTRYPOINT ["sh", "/app/.binaries/yarn"]
CMD ["run", "deploy"]
我认为你有两个问题:
yarn
是可执行的吗?我不知道它不是,但明确地调用sh
意味着它无所谓。yarn
不在路径中。明确使用yarn
的绝对路径意味着它无关紧要。