【问题标题】:/bin/sh: my_custom command not found inside Docker container/bin/sh:在 Docker 容器中找不到 my_custom 命令
【发布时间】: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 二进制文件。

标签: bash docker binary sh


【解决方案1】:

我建议替换CMD [ "yarn", "run", "deploy" ]

ENTRYPOINT ["sh", "/app/.binaries/yarn"]
CMD ["run", "deploy"]

我认为你有两个问题:

  1. 你知道yarn 是可执行的吗?不知道是不是,但是显式调用sh就意味着没关系。
  2. 我不认为yarn 在路径中。显式使用yarn 的绝对路径意味着它应该无关紧要。

【讨论】:

  • 该应用程序使用纱线运行良好,@emory。问题是它不承认 ffmpeg 命令。
  • @ntonnelier 我想我误诊了你的问题。您能否使用命令echo ${PATH} && ls -lh /app/.binaries/bin/ffmpeg /bin/ffmpeg && which yarn ffmpeg 运行修改后的脚本以获取诊断信息。
  • 他们来了,@emory。但这是在我的本地环境中运行良好。问题在于我们在部署 AWS 时。 echo ${PATH}: /var/lang/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin ls -lh /app/.binaries /bin/ffmpeg: ../bundles/e51bceda4ace9f7eab4c0f5d52f95d5c6787505a1ef741f3854ad2653d815cbb/usr /bin/ffmpeg: ffmpeg 版本 2.8.14-0ubuntu0.16.04.1 版权所有 (c) 2000-2018 / ffmpeg/ ffmpeg 开发者纱线 /var/lang/bin/ffmpeg
猜你喜欢
  • 1970-01-01
  • 2021-11-13
  • 2019-04-19
  • 2013-05-16
  • 2018-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多