【问题标题】:entrypoint file not found找不到入口点文件
【发布时间】:2017-06-09 14:51:38
【问题描述】:

我有一个带有这个命令的 docker 镜像:

FROM ruby:2.4-alpine
WORKDIR /usr/src/app

COPY Gemfile /usr/src/app/Gemfile
COPY Gemfile.lock /usr/src/app/Gemfile.lock

RUN bundle config build.nokogiri --use-system-libraries
RUN bundle install --without development test

VOLUME /state

COPY . /usr/src/app/

ENTRYPOINT ["api-entrypoint.sh"]
CMD ["foreman", "start"]

它可以正确构建,但是当我尝试运行 bash 时,例如,我得到了这个 container_linux.go:247: starting container process caused "exec: \"api-entrypoint.sh\": executable file not found in $PATH" docker: Error response from daemon: oci runtime error: container_linux.go:247: starting container process caused "exec: \"api-entrypoint.sh\": executable file not found in $PATH".

我尝试复制入口点文件,并使用CMD 赋予它可执行权限...没有任何效果

【问题讨论】:

  • 我正在使用ADD,最后为我的输入脚本设置了正确的权限,即:ADD entry.sh /entry.sh RUN chmod +x /entry.sh ENTRYPOINT /entry.sh

标签: docker dockerfile


【解决方案1】:

我在使用 Docker for Windows 时遇到了这个问题,解决方案是将入口点脚本文件从 CRLF -> LF 更改。

【讨论】:

  • 哦,我的 effin 词......真的......现在可以工作了,非常感谢!
  • 哇,就是这样。谢谢!!
  • 哇,如何.... 我试图解决这个问题将近一个小时!谢谢!
  • 行得通!该文件是由另一个开发人员在 ubuntu 上创建的,我在 windows 上工作。
  • 将 CRLF 更改为 LF:stackoverflow.com/a/39532890/3176451
【解决方案2】:

我遇到了同样的问题 - 没有找到入口点,但我确定它那里。

您似乎不能在入口点/命令中使用单引号'

所以我改变了

ENTRYPOINT ['/foo/bar/script.sh']
CMD ['run']

ENTRYPOINT ["/foo/bar/script.sh"]
CMD ["run"]

它有效。

【讨论】:

  • 这会有所不同。谢谢!
  • 这对我没有影响
  • 在我内心深处,一些声音告诉我单引号可能是个问题。但是,我告诉自己单引号/双引号在这里都是一样的。但我错了。在尝试了将近 1 小时的不同事物后,我改为使用双引号,瞧……
  • 原因在 Dockerfile 参考:Note: The exec form is parsed as a JSON array, which means that you must use double-quotes (“) around words not single-quotes (‘).
  • 我生命中最糟糕的 3 个小时,试图弄清楚为什么 F 找不到文件,谢谢!,压力不够,谢谢!!
【解决方案3】:

/usr/src/app 可能不在您的路径中,因此您应该包含脚本的完整路径。您还需要确保您的 entrypoint.sh 是可执行的,docker 将完全按照您的构建主机上的权限复制权限,因此根据您的情况可能不需要此步骤。

FROM ruby:2.4-alpine
WORKDIR /usr/src/app

COPY Gemfile /usr/src/app/Gemfile
COPY Gemfile.lock /usr/src/app/Gemfile.lock

RUN bundle config build.nokogiri --use-system-libraries
RUN bundle install --without development test

VOLUME /state

COPY . /usr/src/app/
RUN chmod 755 api-entrypoint.sh

ENTRYPOINT ["/usr/src/app/api-entrypoint.sh"]
CMD ["foreman", "start"]

【讨论】:

  • 它在本地工作,但由于某种原因,在 Docker Cloud 上部署时,我一直看到 ERROR: api-1: Container command '/usr/src/app/api-entrypoint.sh' not found or does not exist.
  • 您是否部署了相同的映像(具有相同的映像 ID)?
  • 哦,没关系,我发现了问题:高山图像,当使用入口点时,应该有#!/bin/sh而不是#!/bin/bash。愚蠢的错误
【解决方案4】:

另一个问题来源可能是您的 shebang,如果您有 /bin/bash 并且您的图像/基本图像中没有 bash,它会告诉您找不到入口点。这是我遇到的问题之一。

【讨论】:

  • 这是我的情况,因为我们迁移到了 alpine 发行版,所以现在需要用 ash 替换 bash,只是一个 'b' 的区别
【解决方案5】:

就我而言,我遇到了一个错误:

> [27/35] RUN /entrypoint.sh:
#31 0.503 /bin/sh: 1: /entrypoint.sh: not found

我刚刚运行 dos2unix 命令,问题就消失了:

dos2unix entrypoint.sh

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-02
    • 1970-01-01
    • 1970-01-01
    • 2015-02-03
    • 2012-12-08
    • 2019-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多