找不到入口点文件

Lui*_* E. 15 docker dockerfile

我有一个使用此命令的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"]
Run Code Online (Sandbox Code Playgroud)

它正确构建但是当我尝试运行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......没有任何效果

zar*_*tra 22

我有同样的问题 - 找不到入口点,但我确信它就那里.

看来你不能使用单引号'作为入口/命令.

所以我改变了

ENTRYPOINT ['/foo/bar/script.sh']
CMD ['run']
Run Code Online (Sandbox Code Playgroud)

ENTRYPOINT ["/foo/bar/script.sh"]
CMD ["run"]
Run Code Online (Sandbox Code Playgroud)

它的工作原理.

  • 我内心深处有些声音告诉我单引号可能是个问题。但是,我告诉自己单引号/双引号在这里都相同。但是我错了。在尝试了将近1个小时的不同尝试之后,我改用双引号,瞧瞧... (4认同)
  • 其原因在 Dockerfile 参考中:“注意:exec 形式被解析为 JSON 数组,这意味着您必须在单词周围使用双引号 (“),而不是单引号 (')。” (4认同)
  • 我一生中最糟糕的 3 个小时,试图弄清楚为什么 F 它找不到文件,谢谢!,不能强调它足够,谢谢! (2认同)

小智 14

问题的另一个来源可能是你的 shebang,如果你/bin/bash的镜像/基础镜像中有 bash,但没有,它会告诉你没有找到你的入口点。这是我遇到的问题之一。

  • 这是我迁移到 alpine 发行版时的情况,所以现在需要用 ash 替换 bash,只是有一个“b”的区别 (2认同)
  • 这个,以及上面的赞成评论......起初我尝试安装 `bash` 但最终我的解决方案是在我的脚本文件中将 `bash` 更改为 `sh`:`#!/usr/bin/env sh` ...到目前为止我遇到的所有错误都不是那么清楚,哈哈。 (2认同)

小智 12

就我而言,我有一个错误:

> [27/35] RUN /entrypoint.sh:
#31 0.503 /bin/sh: 1: /entrypoint.sh: not found
Run Code Online (Sandbox Code Playgroud)

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

dos2unix entrypoint.sh
Run Code Online (Sandbox Code Playgroud)

  • 我希望我能投票一百次。 (2认同)

BMi*_*tch 8

/ 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"]
Run Code Online (Sandbox Code Playgroud)

  • 哦,没关系,我发现了问题:高山图像,当使用入口点时,应该有`#!/ bin/sh`而不是`#!/ bin/bash`.愚蠢的错误 (16认同)

小智 6

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

  • 将 CRLF 更改为 LF:/sf/answers/2767302331/ (17认同)
  • 哦,我的天哪……真的……现在可以用了,非常感谢! (4认同)
  • 哇,就是这样。谢谢!! (3认同)
  • 哇,怎么……我花了将近一个小时来尝试解决这个问题!谢谢! (3认同)
  • 这样可行!该文件是由另一位开发人员在 ubuntu 上创建的,而我正在 Windows 上工作。 (2认同)
  • 这几乎感觉超现实...... (2认同)